Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 49198cf7 authored by Andy Hung's avatar Andy Hung
Browse files

Parcel: add generic readData and writeData methods.

The parameter type drives Parcel serialization for readData and
writeData; this simplifies calling and allows generic code to be
written for Parcels.

Documented parcel data storage.
Removed duplicated code.
Updated existing interface to call into readData or writeData as needed.

Bulk data transfer speed has been improved: For the existing interface,
benchmarking shows modest 10% improvement in performance for ByteVectors
to a 10x speedup for Int32Vectors by direct reading of properly packed
data into the array.

At this time, the generic readData and writeData methods are private,
used to implement externally facing APIs.

Test: atest aidl_unittests
Test: atest aidl_integration_test
Test: atest binderDriverInterfaceTest
Test: atest binderLibTest
Test: atest binderParcelBenchmark
Test: atest binderParcelTest
Test: atest binderStabilityTest
Bug: 179072375
Change-Id: Ia2e74d4bb0c0622efdd4ec4cf93441199e96101e
parent b14054af
Loading
Loading
Loading
Loading
+104 −606

File changed.

Preview size limit exceeded, changes collapsed.

+586 −554

File changed.

Preview size limit exceeded, changes collapsed.

+50 −50
Original line number Diff line number Diff line
@@ -91,56 +91,56 @@ static void BM_ParcelVector(benchmark::State& state) {

  Results on Crosshatch Pixel 3XL

  #BM_BoolVector/1         40 ns      40 ns     17261011
  #BM_BoolVector/2         46 ns      46 ns     15029619
  #BM_BoolVector/4         65 ns      64 ns     10888021
  #BM_BoolVector/8        114 ns     114 ns      6130937
  #BM_BoolVector/16       179 ns     179 ns      3902462
  #BM_BoolVector/32       328 ns     327 ns      2138812
  #BM_BoolVector/64       600 ns     598 ns      1169414
  #BM_BoolVector/128     1168 ns    1165 ns       601281
  #BM_BoolVector/256     2288 ns    2281 ns       305737
  #BM_BoolVector/512     4535 ns    4521 ns       154668
  #BM_ByteVector/1         53 ns      52 ns     13212196
  #BM_ByteVector/2         53 ns      53 ns     13194050
  #BM_ByteVector/4         50 ns      50 ns     13768037
  #BM_ByteVector/8         50 ns      50 ns     13890210
  #BM_ByteVector/16        50 ns      50 ns     13897305
  #BM_ByteVector/32        51 ns      51 ns     13679862
  #BM_ByteVector/64        54 ns      53 ns     12988544
  #BM_ByteVector/128       64 ns      64 ns     10921227
  #BM_ByteVector/256       82 ns      81 ns      8542549
  #BM_ByteVector/512      118 ns     118 ns      5862931
  #BM_CharVector/1         32 ns      32 ns     21783579
  #BM_CharVector/2         38 ns      38 ns     18200971
  #BM_CharVector/4         53 ns      53 ns     13111785
  #BM_CharVector/8         80 ns      80 ns      8698331
  #BM_CharVector/16       159 ns     159 ns      4390738
  #BM_CharVector/32       263 ns     262 ns      2667310
  #BM_CharVector/64       486 ns     485 ns      1441118
  #BM_CharVector/128      937 ns     934 ns       749006
  #BM_CharVector/256     1848 ns    1843 ns       379537
  #BM_CharVector/512     3650 ns    3639 ns       191713
  #BM_Int32Vector/1        31 ns      31 ns     22104147
  #BM_Int32Vector/2        38 ns      38 ns     18075471
  #BM_Int32Vector/4        53 ns      52 ns     13249969
  #BM_Int32Vector/8        80 ns      80 ns      8719798
  #BM_Int32Vector/16      161 ns     160 ns      4350096
  #BM_Int32Vector/32      271 ns     270 ns      2591896
  #BM_Int32Vector/64      499 ns     498 ns      1406201
  #BM_Int32Vector/128     948 ns     945 ns       740052
  #BM_Int32Vector/256    1855 ns    1849 ns       379127
  #BM_Int32Vector/512    3665 ns    3653 ns       191533
  #BM_Int64Vector/1        31 ns      31 ns     22388370
  #BM_Int64Vector/2        38 ns      38 ns     18300347
  #BM_Int64Vector/4        53 ns      53 ns     13137818
  #BM_Int64Vector/8        81 ns      81 ns      8599613
  #BM_Int64Vector/16      167 ns     166 ns      4195953
  #BM_Int64Vector/32      280 ns     280 ns      2499271
  #BM_Int64Vector/64      523 ns     522 ns      1341380
  #BM_Int64Vector/128     991 ns     988 ns       707437
  #BM_Int64Vector/256    1940 ns    1934 ns       361704
  #BM_Int64Vector/512    3843 ns    3831 ns       183204
  #BM_BoolVector/1         44 ns      44 ns     15630626
  #BM_BoolVector/2         54 ns      54 ns     12900340
  #BM_BoolVector/4         73 ns      72 ns      9749841
  #BM_BoolVector/8        107 ns     107 ns      6503326
  #BM_BoolVector/16       186 ns     185 ns      3773627
  #BM_BoolVector/32       337 ns     336 ns      2083877
  #BM_BoolVector/64       607 ns     605 ns      1154113
  #BM_BoolVector/128     1155 ns    1151 ns       608128
  #BM_BoolVector/256     2259 ns    2253 ns       310973
  #BM_BoolVector/512     4469 ns    4455 ns       157277
  #BM_ByteVector/1         41 ns      41 ns     16837425
  #BM_ByteVector/2         41 ns      41 ns     16820726
  #BM_ByteVector/4         38 ns      38 ns     18217813
  #BM_ByteVector/8         38 ns      38 ns     18290298
  #BM_ByteVector/16        38 ns      38 ns     18117817
  #BM_ByteVector/32        38 ns      38 ns     18172385
  #BM_ByteVector/64        41 ns      41 ns     16950055
  #BM_ByteVector/128       53 ns      53 ns     13170749
  #BM_ByteVector/256       69 ns      69 ns     10113626
  #BM_ByteVector/512      106 ns     106 ns      6561936
  #BM_CharVector/1         38 ns      38 ns     18074831
  #BM_CharVector/2         40 ns      40 ns     17206266
  #BM_CharVector/4         50 ns      50 ns     13785944
  #BM_CharVector/8         67 ns      67 ns     10223316
  #BM_CharVector/16        96 ns      96 ns      7297285
  #BM_CharVector/32       156 ns     155 ns      4484845
  #BM_CharVector/64       277 ns     276 ns      2536003
  #BM_CharVector/128      520 ns     518 ns      1347070
  #BM_CharVector/256     1006 ns    1003 ns       695952
  #BM_CharVector/512     1976 ns    1970 ns       354673
  #BM_Int32Vector/1        41 ns      41 ns     16951262
  #BM_Int32Vector/2        41 ns      41 ns     16916883
  #BM_Int32Vector/4        41 ns      41 ns     16761373
  #BM_Int32Vector/8        42 ns      42 ns     16553179
  #BM_Int32Vector/16       43 ns      43 ns     16200362
  #BM_Int32Vector/32       55 ns      54 ns     12724454
  #BM_Int32Vector/64       70 ns      69 ns     10049223
  #BM_Int32Vector/128     107 ns     107 ns      6525796
  #BM_Int32Vector/256     179 ns     178 ns      3922563
  #BM_Int32Vector/512     324 ns     323 ns      2160653
  #BM_Int64Vector/1        41 ns      41 ns     16909470
  #BM_Int64Vector/2        41 ns      41 ns     16740788
  #BM_Int64Vector/4        42 ns      42 ns     16564197
  #BM_Int64Vector/8        43 ns      42 ns     16284082
  #BM_Int64Vector/16       54 ns      54 ns     12839474
  #BM_Int64Vector/32       69 ns      69 ns     10011010
  #BM_Int64Vector/64      107 ns     106 ns      6557956
  #BM_Int64Vector/128     177 ns     177 ns      3925618
  #BM_Int64Vector/256     324 ns     323 ns      2163321
  #BM_Int64Vector/512     613 ns     611 ns      1140418
*/

static void BM_BoolVector(benchmark::State& state) {