PerformanceCollectorTest.java revision 075997f12e2fb2b646172a92926be0f26f739099
1ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang/* 2ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang * Copyright (C) 2009 The Android Open Source Project 3ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang * 4ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang * Licensed under the Apache License, Version 2.0 (the "License"); 5ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang * you may not use this file except in compliance with the License. 6ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang * You may obtain a copy of the License at 7ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang * 8ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang * http://www.apache.org/licenses/LICENSE-2.0 9ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang * 10ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang * Unless required by applicable law or agreed to in writing, software 11ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang * distributed under the License is distributed on an "AS IS" BASIS, 12ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang * See the License for the specific language governing permissions and 14ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang * limitations under the License. 15ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang */ 16ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 17ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wangpackage com.android.unit_tests.os; 18ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 19ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wangimport android.os.Bundle; 20ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wangimport android.os.Parcelable; 21ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wangimport android.os.PerformanceCollector; 22075997f12e2fb2b646172a92926be0f26f739099Jack Wangimport android.os.Process; 23ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wangimport android.os.PerformanceCollector.PerformanceResultsWriter; 24075997f12e2fb2b646172a92926be0f26f739099Jack Wangimport android.test.suitebuilder.annotation.SmallTest; 25ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 26ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wangimport java.lang.reflect.Field; 27ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wangimport java.util.ArrayList; 28ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wangimport java.util.Random; 29ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 30ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wangimport junit.framework.TestCase; 31ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 32ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wangpublic class PerformanceCollectorTest extends TestCase { 33ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 34ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang private PerformanceCollector mPerfCollector; 35ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 36ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang @Override 37ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang protected void setUp() throws Exception { 38ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang super.setUp(); 39ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector = new PerformanceCollector(); 40ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 41ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 42ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang @Override 43ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang protected void tearDown() throws Exception { 44ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang super.tearDown(); 45ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector = null; 46ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 47ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 48075997f12e2fb2b646172a92926be0f26f739099Jack Wang @SmallTest 49ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void testBeginSnapshotNoWriter() throws Exception { 50ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.beginSnapshot("testBeginSnapshotNoWriter"); 51ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 52ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue((Long)readPrivateField("mSnapshotCpuTime", mPerfCollector) > 0); 53ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue((Long)readPrivateField("mSnapshotExecTime", mPerfCollector) > 0); 54ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle snapshot = (Bundle)readPrivateField("mPerfSnapshot", mPerfCollector); 55ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertNotNull(snapshot); 56ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertEquals(2, snapshot.size()); 57ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 58ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 59075997f12e2fb2b646172a92926be0f26f739099Jack Wang @SmallTest 60ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void testEndSnapshotNoWriter() throws Exception { 61ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.beginSnapshot("testEndSnapshotNoWriter"); 62075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomLongPeriod(); 63ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle snapshot = mPerfCollector.endSnapshot(); 64ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 65ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifySnapshotBundle(snapshot); 66ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 67ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 68075997f12e2fb2b646172a92926be0f26f739099Jack Wang @SmallTest 69ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void testStartTimingNoWriter() throws Exception { 70ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.startTiming("testStartTimingNoWriter"); 71ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 72ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue((Long)readPrivateField("mCpuTime", mPerfCollector) > 0); 73ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue((Long)readPrivateField("mExecTime", mPerfCollector) > 0); 74ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle measurement = (Bundle)readPrivateField("mPerfMeasurement", mPerfCollector); 75ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertNotNull(measurement); 76ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifyTimingBundle(measurement, new ArrayList<String>()); 77ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 78ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 79075997f12e2fb2b646172a92926be0f26f739099Jack Wang @SmallTest 80ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void testAddIterationNoWriter() throws Exception { 81ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.startTiming("testAddIterationNoWriter"); 82075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 83ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle iteration = mPerfCollector.addIteration("timing1"); 84ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 85ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifyIterationBundle(iteration, "timing1"); 86ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 87ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 88075997f12e2fb2b646172a92926be0f26f739099Jack Wang @SmallTest 89ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void testStopTimingNoWriter() throws Exception { 90ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.startTiming("testStopTimingNoWriter"); 91075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 92ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("timing2"); 93075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 94ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("timing3"); 95075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomShortPeriod(); 96ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle timing = mPerfCollector.stopTiming("timing4"); 97ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 98ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang ArrayList<String> labels = new ArrayList<String>(); 99ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels.add("timing2"); 100ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels.add("timing3"); 101ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels.add("timing4"); 102ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifyTimingBundle(timing, labels); 103ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 104ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 105075997f12e2fb2b646172a92926be0f26f739099Jack Wang @SmallTest 106ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void testBeginSnapshot() throws Exception { 107ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang MockPerformanceResultsWriter writer = new MockPerformanceResultsWriter(); 108ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.setPerformanceResultsWriter(writer); 109ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.beginSnapshot("testBeginSnapshot"); 110ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 111ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertEquals("testBeginSnapshot", writer.snapshotLabel); 112ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue((Long)readPrivateField("mSnapshotCpuTime", mPerfCollector) > 0); 113ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue((Long)readPrivateField("mSnapshotExecTime", mPerfCollector) > 0); 114ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle snapshot = (Bundle)readPrivateField("mPerfSnapshot", mPerfCollector); 115ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertNotNull(snapshot); 116ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertEquals(2, snapshot.size()); 117ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 118ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 119075997f12e2fb2b646172a92926be0f26f739099Jack Wang @SmallTest 120ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void testEndSnapshot() throws Exception { 121ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang MockPerformanceResultsWriter writer = new MockPerformanceResultsWriter(); 122ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.setPerformanceResultsWriter(writer); 123ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.beginSnapshot("testEndSnapshot"); 124075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomLongPeriod(); 125ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle snapshot1 = mPerfCollector.endSnapshot(); 126ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle snapshot2 = writer.snapshotResults; 127ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 128075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEqualsBundle(snapshot1, snapshot2); 129ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifySnapshotBundle(snapshot1); 130ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 131ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 132075997f12e2fb2b646172a92926be0f26f739099Jack Wang @SmallTest 133ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void testStartTiming() throws Exception { 134ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang MockPerformanceResultsWriter writer = new MockPerformanceResultsWriter(); 135ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.setPerformanceResultsWriter(writer); 136ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.startTiming("testStartTiming"); 137ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 138ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertEquals("testStartTiming", writer.timingLabel); 139ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue((Long)readPrivateField("mCpuTime", mPerfCollector) > 0); 140ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue((Long)readPrivateField("mExecTime", mPerfCollector) > 0); 141ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle measurement = (Bundle)readPrivateField("mPerfMeasurement", mPerfCollector); 142ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertNotNull(measurement); 143ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifyTimingBundle(measurement, new ArrayList<String>()); 144ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 145ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 146075997f12e2fb2b646172a92926be0f26f739099Jack Wang @SmallTest 147ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void testAddIteration() throws Exception { 148ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.startTiming("testAddIteration"); 149075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 150ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle iteration = mPerfCollector.addIteration("timing5"); 151ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 152ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifyIterationBundle(iteration, "timing5"); 153ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 154ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 155075997f12e2fb2b646172a92926be0f26f739099Jack Wang @SmallTest 156ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void testStopTiming() throws Exception { 157ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.startTiming("testStopTiming"); 158075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 159ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("timing6"); 160075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 161ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("timing7"); 162075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomShortPeriod(); 163ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle timing = mPerfCollector.stopTiming("timing8"); 164ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 165ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang ArrayList<String> labels = new ArrayList<String>(); 166ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels.add("timing6"); 167ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels.add("timing7"); 168ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels.add("timing8"); 169ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifyTimingBundle(timing, labels); 170ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 171ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 172075997f12e2fb2b646172a92926be0f26f739099Jack Wang @SmallTest 173075997f12e2fb2b646172a92926be0f26f739099Jack Wang public void testAddMeasurementLong() throws Exception { 174075997f12e2fb2b646172a92926be0f26f739099Jack Wang MockPerformanceResultsWriter writer = new MockPerformanceResultsWriter(); 175075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.setPerformanceResultsWriter(writer); 176075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.startTiming("testAddMeasurementLong"); 177075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.addMeasurement("testAddMeasurementLongZero", 0); 178075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.addMeasurement("testAddMeasurementLongPos", 348573); 179075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.addMeasurement("testAddMeasurementLongNeg", -19354); 180075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.stopTiming(""); 181075997f12e2fb2b646172a92926be0f26f739099Jack Wang 182075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEquals("testAddMeasurementLong", writer.timingLabel); 183075997f12e2fb2b646172a92926be0f26f739099Jack Wang Bundle results = writer.timingResults; 184075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEquals(4, results.size()); 185075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertTrue(results.containsKey("testAddMeasurementLongZero")); 186075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEquals(0, results.getLong("testAddMeasurementLongZero")); 187075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertTrue(results.containsKey("testAddMeasurementLongPos")); 188075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEquals(348573, results.getLong("testAddMeasurementLongPos")); 189075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertTrue(results.containsKey("testAddMeasurementLongNeg")); 190075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEquals(-19354, results.getLong("testAddMeasurementLongNeg")); 191075997f12e2fb2b646172a92926be0f26f739099Jack Wang } 192075997f12e2fb2b646172a92926be0f26f739099Jack Wang 193075997f12e2fb2b646172a92926be0f26f739099Jack Wang @SmallTest 194075997f12e2fb2b646172a92926be0f26f739099Jack Wang public void testAddMeasurementFloat() throws Exception { 195075997f12e2fb2b646172a92926be0f26f739099Jack Wang MockPerformanceResultsWriter writer = new MockPerformanceResultsWriter(); 196075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.setPerformanceResultsWriter(writer); 197075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.startTiming("testAddMeasurementFloat"); 198075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.addMeasurement("testAddMeasurementFloatZero", 0.0f); 199075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.addMeasurement("testAddMeasurementFloatPos", 348573.345f); 200075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.addMeasurement("testAddMeasurementFloatNeg", -19354.093f); 201075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.stopTiming(""); 202075997f12e2fb2b646172a92926be0f26f739099Jack Wang 203075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEquals("testAddMeasurementFloat", writer.timingLabel); 204075997f12e2fb2b646172a92926be0f26f739099Jack Wang Bundle results = writer.timingResults; 205075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEquals(4, results.size()); 206075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertTrue(results.containsKey("testAddMeasurementFloatZero")); 207075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEquals(0.0f, results.getFloat("testAddMeasurementFloatZero")); 208075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertTrue(results.containsKey("testAddMeasurementFloatPos")); 209075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEquals(348573.345f, results.getFloat("testAddMeasurementFloatPos")); 210075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertTrue(results.containsKey("testAddMeasurementFloatNeg")); 211075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEquals(-19354.093f, results.getFloat("testAddMeasurementFloatNeg")); 212075997f12e2fb2b646172a92926be0f26f739099Jack Wang } 213075997f12e2fb2b646172a92926be0f26f739099Jack Wang 214075997f12e2fb2b646172a92926be0f26f739099Jack Wang @SmallTest 215075997f12e2fb2b646172a92926be0f26f739099Jack Wang public void testAddMeasurementString() throws Exception { 216075997f12e2fb2b646172a92926be0f26f739099Jack Wang MockPerformanceResultsWriter writer = new MockPerformanceResultsWriter(); 217075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.setPerformanceResultsWriter(writer); 218075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.startTiming("testAddMeasurementString"); 219075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.addMeasurement("testAddMeasurementStringNull", null); 220075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.addMeasurement("testAddMeasurementStringEmpty", ""); 221075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.addMeasurement("testAddMeasurementStringNonEmpty", "Hello World"); 222075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.stopTiming(""); 223075997f12e2fb2b646172a92926be0f26f739099Jack Wang 224075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEquals("testAddMeasurementString", writer.timingLabel); 225075997f12e2fb2b646172a92926be0f26f739099Jack Wang Bundle results = writer.timingResults; 226075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEquals(4, results.size()); 227075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertTrue(results.containsKey("testAddMeasurementStringNull")); 228075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertNull(results.getString("testAddMeasurementStringNull")); 229075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertTrue(results.containsKey("testAddMeasurementStringEmpty")); 230075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEquals("", results.getString("testAddMeasurementStringEmpty")); 231075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertTrue(results.containsKey("testAddMeasurementStringNonEmpty")); 232075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEquals("Hello World", results.getString("testAddMeasurementStringNonEmpty")); 233075997f12e2fb2b646172a92926be0f26f739099Jack Wang } 234075997f12e2fb2b646172a92926be0f26f739099Jack Wang 235075997f12e2fb2b646172a92926be0f26f739099Jack Wang @SmallTest 236ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void testSimpleSequence() throws Exception { 237ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang MockPerformanceResultsWriter writer = new MockPerformanceResultsWriter(); 238ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.setPerformanceResultsWriter(writer); 239ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.beginSnapshot("testSimpleSequence"); 240ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.startTiming("testSimpleSequenceTiming"); 241075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 242ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("iteration1"); 243075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 244ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("iteration2"); 245075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 246ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("iteration3"); 247075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 248ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("iteration4"); 249075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomShortPeriod(); 250ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle timing = mPerfCollector.stopTiming("iteration5"); 251075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomLongPeriod(); 252ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle snapshot1 = mPerfCollector.endSnapshot(); 253ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle snapshot2 = writer.snapshotResults; 254ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 255075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEqualsBundle(snapshot1, snapshot2); 256ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifySnapshotBundle(snapshot1); 257ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 258ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang ArrayList<String> labels = new ArrayList<String>(); 259ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels.add("iteration1"); 260ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels.add("iteration2"); 261ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels.add("iteration3"); 262ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels.add("iteration4"); 263ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels.add("iteration5"); 264ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifyTimingBundle(timing, labels); 265ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 266ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 267075997f12e2fb2b646172a92926be0f26f739099Jack Wang @SmallTest 268ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void testLongSequence() throws Exception { 269ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang MockPerformanceResultsWriter writer = new MockPerformanceResultsWriter(); 270ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.setPerformanceResultsWriter(writer); 271ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.beginSnapshot("testLongSequence"); 272ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.startTiming("testLongSequenceTiming1"); 273075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 274ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("iteration1"); 275075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 276ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("iteration2"); 277075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomShortPeriod(); 278ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle timing1 = mPerfCollector.stopTiming("iteration3"); 279075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomLongPeriod(); 280ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 281ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.startTiming("testLongSequenceTiming2"); 282075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 283ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("iteration4"); 284075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 285ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("iteration5"); 286075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomShortPeriod(); 287ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle timing2 = mPerfCollector.stopTiming("iteration6"); 288075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomLongPeriod(); 289ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 290ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.startTiming("testLongSequenceTiming3"); 291075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 292ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("iteration7"); 293075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 294ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("iteration8"); 295075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomShortPeriod(); 296ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle timing3 = mPerfCollector.stopTiming("iteration9"); 297075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomLongPeriod(); 298ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 299ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.startTiming("testLongSequenceTiming4"); 300075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 301ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("iteration10"); 302075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 303ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("iteration11"); 304075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomShortPeriod(); 305ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle timing4 = mPerfCollector.stopTiming("iteration12"); 306075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomLongPeriod(); 307ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 308ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.startTiming("testLongSequenceTiming5"); 309075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 310ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("iteration13"); 311075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 312ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("iteration14"); 313075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomShortPeriod(); 314ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle timing5 = mPerfCollector.stopTiming("iteration15"); 315075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomLongPeriod(); 316ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle snapshot1 = mPerfCollector.endSnapshot(); 317ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle snapshot2 = writer.snapshotResults; 318ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 319075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEqualsBundle(snapshot1, snapshot2); 320ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifySnapshotBundle(snapshot1); 321ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 322ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang ArrayList<String> labels1 = new ArrayList<String>(); 323ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels1.add("iteration1"); 324ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels1.add("iteration2"); 325ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels1.add("iteration3"); 326ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifyTimingBundle(timing1, labels1); 327ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang ArrayList<String> labels2 = new ArrayList<String>(); 328ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels2.add("iteration4"); 329ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels2.add("iteration5"); 330ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels2.add("iteration6"); 331ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifyTimingBundle(timing2, labels2); 332ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang ArrayList<String> labels3 = new ArrayList<String>(); 333ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels3.add("iteration7"); 334ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels3.add("iteration8"); 335ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels3.add("iteration9"); 336ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifyTimingBundle(timing3, labels3); 337ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang ArrayList<String> labels4 = new ArrayList<String>(); 338ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels4.add("iteration10"); 339ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels4.add("iteration11"); 340ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels4.add("iteration12"); 341ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifyTimingBundle(timing4, labels4); 342ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang ArrayList<String> labels5 = new ArrayList<String>(); 343ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels5.add("iteration13"); 344ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels5.add("iteration14"); 345ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels5.add("iteration15"); 346ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifyTimingBundle(timing5, labels5); 347ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 348ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 349ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang /* 350ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang * Verify that snapshotting and timing do not interfere w/ each other, 351ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang * by staggering calls to snapshot and timing functions. 352ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang */ 353075997f12e2fb2b646172a92926be0f26f739099Jack Wang @SmallTest 354ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void testOutOfOrderSequence() { 355ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang MockPerformanceResultsWriter writer = new MockPerformanceResultsWriter(); 356ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.setPerformanceResultsWriter(writer); 357ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.startTiming("testOutOfOrderSequenceTiming"); 358075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomShortPeriod(); 359ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.beginSnapshot("testOutOfOrderSequenceSnapshot"); 360075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomShortPeriod(); 361ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle timing1 = mPerfCollector.stopTiming("timing1"); 362075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomShortPeriod(); 363ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle snapshot1 = mPerfCollector.endSnapshot(); 364ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 365ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle timing2 = writer.timingResults; 366ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle snapshot2 = writer.snapshotResults; 367ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 368075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEqualsBundle(snapshot1, snapshot2); 369ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifySnapshotBundle(snapshot1); 370ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 371075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEqualsBundle(timing1, timing2); 372ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang ArrayList<String> labels = new ArrayList<String>(); 373ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels.add("timing1"); 374ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifyTimingBundle(timing1, labels); 375ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 376ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 377075997f12e2fb2b646172a92926be0f26f739099Jack Wang private void workForRandomPeriod(int minDuration, int maxDuration) { 378ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Random random = new Random(); 379ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang int period = minDuration + random.nextInt(maxDuration - minDuration); 380075997f12e2fb2b646172a92926be0f26f739099Jack Wang long start = Process.getElapsedCpuTime(); 381075997f12e2fb2b646172a92926be0f26f739099Jack Wang // Generate positive amount of work, so cpu time is measurable in 382ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang // milliseconds 383075997f12e2fb2b646172a92926be0f26f739099Jack Wang while (Process.getElapsedCpuTime() - start < period) { 384075997f12e2fb2b646172a92926be0f26f739099Jack Wang for (int i = 0, temp = 0; i < 50; i++ ) { 385075997f12e2fb2b646172a92926be0f26f739099Jack Wang temp += i; 386ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 387ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 388ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 389ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 390075997f12e2fb2b646172a92926be0f26f739099Jack Wang private void workForRandomTinyPeriod() { 391075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomPeriod(2, 5); 392ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 393ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 394075997f12e2fb2b646172a92926be0f26f739099Jack Wang private void workForRandomShortPeriod() { 395075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomPeriod(10, 25); 396ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 397ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 398075997f12e2fb2b646172a92926be0f26f739099Jack Wang private void workForRandomLongPeriod() { 399075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomPeriod(50, 100); 400ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 401ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 402ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang private void verifySnapshotBundle(Bundle snapshot) { 403ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue("At least 26 metrics collected", 26 <= snapshot.size()); 404ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 405ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_CPU_TIME)); 406ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_CPU_TIME) > 0); 407ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_EXECUTION_TIME)); 408ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_EXECUTION_TIME) > 0); 409ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 410ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey( 411ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang PerformanceCollector.METRIC_KEY_PRE_RECEIVED_TRANSACTIONS)); 412ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_PRE_SENT_TRANSACTIONS)); 413ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_RECEIVED_TRANSACTIONS)); 414ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_SENT_TRANSACTIONS)); 415ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_GC_INVOCATION_COUNT)); 416ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 417ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_JAVA_ALLOCATED)); 418ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_JAVA_ALLOCATED) > 0); 419ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_JAVA_FREE)); 420ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_JAVA_FREE) > 0); 421ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_JAVA_PRIVATE_DIRTY)); 422ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_JAVA_PRIVATE_DIRTY) > 0); 423ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_JAVA_PSS)); 424ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_JAVA_PSS) > 0); 425ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_JAVA_SHARED_DIRTY)); 426ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_JAVA_SHARED_DIRTY) > 0); 427ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_JAVA_SIZE)); 428ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_JAVA_SIZE) > 0); 429ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_NATIVE_ALLOCATED)); 430ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_NATIVE_ALLOCATED) > 0); 431ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_NATIVE_FREE)); 432ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_NATIVE_FREE) > 0); 433ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_NATIVE_PRIVATE_DIRTY)); 434ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_NATIVE_PRIVATE_DIRTY) > 0); 435ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_NATIVE_PSS)); 436ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_NATIVE_PSS) > 0); 437ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_NATIVE_SHARED_DIRTY)); 438ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_NATIVE_SHARED_DIRTY) > 0); 439ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_NATIVE_SIZE)); 440ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_NATIVE_SIZE) > 0); 441ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_GLOBAL_ALLOC_COUNT)); 442ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_GLOBAL_ALLOC_COUNT) > 0); 443ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_GLOBAL_ALLOC_SIZE)); 444ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_GLOBAL_ALLOC_SIZE) > 0); 445ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_GLOBAL_FREED_COUNT)); 446ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_GLOBAL_FREED_COUNT) > 0); 447ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_GLOBAL_FREED_SIZE)); 448ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_GLOBAL_FREED_SIZE) > 0); 449ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_OTHER_PRIVATE_DIRTY)); 450ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_OTHER_PRIVATE_DIRTY) > 0); 451ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_OTHER_PSS)); 452ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_OTHER_PSS) > 0); 453ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_OTHER_SHARED_DIRTY)); 454ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_OTHER_SHARED_DIRTY) > 0); 455ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 456ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 457ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang private void verifyIterationBundle(Bundle iteration, String label) { 458ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertEquals(3, iteration.size()); 459ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(iteration.containsKey(PerformanceCollector.METRIC_KEY_LABEL)); 460ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertEquals(label, iteration.getString(PerformanceCollector.METRIC_KEY_LABEL)); 461ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(iteration.containsKey(PerformanceCollector.METRIC_KEY_CPU_TIME)); 462ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(iteration.getLong(PerformanceCollector.METRIC_KEY_CPU_TIME) > 0); 463ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(iteration.containsKey(PerformanceCollector.METRIC_KEY_EXECUTION_TIME)); 464ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(iteration.getLong(PerformanceCollector.METRIC_KEY_EXECUTION_TIME) > 0); 465ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 466ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 467ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang private void verifyTimingBundle(Bundle timing, ArrayList<String> labels) { 468ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertEquals(1, timing.size()); 469ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(timing.containsKey(PerformanceCollector.METRIC_KEY_ITERATIONS)); 470ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang ArrayList<Parcelable> iterations = timing.getParcelableArrayList( 471ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang PerformanceCollector.METRIC_KEY_ITERATIONS); 472ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertNotNull(iterations); 473ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertEquals(labels.size(), iterations.size()); 474ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang for (int i = 0; i < labels.size(); i ++) { 475ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle iteration = (Bundle)iterations.get(i); 476ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifyIterationBundle(iteration, labels.get(i)); 477ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 478ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 479ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 480075997f12e2fb2b646172a92926be0f26f739099Jack Wang private void assertEqualsBundle(Bundle b1, Bundle b2) { 481075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEquals(b1.keySet(), b2.keySet()); 482075997f12e2fb2b646172a92926be0f26f739099Jack Wang for (String key : b1.keySet()) { 483075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEquals(b1.get(key), b2.get(key)); 484075997f12e2fb2b646172a92926be0f26f739099Jack Wang } 485075997f12e2fb2b646172a92926be0f26f739099Jack Wang } 486075997f12e2fb2b646172a92926be0f26f739099Jack Wang 487ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang private Object readPrivateField(String fieldName, Object object) throws Exception { 488ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Field f = object.getClass().getDeclaredField(fieldName); 489ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang f.setAccessible(true); 490ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang return f.get(object); 491ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 492ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 493ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang private class MockPerformanceResultsWriter implements PerformanceResultsWriter { 494ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 495ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public String snapshotLabel; 496ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public Bundle snapshotResults = new Bundle(); 497ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public String timingLabel; 498ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public Bundle timingResults = new Bundle(); 499ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 500ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void writeBeginSnapshot(String label) { 501ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang snapshotLabel = label; 502ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 503ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 504ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void writeEndSnapshot(Bundle results) { 505075997f12e2fb2b646172a92926be0f26f739099Jack Wang snapshotResults.putAll(results); 506ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 507ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 508ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void writeStartTiming(String label) { 509ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang timingLabel = label; 510ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 511ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 512ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void writeStopTiming(Bundle results) { 513075997f12e2fb2b646172a92926be0f26f739099Jack Wang timingResults.putAll(results); 514075997f12e2fb2b646172a92926be0f26f739099Jack Wang } 515075997f12e2fb2b646172a92926be0f26f739099Jack Wang 516075997f12e2fb2b646172a92926be0f26f739099Jack Wang public void writeMeasurement(String label, long value) { 517075997f12e2fb2b646172a92926be0f26f739099Jack Wang timingResults.putLong(label, value); 518075997f12e2fb2b646172a92926be0f26f739099Jack Wang } 519075997f12e2fb2b646172a92926be0f26f739099Jack Wang 520075997f12e2fb2b646172a92926be0f26f739099Jack Wang public void writeMeasurement(String label, float value) { 521075997f12e2fb2b646172a92926be0f26f739099Jack Wang timingResults.putFloat(label, value); 522075997f12e2fb2b646172a92926be0f26f739099Jack Wang } 523075997f12e2fb2b646172a92926be0f26f739099Jack Wang 524075997f12e2fb2b646172a92926be0f26f739099Jack Wang public void writeMeasurement(String label, String value) { 525075997f12e2fb2b646172a92926be0f26f739099Jack Wang timingResults.putString(label, value); 526ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 527ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 528ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang} 529