commit | 8575deb1a80bf86f3b4d931196f8be4d361aad34 | [log] [tgz] |
---|---|---|
author | Benjamin Prosnitz <bprosnitz@google.com> | Wed Jul 08 12:51:28 2020 +0000 |
committer | CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org> | Wed Jul 08 12:51:28 2020 +0000 |
tree | ec4f4b51384646cd575d0953f3ae27fe44074482 | |
parent | f48057b60483067d3d36539ad18e62a671be7a8e [diff] |
[fidl][rust] Move 'offset' to decode method parameter The Decoder currently has an offset field. By moving this off the object to a method parameter, code can directly index into offsets rather than manipulating state before offset. A similar change was done for the Encoder, which both had significant immediate impact and led to later wins. The change was deferred for the Decoder because immediate wins were less obvious. However, there are still a number of use cases where this is expected to have fruitful gains such as when working with padding or peeking at the result. There are some improvements and some regressions. The larger regressions are with non-optimized arrays/vectors where the parameter is repeatedly passed in. Rust/Decode/BoolArray/256/WallTime slower 1.390-1.463 1249.2 +/- 2.8 ns 1782 +/- 41 ns Rust/Decode/ByteArray/16/WallTime slower 1.009-1.015 49.993 +/- 0.078 ns 50.590 +/- 0.084 ns Rust/Decode/ByteArray/256/WallTime no_sig_diff 0.942-1.075 64.6 +/- 2.4 ns 65.0 +/- 1.9 ns Rust/Decode/ByteVector/16/WallTime slower 1.040-1.052 157.72 +/- 0.23 ns 164.98 +/- 0.68 ns Rust/Decode/ByteVector/256/WallTime no_sig_diff 0.978-1.049 216.7 +/- 4.2 ns 219.5 +/- 3.4 ns Rust/Decode/ByteVector/4096/WallTime no_sig_diff 0.847-1.325 582 +/- 50 ns 620 +/- 85 ns Rust/Decode/ByteVector/65536/WallTime no_sig_diff 0.980-1.014 7885 +/- 59 ns 7861 +/- 76 ns Rust/Decode/ByteVectorLimit/1/WallTime no_sig_diff 0.878-1.144 174 +/- 22 ns 172.60 +/- 0.72 ns Rust/Decode/DatagramSocket/RecvMsg/Request/WallTime slower 1.004-1.014 77.85 +/- 0.10 ns 78.55 +/- 0.26 ns Rust/Decode/DatagramSocket/RecvMsg/Result/WallTime no_sig_diff 0.985-1.029 756.4 +/- 9.9 ns 761.2 +/- 6.8 ns Rust/Decode/DatagramSocket/SendMsg2/Request/WallTime no_sig_diff 0.981-1.046 690 +/- 13 ns 699.1 +/- 9.4 ns Rust/Decode/DatagramSocket/SendMsg2/Result/WallTime slower 1.060-1.072 96.61 +/- 0.29 ns 102.98 +/- 0.30 ns Rust/Decode/EmptyStruct/WallTime slower 1.036-1.052 30.31 +/- 0.14 ns 31.64 +/- 0.11 ns Rust/Decode/EnumArray/256/WallTime slower 1.160-1.195 3474 +/- 16 ns 4090 +/- 42 ns Rust/Decode/ErrorSyntaxResult_Failure/WallTime faster 0.954-0.964 91.63 +/- 0.12 ns 87.86 +/- 0.32 ns Rust/Decode/ErrorSyntaxResult_Success/WallTime no_sig_diff 0.979-1.039 182.17 +/- 0.23 ns 183.8 +/- 5.2 ns Rust/Decode/FloatArray/256/WallTime slower 1.287-1.377 1711.3 +/- 3.6 ns 2279 +/- 72 ns Rust/Decode/GPUMagma/ExecuteImmediateCommandsRequest/CommandByte1024/Semaphore32/WallTime no_sig_diff 0.984-1.051 547.4 +/- 8.4 ns 556.8 +/- 9.8 ns Rust/Decode/GPUMagma/ExecuteImmediateCommandsRequest/CommandByte128/Semaphore8/WallTime slower 1.013-1.038 344.0 +/- 2.1 ns 352.7 +/- 2.1 ns Rust/Decode/HardwareDisplay/OnVsyncEvent/Image64/WallTime no_sig_diff 0.978-1.055 250.5 +/- 5.2 ns 254.5 +/- 4.3 ns Rust/Decode/Int32Array/256/WallTime no_sig_diff 0.936-1.092 151.4 +/- 5.3 ns 153.1 +/- 6.5 ns Rust/Decode/Int32Vector/256/WallTime no_sig_diff 0.977-1.040 345.8 +/- 5.3 ns 348.7 +/- 5.6 ns Rust/Decode/Media/StreamPacket/WallTime no_sig_diff 0.976-1.006 120.43 +/- 0.20 ns 119.4 +/- 1.6 ns Rust/Decode/MessageHeader/WallTime slower 1.059-1.065 77.90 +/- 0.16 ns 82.718 +/- 0.093 ns Rust/Decode/OptionalStructTree/Depth8/WallTime no_sig_diff 0.989-1.000 25664 +/- 113 ns 25521 +/- 31 ns Rust/Decode/PaddedStructTree/Depth8/WallTime faster 0.943-0.955 6727.7 +/- 9.0 ns 6385 +/- 31 ns Rust/Decode/String/16/WallTime slower 1.049-1.053 156.74 +/- 0.17 ns 164.78 +/- 0.13 ns Rust/Decode/String/256/WallTime no_sig_diff 0.996-1.072 231.1 +/- 4.5 ns 238.7 +/- 4.1 ns Rust/Decode/String/4096/WallTime no_sig_diff 0.973-1.027 941 +/- 19 ns 939.9 +/- 6.0 ns Rust/Decode/StructArray/256/WallTime slower 1.113-1.124 7881 +/- 25 ns 8812 +/- 15 ns Rust/Decode/StructField/16/WallTime faster 0.959-0.965 187.63 +/- 0.19 ns 180.49 +/- 0.41 ns Rust/Decode/StructField/256/WallTime faster 0.956-0.960 2951.0 +/- 3.9 ns 2825.7 +/- 2.0 ns Rust/Decode/StructTree/Depth8/WallTime faster 0.938-0.947 5881 +/- 19 ns 5543.1 +/- 6.6 ns Rust/Decode/StructVector/256/WallTime slower 1.054-1.066 9724 +/- 31 ns 10309 +/- 25 ns Rust/Decode/Table/AllSet/1/WallTime faster 0.970-0.979 115.58 +/- 0.47 ns 112.64 +/- 0.12 ns Rust/Decode/Table/AllSet/16/WallTime no_sig_diff 0.998-1.006 982.1 +/- 3.3 ns 984.24 +/- 0.71 ns Rust/Decode/Table/AllSet/256/WallTime no_sig_diff 0.916-1.018 38759 +/- 818 ns 37422 +/- 1183 ns Rust/Decode/Table/LastSetOthersReserved/16/WallTime slower 1.032-1.054 445.3 +/- 1.7 ns 464.5 +/- 3.1 ns Rust/Decode/Table/LastSetOthersReserved/256/WallTime slower 1.075-1.080 5475.3 +/- 3.2 ns 5898.1 +/- 9.1 ns Rust/Decode/Table/SingleSet/16_of_16/WallTime faster 0.981-0.996 573.190 +/- 0.091 ns 566.7 +/- 4.4 ns Rust/Decode/Table/SingleSet/16_of_256/WallTime slower 1.075-1.108 1201.3 +/- 9.9 ns 1310.9 +/- 8.7 ns Rust/Decode/Table/SingleSet/1_of_1/WallTime faster 0.992-0.997 113.34 +/- 0.22 ns 112.756 +/- 0.053 ns Rust/Decode/Table/SingleSet/1_of_16/WallTime faster 0.888-0.896 139.03 +/- 0.64 ns 124.026 +/- 0.023 ns Rust/Decode/Table/SingleSet/1_of_256/WallTime faster 0.968-0.992 765.4 +/- 4.4 ns 750.2 +/- 4.9 ns Rust/Decode/Table/SingleSet/256_of_256/WallTime faster 0.842-0.883 16929 +/- 353 ns 14595 +/- 47 ns Rust/Decode/Table/Unset/1/WallTime faster 0.975-0.988 60.09 +/- 0.26 ns 59.01 +/- 0.13 ns Rust/Decode/Table/Unset/16/WallTime faster 0.804-0.820 87.23 +/- 0.32 ns 70.82 +/- 0.42 ns Rust/Decode/Table/Unset/256/WallTime faster 0.871-0.880 695.69 +/- 0.53 ns 609.1 +/- 2.9 ns Rust/Decode/Union/LastSet/1/WallTime faster 0.984-0.990 87.88 +/- 0.12 ns 86.73 +/- 0.13 ns Rust/Decode/Union/LastSet/16/WallTime slower 1.050-1.058 86.46 +/- 0.10 ns 91.09 +/- 0.24 ns Rust/Decode/Union/LastSet/256/WallTime slower 1.023-1.036 88.60 +/- 0.43 ns 91.20 +/- 0.11 ns Change-Id: I02555b4a27b4077dae80613bd833dd41ce0645e1 Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/404853 Reviewed-by: Pascal Perez <pascallouis@google.com> Reviewed-by: Mitchell Kember <mkember@google.com> Commit-Queue: Benjamin Prosnitz <bprosnitz@google.com> Testability-Review: Mitchell Kember <mkember@google.com>
Pink + Purple == Fuchsia (a new operating system)
Fuchsia is a modular, capability-based operating system. Fuchsia runs on modern 64-bit Intel and ARM processors.
Fuchsia is an open source project with a code of conduct that we expect everyone who interacts with the project to respect.
See Getting Started.
See fuchsia.dev.