Improve replaceAll.
The default implementation of Map.replaceAll() iterates through the
entrySet. Switch to a simple for loop iterating through the array
since the iterator is an inefficient way to access the array contents.
Benchmark results:
Before:
android.util.ArrayMapPerfTest#testReplaceAll_Large:
replaceAll_Large_min (ns): 888977
replaceAll_Large_median (ns): 904642
replaceAll_Large_mean (ns): 914596
replaceAll_Large_standardDeviation: 23960
android.util.ArrayMapPerfTest#testReplaceAll_Small:
replaceAll_Small_min (ns): 177767
replaceAll_Small_median (ns): 179955
replaceAll_Small_mean (ns): 180331
replaceAll_Small_standardDeviation: 2865
After:
android.util.ArrayMapPerfTest#testReplaceAll_Large:
replaceAll_Large_min (ns): 557385
replaceAll_Large_median (ns): 586495
replaceAll_Large_mean (ns): 583712
replaceAll_Large_standardDeviation: 20356
android.util.ArrayMapPerfTest#testReplaceAll_Small:
replaceAll_Small_min (ns): 108051
replaceAll_Small_median (ns): 110802
replaceAll_Small_mean (ns): 109987
replaceAll_Small_standardDeviation: 1334
Bug: 194098491
Test: atest CorePerfTests:ArrayMapPerfTest (see results above)
Test: atest CtsUtilTestCases:ArrayMapTest
Test: atest FrameworksCoreTests:ArrayMapTest
Change-Id: If87ae5f3aa4b184b95c16aed5f2fb6f31d11668a
2 files changed