Speed up ScopedPrimitiveArrayRO
For small arrays <= 1024 elements, we use GetArrayRegion with stack allocated backing storage instead of GetArrayElements. The speedup comes from the fact that GetArrayRegion doesn't need to allocate a copy of array. Timing results for: https://android-review.googlesource.com/#/c/169727/ BEFORE Host: Byte length=1 ns/op=452.2633712 Short length=1 ns/op=468.6469192 Int length=1 ns/op=422.5663486 Long length=1 ns/op=423.4946638 Byte length=8 ns/op=424.8546962 Short length=8 ns/op=424.3842626 Int length=8 ns/op=424.3816324 Long length=8 ns/op=452.9407552 Byte length=64 ns/op=441.674149 Short length=64 ns/op=472.2310028 Int length=64 ns/op=455.6142958 Long length=64 ns/op=487.6810328 Byte length=512 ns/op=454.0858634 Short length=512 ns/op=497.675829 Int length=512 ns/op=481.2103832 Long length=512 ns/op=507.4674306 Byte length=4096 ns/op=531.7923602 Short length=4096 ns/op=648.254466 Int length=4096 ns/op=578.0794842 Long length=4096 ns/op=563.3641424 N5: Byte length=1 ns/op=3118.2292802 Short length=1 ns/op=3083.7797488 Int length=1 ns/op=3177.8996446 Long length=1 ns/op=3151.0892072 Byte length=8 ns/op=3287.7326966 Short length=8 ns/op=3126.5799676 Int length=8 ns/op=3197.3203112 Long length=8 ns/op=3201.0613218 Byte length=64 ns/op=3178.7730612 Short length=64 ns/op=3162.2255092 Int length=64 ns/op=3241.3191864 Long length=64 ns/op=3117.6674886 Byte length=512 ns/op=3106.540978 Short length=512 ns/op=3183.0501344 Int length=512 ns/op=3513.8142382 Long length=512 ns/op=3592.4372798 Byte length=4096 ns/op=3552.9428216 Short length=4096 ns/op=3997.586686 Int length=4096 ns/op=4545.2151442 Long length=4096 ns/op=4371.4996338 AFTER Host: Byte length=1 ns/op=261.764995 Short length=1 ns/op=238.6584262 Int length=1 ns/op=262.856902 Long length=1 ns/op=238.0286378 Byte length=8 ns/op=242.4962264 Short length=8 ns/op=247.8668746 Int length=8 ns/op=263.9420024 Long length=8 ns/op=243.3675294 Byte length=64 ns/op=243.3372902 Short length=64 ns/op=249.0408034 Int length=64 ns/op=250.2168296 Long length=64 ns/op=253.837053 Byte length=512 ns/op=252.8071526 Short length=512 ns/op=271.689653 Int length=512 ns/op=291.8933238 Long length=512 ns/op=341.6303746 Byte length=4096 ns/op=540.8749038 Short length=4096 ns/op=661.7068158 Int length=4096 ns/op=569.030217 Long length=4096 ns/op=565.0571702 N5: Byte length=1 ns/op=1209.4042078 Short length=1 ns/op=1207.2498746 Int length=1 ns/op=1377.0557706 Long length=1 ns/op=1348.6359368 Byte length=8 ns/op=1260.0724162 Short length=8 ns/op=1229.6107912 Int length=8 ns/op=1414.1408952 Long length=8 ns/op=1394.1158746 Byte length=64 ns/op=1232.532947 Short length=64 ns/op=1228.1248122 Int length=64 ns/op=1468.2667912 Long length=64 ns/op=1404.232687 Byte length=512 ns/op=1256.976093 Short length=512 ns/op=1335.5540308 Int length=512 ns/op=1599.6927076 Long length=512 ns/op=1769.8866764 Byte length=4096 ns/op=3310.2486656 Short length=4096 ns/op=3956.6322484 Int length=4096 ns/op=4374.6221234 Long length=4096 ns/op=4256.71598 Bug: 19664826 Change-Id: I703d7346de732199be1feadbead021c6647a554a
Loading
Please sign in to comment