diff options
author | John Reck <jreck@google.com> | 2016-09-28 13:28:09 -0700 |
---|---|---|
committer | John Reck <jreck@google.com> | 2016-09-30 11:19:10 -0700 |
commit | 71207b5a11c1aaede2ccc2380a9c55b6ff0162d3 (patch) | |
tree | d207c58b503fff2760750de35edb1656bd9968b5 /core/tests/benchmarks | |
parent | 463d85cd929e5306ca5c6b44d3d0dc8b3b20068e (diff) |
Switch Parcel to FastNative
Also fixes ParcelBenchmark to have bounded
memory usage to avoid OOM'ing during runs
Test: refactor, no behavior change
ParcelBenchmark results from bullhead
Before:
timeReadByte 74.43ns
timeReadInt 74.49ns
timeReadLong 74.13ns
timeWriteByte 81.81ns
timeWriteInt 82.09ns
timeWriteLong 81.84ns
After:
timeReadByte 47.08ns
timeReadInt 48.38ns
timeReadLong 48.16ns
timeWriteByte 55.90ns
timeWriteInt 55.85ns
timeWriteLong 56.58ns
Change-Id: I61b823d1d2beb86e00c196abd4dce65efa8fa7f0
Diffstat (limited to 'core/tests/benchmarks')
-rw-r--r-- | core/tests/benchmarks/src/android/os/ParcelBenchmark.java | 48 |
1 files changed, 33 insertions, 15 deletions
diff --git a/core/tests/benchmarks/src/android/os/ParcelBenchmark.java b/core/tests/benchmarks/src/android/os/ParcelBenchmark.java index 4bd2d009dcf3..6c45ae858aca 100644 --- a/core/tests/benchmarks/src/android/os/ParcelBenchmark.java +++ b/core/tests/benchmarks/src/android/os/ParcelBenchmark.java @@ -20,12 +20,15 @@ import com.google.caliper.AfterExperiment; import com.google.caliper.BeforeExperiment; public class ParcelBenchmark { + private static final int INNER_REPS = 1000; private Parcel mParcel; @BeforeExperiment protected void setUp() { mParcel = Parcel.obtain(); + mParcel.setDataPosition(0); + mParcel.setDataCapacity(INNER_REPS * 8); } @AfterExperiment @@ -36,43 +39,58 @@ public class ParcelBenchmark { public void timeWriteByte(int reps) { final byte val = 0xF; - for (int i = 0; i < reps; i++) { - mParcel.writeByte(val); + for (int i = 0; i < (reps / INNER_REPS); i++) { + mParcel.setDataPosition(0); + for (int j = 0; j < INNER_REPS; j++) { + mParcel.writeByte(val); + } } } public void timeReadByte(int reps) { - mParcel.setDataCapacity(reps); - for (int i = 0; i < reps; i++) { - mParcel.readByte(); + for (int i = 0; i < (reps / INNER_REPS); i++) { + mParcel.setDataPosition(0); + for (int j = 0; j < INNER_REPS; j++) { + mParcel.readByte(); + } } } public void timeWriteInt(int reps) { final int val = 0xF; - for (int i = 0; i < reps; i++) { - mParcel.writeInt(val); + for (int i = 0; i < (reps / INNER_REPS); i++) { + mParcel.setDataPosition(0); + for (int j = 0; j < INNER_REPS; j++) { + mParcel.writeInt(val); + } } } public void timeReadInt(int reps) { - mParcel.setDataCapacity(reps << 2); - for (int i = 0; i < reps; i++) { - mParcel.readInt(); + for (int i = 0; i < (reps / INNER_REPS); i++) { + mParcel.setDataPosition(0); + for (int j = 0; j < INNER_REPS; j++) { + mParcel.readInt(); + } } } public void timeWriteLong(int reps) { final long val = 0xF; - for (int i = 0; i < reps; i++) { - mParcel.writeLong(val); + for (int i = 0; i < (reps / INNER_REPS); i++) { + mParcel.setDataPosition(0); + for (int j = 0; j < INNER_REPS; j++) { + mParcel.writeLong(val); + } } } public void timeReadLong(int reps) { - mParcel.setDataCapacity(reps << 3); - for (int i = 0; i < reps; i++) { - mParcel.readLong(); + for (int i = 0; i < (reps / INNER_REPS); i++) { + mParcel.setDataPosition(0); + for (int j = 0; j < INNER_REPS; j++) { + mParcel.readLong(); + } } } } |