commit | 37bc335460c1f690b4be0f75e6e00d22e048b8a5 | [log] [tgz] |
---|---|---|
author | Benjamin Prosnitz <bprosnitz@google.com> | Wed Jul 08 22:03:09 2020 +0000 |
committer | CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org> | Wed Jul 08 22:03:09 2020 +0000 |
tree | a77c0dda161da9f145b82998ea99e561356f9560 | |
parent | 631fb7b450b1dfbfcfe0da6076806dfc58bbd624 [diff] |
[fidl][rust] Add unsafe_decode to avoid redundant bound checks In the FIDL decode, there are repeated checks of whether the read offset exceeds the bounds of the buffer. These really only need to happen once per inline block as the size of that block is known in advance. An analogous change added unsafe_encode in I9e2528efd8c34bc966fe82b82c338fb8a21ff4c0 Rust/Decode/BoolArray/256/WallTime slower 1.022-1.071 1788 +/- 24 ns 1870 +/- 19 ns Rust/Decode/ByteArray/16/WallTime slower 1.081-1.092 50.57 +/- 0.12 ns 54.95 +/- 0.14 ns Rust/Decode/ByteArray/256/WallTime no_sig_diff 0.962-1.075 64.6 +/- 1.8 ns 65.7 +/- 1.8 ns Rust/Decode/ByteVector/16/WallTime faster 0.931-0.937 164.99 +/- 0.19 ns 154.07 +/- 0.32 ns Rust/Decode/ByteVector/256/WallTime faster 0.913-0.990 218.5 +/- 4.9 ns 207.7 +/- 3.8 ns Rust/Decode/ByteVector/4096/WallTime no_sig_diff 0.906-1.153 582 +/- 50 ns 592 +/- 21 ns Rust/Decode/ByteVector/65536/WallTime no_sig_diff 0.828-1.101 7864 +/- 72 ns 7574 +/- 1003 ns Rust/Decode/ByteVectorLimit/1/WallTime no_sig_diff 0.837-1.097 175 +/- 23 ns 166.63 +/- 0.82 ns Rust/Decode/DatagramSocket/RecvMsg/Request/WallTime faster 0.887-0.894 78.48 +/- 0.13 ns 69.85 +/- 0.17 ns Rust/Decode/DatagramSocket/RecvMsg/Result/WallTime faster 0.922-0.960 758.8 +/- 7.5 ns 713.7 +/- 7.5 ns Rust/Decode/DatagramSocket/SendMsg2/Request/WallTime faster 0.935-0.982 696.0 +/- 8.4 ns 666.9 +/- 8.2 ns Rust/Decode/DatagramSocket/SendMsg2/Result/WallTime faster 0.802-0.809 101.587 +/- 0.094 ns 81.85 +/- 0.25 ns Rust/Decode/EmptyStruct/WallTime slower 1.125-1.163 31.77 +/- 0.20 ns 36.34 +/- 0.37 ns Rust/Decode/EnumArray/256/WallTime faster 0.835-0.871 4081 +/- 17 ns 3481 +/- 58 ns Rust/Decode/ErrorSyntaxResult_Failure/WallTime faster 0.844-0.851 88.25 +/- 0.11 ns 74.80 +/- 0.22 ns Rust/Decode/ErrorSyntaxResult_Success/WallTime faster 0.851-0.855 180.86 +/- 0.22 ns 154.23 +/- 0.17 ns Rust/Decode/FloatArray/256/WallTime slower 1.078-1.168 2268 +/- 84 ns 2543.5 +/- 7.8 ns Rust/Decode/GPUMagma/ExecuteImmediateCommandsRequest/CommandByte1024/Semaphore32/WallTime faster 0.939-0.997 551.7 +/- 7.9 ns 533.7 +/- 8.3 ns Rust/Decode/GPUMagma/ExecuteImmediateCommandsRequest/CommandByte128/Semaphore8/WallTime faster 0.947-0.969 347.7 +/- 2.3 ns 333.2 +/- 1.6 ns Rust/Decode/HardwareDisplay/OnVsyncEvent/Image64/WallTime faster 0.918-0.981 255.7 +/- 4.1 ns 242.7 +/- 4.2 ns Rust/Decode/Int32Array/256/WallTime no_sig_diff 0.943-1.076 152.3 +/- 5.2 ns 153.4 +/- 4.9 ns Rust/Decode/Int32Vector/256/WallTime no_sig_diff 0.959-1.005 348.3 +/- 4.8 ns 342.0 +/- 3.2 ns Rust/Decode/Media/StreamPacket/WallTime faster 0.896-0.945 119.7 +/- 2.9 ns 110.09 +/- 0.28 ns Rust/Decode/MessageHeader/WallTime faster 0.989-0.996 82.745 +/- 0.072 ns 82.10 +/- 0.22 ns Rust/Decode/OptionalStructTree/Depth8/WallTime faster 0.978-0.982 25476 +/- 25 ns 24959 +/- 28 ns Rust/Decode/PaddedStructTree/Depth8/WallTime faster 0.944-0.960 6389 +/- 26 ns 6082 +/- 26 ns Rust/Decode/String/16/WallTime faster 0.959-0.962 164.77 +/- 0.12 ns 158.26 +/- 0.18 ns Rust/Decode/String/256/WallTime no_sig_diff 0.939-1.016 237.7 +/- 4.2 ns 232.1 +/- 5.0 ns Rust/Decode/String/4096/WallTime no_sig_diff 0.960-1.024 945 +/- 19 ns 937 +/- 11 ns Rust/Decode/StructArray/256/WallTime faster 0.979-0.990 8810 +/- 11 ns 8676 +/- 36 ns Rust/Decode/StructField/16/WallTime slower 1.018-1.024 180.42 +/- 0.30 ns 184.15 +/- 0.22 ns Rust/Decode/StructField/256/WallTime faster 0.975-0.983 2827.3 +/- 3.5 ns 2767.9 +/- 6.6 ns Rust/Decode/StructTree/Depth8/WallTime faster 0.964-0.971 5545.0 +/- 7.6 ns 5367 +/- 12 ns Rust/Decode/StructVector/256/WallTime faster 0.978-0.982 10282 +/- 13 ns 10080.1 +/- 7.7 ns Rust/Decode/Table/AllSet/1/WallTime faster 0.863-0.942 110.05 +/- 0.97 ns 99.3 +/- 3.5 ns Rust/Decode/Table/AllSet/16/WallTime faster 0.842-0.887 980 +/- 22 ns 847.0 +/- 3.0 ns Rust/Decode/Table/AllSet/256/WallTime faster 0.864-0.949 37226 +/- 880 ns 33716 +/- 786 ns Rust/Decode/Table/LastSetOthersReserved/16/WallTime faster 0.729-0.732 467.04 +/- 0.25 ns 341.28 +/- 0.41 ns Rust/Decode/Table/LastSetOthersReserved/256/WallTime faster 0.688-0.694 5873.5 +/- 7.9 ns 4061 +/- 12 ns Rust/Decode/Table/SingleSet/16_of_16/WallTime faster 0.761-0.771 568.2 +/- 3.4 ns 435.34 +/- 0.23 ns Rust/Decode/Table/SingleSet/16_of_256/WallTime faster 0.870-0.891 1310.4 +/- 1.7 ns 1154 +/- 13 ns Rust/Decode/Table/SingleSet/1_of_1/WallTime faster 0.896-0.902 110.16 +/- 0.20 ns 99.032 +/- 0.098 ns Rust/Decode/Table/SingleSet/1_of_16/WallTime faster 0.876-0.879 124.39 +/- 0.11 ns 109.12 +/- 0.11 ns Rust/Decode/Table/SingleSet/1_of_256/WallTime faster 0.973-0.976 748.88 +/- 0.87 ns 729.71 +/- 0.50 ns Rust/Decode/Table/SingleSet/256_of_256/WallTime faster 0.838-0.889 14606 +/- 220 ns 12605 +/- 180 ns Rust/Decode/Table/Unset/1/WallTime slower 1.018-1.032 56.45 +/- 0.29 ns 57.86 +/- 0.12 ns Rust/Decode/Table/Unset/16/WallTime faster 0.910-0.916 71.135 +/- 0.059 ns 64.95 +/- 0.15 ns Rust/Decode/Table/Unset/256/WallTime slower 1.010-1.014 618.65 +/- 0.61 ns 626.18 +/- 0.49 ns Rust/Decode/Union/LastSet/1/WallTime faster 0.841-0.848 85.20 +/- 0.31 ns 71.968 +/- 0.053 ns Rust/Decode/Union/LastSet/16/WallTime faster 0.786-0.793 91.87 +/- 0.27 ns 72.51 +/- 0.11 ns Rust/Decode/Union/LastSet/256/WallTime faster 0.897-0.903 90.27 +/- 0.22 ns 81.244 +/- 0.096 ns Change-Id: I231a53e208ec4022b4cae98a2eea8a0e5e11e0e5 Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/405279 Reviewed-by: Mitchell Kember <mkember@google.com> Testability-Review: Mitchell Kember <mkember@google.com> Commit-Queue: Benjamin Prosnitz <bprosnitz@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.