good morning!!!!

Skip to content
Snippets Groups Projects
Forked from github / maticnetwork / bor
Source project has a limited visibility.
  • Felix Lange's avatar
    rlp: minor optimizations for slice/array encoding (#23467) · 32c576bd
    Felix Lange authored
    As per benchmark results below, these changes speed up encoding/decoding of
    consensus objects a bit.
    
        name                             old time/op    new time/op    delta
        EncodeRLP/legacy-header-8           384ns ± 1%     331ns ± 3%  -13.83%  (p=0.000 n=7+8)
        EncodeRLP/london-header-8           411ns ± 1%     359ns ± 2%  -12.53%  (p=0.000 n=8+8)
        EncodeRLP/receipt-for-storage-8     251ns ± 0%     239ns ± 0%   -4.97%  (p=0.000 n=8+8)
        EncodeRLP/receipt-full-8            319ns ± 0%     300ns ± 0%   -5.89%  (p=0.000 n=8+7)
        EncodeRLP/legacy-transaction-8      389ns ± 1%     387ns ± 1%     ~     (p=0.099 n=8+8)
        EncodeRLP/access-transaction-8      607ns ± 0%     581ns ± 0%   -4.26%  (p=0.000 n=8+8)
        EncodeRLP/1559-transaction-8        627ns ± 0%     606ns ± 1%   -3.44%  (p=0.000 n=8+8)
        DecodeRLP/legacy-header-8           831ns ± 1%     813ns ± 1%   -2.20%  (p=0.000 n=8+8)
        DecodeRLP/london-header-8           824ns ± 0%     804ns ± 1%   -2.44%  (p=0.000 n=8+7)
    
    * rlp: pass length to byteArrayBytes
    
    This makes it possible to inline byteArrayBytes. For arrays, the length is known
    at encoder construction time, so the call to v.Len() can be avoided.
    
    * rlp: avoid IsNil for pointer encoding
    
    It's actually cheaper to use Elem first, because it performs less checks
    on the value. If the pointer was nil, the result of Elem is 'invalid'.
    
    * rlp: minor optimizations for slice/array encoding
    
    For empty slices/arrays, we can avoid storing a list header entry in the
    encoder buffer. Also avoid doing the tail check at encoding time because
    it is already known at encoder construction time.
    Unverified
    32c576bd
Code owners
Assign users and groups as approvers for specific file changes. Learn more.