commit | 82a08f456b3c3ce64995986b376708b91106f96f | [log] [tgz] |
---|---|---|
author | Benjamin Prosnitz <bprosnitz@google.com> | Wed Jul 08 16:13:32 2020 +0000 |
committer | CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org> | Wed Jul 08 16:13:32 2020 +0000 |
tree | b6a5c8e3b5061ab206b26bfd3d519a6c1a8f74ea | |
parent | c754d2fe733b0d260ddc284b405ef2c8810af8c9 [diff] |
[fidl][rust] Add padding masks to fidl_struct! macro This adds padding masks to the fidl_struct! macro, to apply padding more directly at specific offsets where it is needed. The masks can be of different integer sizes (u64, u32, u16) and are generated in fidlgen. This CL only changes behavior in rust for encoding. A later CL will also change decoding (this is harder to do for decoding now because of the way offsets are managed by the decoder object). This also saves 94208 bytes in binary size. Rust/Encode/BoolArray/256/WallTime slower 1.094-1.097 1961.4 +/- 1.4 ns 2149.0 +/- 1.2 ns Rust/Encode/ByteArray/16/WallTime faster 0.933-0.938 67.865 +/- 0.088 ns 63.488 +/- 0.060 ns Rust/Encode/ByteArray/256/WallTime no_sig_diff 0.775-1.184 75.9 +/- 5.5 ns 73 +/- 10 ns Rust/Encode/ByteVector/16/WallTime faster 0.959-0.968 112.05 +/- 0.24 ns 107.98 +/- 0.30 ns Rust/Encode/ByteVector/256/WallTime no_sig_diff 0.949-1.037 152.9 +/- 3.9 ns 151.7 +/- 2.9 ns Rust/Encode/ByteVector/4096/WallTime no_sig_diff 0.953-1.069 411.8 +/- 9.4 ns 416 +/- 14 ns Rust/Encode/ByteVector/65536/WallTime no_sig_diff 0.951-1.119 4389 +/- 208 ns 4526 +/- 153 ns Rust/Encode/ByteVectorLimit/1/WallTime faster 0.954-0.965 111.42 +/- 0.23 ns 106.89 +/- 0.40 ns Rust/Encode/DatagramSocket/RecvMsg/Request/WallTime faster 0.850-0.863 93.11 +/- 0.56 ns 79.76 +/- 0.14 ns Rust/Encode/DatagramSocket/RecvMsg/Result/WallTime no_sig_diff 0.957-1.011 512.7 +/- 5.9 ns 504.4 +/- 8.0 ns Rust/Encode/DatagramSocket/SendMsg2/Request/WallTime no_sig_diff 0.961-1.030 434.9 +/- 6.4 ns 432.8 +/- 8.7 ns Rust/Encode/DatagramSocket/SendMsg2/Result/WallTime faster 0.971-0.974 120.237 +/- 0.068 ns 116.92 +/- 0.10 ns Rust/Encode/EmptyStruct/WallTime slower 1.003-1.016 50.03 +/- 0.18 ns 50.50 +/- 0.14 ns Rust/Encode/EnumArray/256/WallTime no_sig_diff 0.973-1.005 2876 +/- 18 ns 2843 +/- 28 ns Rust/Encode/ErrorSyntaxResult_Failure/WallTime slower 1.002-1.007 114.45 +/- 0.13 ns 114.98 +/- 0.15 ns Rust/Encode/ErrorSyntaxResult_Success/WallTime faster 0.863-0.866 200.74 +/- 0.22 ns 173.499 +/- 0.096 ns Rust/Encode/FloatArray/256/WallTime no_sig_diff 0.919-1.029 2297 +/- 67 ns 2234 +/- 62 ns Rust/Encode/GPUMagma/ExecuteImmediateCommandsRequest/CommandByte1024/Semaphore32/WallTime no_sig_diff 0.956-1.039 349.0 +/- 6.2 ns 347.9 +/- 8.3 ns Rust/Encode/GPUMagma/ExecuteImmediateCommandsRequest/CommandByte128/Semaphore8/WallTime no_sig_diff 0.970-1.002 240.9 +/- 1.7 ns 237.5 +/- 2.2 ns Rust/Encode/HardwareDisplay/OnVsyncEvent/Image64/WallTime no_sig_diff 0.969-1.015 171.9 +/- 1.8 ns 170.5 +/- 2.2 ns Rust/Encode/Int32Array/256/WallTime no_sig_diff 0.917-1.047 138.0 +/- 4.6 ns 135.2 +/- 4.4 ns Rust/Encode/Int32Vector/256/WallTime no_sig_diff 0.952-1.049 214.4 +/- 4.5 ns 214.3 +/- 5.9 ns Rust/Encode/Media/StreamPacket/WallTime faster 0.791-0.795 134.20 +/- 0.31 ns 106.419 +/- 0.035 ns Rust/Encode/MessageHeader/WallTime faster 0.899-0.909 97.58 +/- 0.40 ns 88.23 +/- 0.12 ns Rust/Encode/OptionalStructTree/Depth8/WallTime slower 1.020-1.041 15246 +/- 84 ns 15713 +/- 70 ns Rust/Encode/PaddedStructTree/Depth8/WallTime faster 0.653-0.669 4956.4 +/- 2.6 ns 3277 +/- 40 ns Rust/Encode/String/16/WallTime faster 0.957-0.967 105.93 +/- 0.24 ns 101.87 +/- 0.30 ns Rust/Encode/String/256/WallTime no_sig_diff 0.933-1.002 147.0 +/- 2.3 ns 142.1 +/- 2.8 ns Rust/Encode/String/4096/WallTime no_sig_diff 0.946-1.056 410.3 +/- 9.1 ns 410 +/- 13 ns Rust/Encode/StructArray/256/WallTime faster 0.641-0.685 8872 +/- 157 ns 5879 +/- 94 ns Rust/Encode/StructField/16/WallTime faster 0.793-0.802 196.41 +/- 0.21 ns 156.68 +/- 0.67 ns Rust/Encode/StructField/256/WallTime faster 0.675-0.681 2771.9 +/- 8.5 ns 1879.8 +/- 2.9 ns Rust/Encode/StructTree/Depth8/WallTime faster 0.882-0.883 3392.98 +/- 0.91 ns 2994.1 +/- 2.0 ns Rust/Encode/StructVector/256/WallTime faster 0.651-0.657 8878 +/- 22 ns 5806 +/- 14 ns Rust/Encode/Table/AllSet/1/WallTime slower 1.012-1.014 142.246 +/- 0.057 ns 144.102 +/- 0.047 ns Rust/Encode/Table/AllSet/16/WallTime slower 1.003-1.007 976.51 +/- 0.70 ns 981.4 +/- 1.1 ns Rust/Encode/Table/AllSet/256/WallTime slower 1.003-1.012 13617 +/- 31 ns 13722 +/- 31 ns Rust/Encode/Table/LastSetOthersReserved/16/WallTime slower 1.010-1.014 160.38 +/- 0.20 ns 162.313 +/- 0.067 ns Rust/Encode/Table/LastSetOthersReserved/256/WallTime no_sig_diff 0.999-1.008 205.52 +/- 0.20 ns 206.24 +/- 0.65 ns Rust/Encode/Table/SingleSet/16_of_16/WallTime slower 1.037-1.044 666.2 +/- 1.4 ns 693.0 +/- 1.0 ns Rust/Encode/Table/SingleSet/16_of_256/WallTime slower 1.009-1.013 1357.6 +/- 1.5 ns 1372.9 +/- 1.2 ns Rust/Encode/Table/SingleSet/1_of_1/WallTime slower 1.006-1.010 144.89 +/- 0.10 ns 146.06 +/- 0.14 ns Rust/Encode/Table/SingleSet/1_of_16/WallTime no_sig_diff 0.998-1.000 185.76 +/- 0.15 ns 185.57 +/- 0.11 ns Rust/Encode/Table/SingleSet/1_of_256/WallTime slower 1.005-1.010 862.94 +/- 0.88 ns 869.6 +/- 1.1 ns Rust/Encode/Table/SingleSet/256_of_256/WallTime slower 1.029-1.059 8694 +/- 51 ns 9076 +/- 75 ns Rust/Encode/Table/Unset/1/WallTime faster 0.984-0.994 66.85 +/- 0.11 ns 66.11 +/- 0.21 ns Rust/Encode/Table/Unset/16/WallTime faster 0.984-0.991 105.24 +/- 0.35 ns 103.959 +/- 0.026 ns Rust/Encode/Table/Unset/256/WallTime no_sig_diff 0.997-1.002 782.17 +/- 0.89 ns 781.69 +/- 0.94 ns Rust/Encode/Union/LastSet/1/WallTime slower 1.003-1.006 114.659 +/- 0.093 ns 115.171 +/- 0.032 ns Rust/Encode/Union/LastSet/16/WallTime faster 0.990-0.992 113.856 +/- 0.090 ns 112.850 +/- 0.053 ns Rust/Encode/Union/LastSet/256/WallTime faster 0.979-0.982 114.43 +/- 0.12 ns 112.183 +/- 0.060 ns Test: goldens (added padding.test.fidl), rust conformance tests Change-Id: Ief67c51da50f3cc2ce1f3ececb27f078a692855c Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/404653 Commit-Queue: Benjamin Prosnitz <bprosnitz@google.com> Reviewed-by: Pascal Perez <pascallouis@google.com> Reviewed-by: Mitchell Kember <mkember@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.