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 171a44d5dcabc18cd5ef111f732ccff91683a1a093Neal Nguyenpackage android.os; 18ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 19ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wangimport android.os.PerformanceCollector.PerformanceResultsWriter; 20f76c56bcaa9df1d1afa711177f813dc63f399795Brett Chabotimport android.test.suitebuilder.annotation.MediumTest; 21075997f12e2fb2b646172a92926be0f26f739099Jack Wangimport android.test.suitebuilder.annotation.SmallTest; 22ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 23ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wangimport java.lang.reflect.Field; 24ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wangimport java.util.ArrayList; 25ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wangimport java.util.Random; 26ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 27ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wangimport junit.framework.TestCase; 28ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 29ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wangpublic class PerformanceCollectorTest extends TestCase { 30ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 31ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang private PerformanceCollector mPerfCollector; 32ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 33ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang @Override 34ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang protected void setUp() throws Exception { 35ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang super.setUp(); 36ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector = new PerformanceCollector(); 37ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 38ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 39ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang @Override 40ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang protected void tearDown() throws Exception { 41ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang super.tearDown(); 42ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector = null; 43ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 44ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 45075997f12e2fb2b646172a92926be0f26f739099Jack Wang @SmallTest 46ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void testBeginSnapshotNoWriter() throws Exception { 47ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.beginSnapshot("testBeginSnapshotNoWriter"); 48ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 49ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue((Long)readPrivateField("mSnapshotCpuTime", mPerfCollector) > 0); 50ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue((Long)readPrivateField("mSnapshotExecTime", mPerfCollector) > 0); 51ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle snapshot = (Bundle)readPrivateField("mPerfSnapshot", mPerfCollector); 52ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertNotNull(snapshot); 53ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertEquals(2, snapshot.size()); 54ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 55ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 56f76c56bcaa9df1d1afa711177f813dc63f399795Brett Chabot @MediumTest 57ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void testEndSnapshotNoWriter() throws Exception { 58ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.beginSnapshot("testEndSnapshotNoWriter"); 59075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomLongPeriod(); 60ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle snapshot = mPerfCollector.endSnapshot(); 61ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 62ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifySnapshotBundle(snapshot); 63ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 64ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 65075997f12e2fb2b646172a92926be0f26f739099Jack Wang @SmallTest 66ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void testStartTimingNoWriter() throws Exception { 67ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.startTiming("testStartTimingNoWriter"); 68ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 69ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue((Long)readPrivateField("mCpuTime", mPerfCollector) > 0); 70ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue((Long)readPrivateField("mExecTime", mPerfCollector) > 0); 71ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle measurement = (Bundle)readPrivateField("mPerfMeasurement", mPerfCollector); 72ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertNotNull(measurement); 73ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifyTimingBundle(measurement, new ArrayList<String>()); 74ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 75ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 76075997f12e2fb2b646172a92926be0f26f739099Jack Wang @SmallTest 77ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void testAddIterationNoWriter() throws Exception { 78ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.startTiming("testAddIterationNoWriter"); 79075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 80ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle iteration = mPerfCollector.addIteration("timing1"); 81ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 82ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifyIterationBundle(iteration, "timing1"); 83ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 84ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 85075997f12e2fb2b646172a92926be0f26f739099Jack Wang @SmallTest 86ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void testStopTimingNoWriter() throws Exception { 87ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.startTiming("testStopTimingNoWriter"); 88075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 89ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("timing2"); 90075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 91ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("timing3"); 92075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomShortPeriod(); 93ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle timing = mPerfCollector.stopTiming("timing4"); 94ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 95ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang ArrayList<String> labels = new ArrayList<String>(); 96ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels.add("timing2"); 97ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels.add("timing3"); 98ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels.add("timing4"); 99ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifyTimingBundle(timing, labels); 100ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 101ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 102075997f12e2fb2b646172a92926be0f26f739099Jack Wang @SmallTest 103ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void testBeginSnapshot() throws Exception { 104ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang MockPerformanceResultsWriter writer = new MockPerformanceResultsWriter(); 105ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.setPerformanceResultsWriter(writer); 106ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.beginSnapshot("testBeginSnapshot"); 107ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 108ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertEquals("testBeginSnapshot", writer.snapshotLabel); 109ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue((Long)readPrivateField("mSnapshotCpuTime", mPerfCollector) > 0); 110ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue((Long)readPrivateField("mSnapshotExecTime", mPerfCollector) > 0); 111ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle snapshot = (Bundle)readPrivateField("mPerfSnapshot", mPerfCollector); 112ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertNotNull(snapshot); 113ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertEquals(2, snapshot.size()); 114ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 115ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 116f76c56bcaa9df1d1afa711177f813dc63f399795Brett Chabot @MediumTest 117ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void testEndSnapshot() throws Exception { 118ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang MockPerformanceResultsWriter writer = new MockPerformanceResultsWriter(); 119ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.setPerformanceResultsWriter(writer); 120ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.beginSnapshot("testEndSnapshot"); 121075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomLongPeriod(); 122ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle snapshot1 = mPerfCollector.endSnapshot(); 123ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle snapshot2 = writer.snapshotResults; 124ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 125075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEqualsBundle(snapshot1, snapshot2); 126ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifySnapshotBundle(snapshot1); 127ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 128ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 129075997f12e2fb2b646172a92926be0f26f739099Jack Wang @SmallTest 130ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void testStartTiming() throws Exception { 131ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang MockPerformanceResultsWriter writer = new MockPerformanceResultsWriter(); 132ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.setPerformanceResultsWriter(writer); 133ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.startTiming("testStartTiming"); 134ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 135ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertEquals("testStartTiming", writer.timingLabel); 136ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue((Long)readPrivateField("mCpuTime", mPerfCollector) > 0); 137ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue((Long)readPrivateField("mExecTime", mPerfCollector) > 0); 138ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle measurement = (Bundle)readPrivateField("mPerfMeasurement", mPerfCollector); 139ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertNotNull(measurement); 140ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifyTimingBundle(measurement, new ArrayList<String>()); 141ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 142ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 143075997f12e2fb2b646172a92926be0f26f739099Jack Wang @SmallTest 144ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void testAddIteration() throws Exception { 145ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.startTiming("testAddIteration"); 146075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 147ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle iteration = mPerfCollector.addIteration("timing5"); 148ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 149ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifyIterationBundle(iteration, "timing5"); 150ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 151ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 152075997f12e2fb2b646172a92926be0f26f739099Jack Wang @SmallTest 153ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void testStopTiming() throws Exception { 154ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.startTiming("testStopTiming"); 155075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 156ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("timing6"); 157075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 158ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("timing7"); 159075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomShortPeriod(); 160ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle timing = mPerfCollector.stopTiming("timing8"); 161ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 162ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang ArrayList<String> labels = new ArrayList<String>(); 163ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels.add("timing6"); 164ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels.add("timing7"); 165ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels.add("timing8"); 166ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifyTimingBundle(timing, labels); 167ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 168ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 169075997f12e2fb2b646172a92926be0f26f739099Jack Wang @SmallTest 170075997f12e2fb2b646172a92926be0f26f739099Jack Wang public void testAddMeasurementLong() throws Exception { 171075997f12e2fb2b646172a92926be0f26f739099Jack Wang MockPerformanceResultsWriter writer = new MockPerformanceResultsWriter(); 172075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.setPerformanceResultsWriter(writer); 173075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.startTiming("testAddMeasurementLong"); 174075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.addMeasurement("testAddMeasurementLongZero", 0); 175075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.addMeasurement("testAddMeasurementLongPos", 348573); 176075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.addMeasurement("testAddMeasurementLongNeg", -19354); 177075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.stopTiming(""); 178075997f12e2fb2b646172a92926be0f26f739099Jack Wang 179075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEquals("testAddMeasurementLong", writer.timingLabel); 180075997f12e2fb2b646172a92926be0f26f739099Jack Wang Bundle results = writer.timingResults; 181075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEquals(4, results.size()); 182075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertTrue(results.containsKey("testAddMeasurementLongZero")); 183075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEquals(0, results.getLong("testAddMeasurementLongZero")); 184075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertTrue(results.containsKey("testAddMeasurementLongPos")); 185075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEquals(348573, results.getLong("testAddMeasurementLongPos")); 186075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertTrue(results.containsKey("testAddMeasurementLongNeg")); 187075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEquals(-19354, results.getLong("testAddMeasurementLongNeg")); 188075997f12e2fb2b646172a92926be0f26f739099Jack Wang } 189075997f12e2fb2b646172a92926be0f26f739099Jack Wang 190075997f12e2fb2b646172a92926be0f26f739099Jack Wang @SmallTest 191075997f12e2fb2b646172a92926be0f26f739099Jack Wang public void testAddMeasurementFloat() throws Exception { 192075997f12e2fb2b646172a92926be0f26f739099Jack Wang MockPerformanceResultsWriter writer = new MockPerformanceResultsWriter(); 193075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.setPerformanceResultsWriter(writer); 194075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.startTiming("testAddMeasurementFloat"); 195075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.addMeasurement("testAddMeasurementFloatZero", 0.0f); 196075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.addMeasurement("testAddMeasurementFloatPos", 348573.345f); 197075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.addMeasurement("testAddMeasurementFloatNeg", -19354.093f); 198075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.stopTiming(""); 199075997f12e2fb2b646172a92926be0f26f739099Jack Wang 200075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEquals("testAddMeasurementFloat", writer.timingLabel); 201075997f12e2fb2b646172a92926be0f26f739099Jack Wang Bundle results = writer.timingResults; 202075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEquals(4, results.size()); 203075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertTrue(results.containsKey("testAddMeasurementFloatZero")); 204075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEquals(0.0f, results.getFloat("testAddMeasurementFloatZero")); 205075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertTrue(results.containsKey("testAddMeasurementFloatPos")); 206075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEquals(348573.345f, results.getFloat("testAddMeasurementFloatPos")); 207075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertTrue(results.containsKey("testAddMeasurementFloatNeg")); 208075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEquals(-19354.093f, results.getFloat("testAddMeasurementFloatNeg")); 209075997f12e2fb2b646172a92926be0f26f739099Jack Wang } 210075997f12e2fb2b646172a92926be0f26f739099Jack Wang 211075997f12e2fb2b646172a92926be0f26f739099Jack Wang @SmallTest 212075997f12e2fb2b646172a92926be0f26f739099Jack Wang public void testAddMeasurementString() throws Exception { 213075997f12e2fb2b646172a92926be0f26f739099Jack Wang MockPerformanceResultsWriter writer = new MockPerformanceResultsWriter(); 214075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.setPerformanceResultsWriter(writer); 215075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.startTiming("testAddMeasurementString"); 216075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.addMeasurement("testAddMeasurementStringNull", null); 217075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.addMeasurement("testAddMeasurementStringEmpty", ""); 218075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.addMeasurement("testAddMeasurementStringNonEmpty", "Hello World"); 219075997f12e2fb2b646172a92926be0f26f739099Jack Wang mPerfCollector.stopTiming(""); 220075997f12e2fb2b646172a92926be0f26f739099Jack Wang 221075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEquals("testAddMeasurementString", writer.timingLabel); 222075997f12e2fb2b646172a92926be0f26f739099Jack Wang Bundle results = writer.timingResults; 223075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEquals(4, results.size()); 224075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertTrue(results.containsKey("testAddMeasurementStringNull")); 225075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertNull(results.getString("testAddMeasurementStringNull")); 226075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertTrue(results.containsKey("testAddMeasurementStringEmpty")); 227075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEquals("", results.getString("testAddMeasurementStringEmpty")); 228075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertTrue(results.containsKey("testAddMeasurementStringNonEmpty")); 229075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEquals("Hello World", results.getString("testAddMeasurementStringNonEmpty")); 230075997f12e2fb2b646172a92926be0f26f739099Jack Wang } 231075997f12e2fb2b646172a92926be0f26f739099Jack Wang 232f76c56bcaa9df1d1afa711177f813dc63f399795Brett Chabot @MediumTest 233ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void testSimpleSequence() throws Exception { 234ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang MockPerformanceResultsWriter writer = new MockPerformanceResultsWriter(); 235ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.setPerformanceResultsWriter(writer); 236ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.beginSnapshot("testSimpleSequence"); 237ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.startTiming("testSimpleSequenceTiming"); 238075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 239ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("iteration1"); 240075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 241ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("iteration2"); 242075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 243ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("iteration3"); 244075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 245ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("iteration4"); 246075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomShortPeriod(); 247ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle timing = mPerfCollector.stopTiming("iteration5"); 248075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomLongPeriod(); 249ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle snapshot1 = mPerfCollector.endSnapshot(); 250ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle snapshot2 = writer.snapshotResults; 251ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 252075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEqualsBundle(snapshot1, snapshot2); 253ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifySnapshotBundle(snapshot1); 254ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 255ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang ArrayList<String> labels = new ArrayList<String>(); 256ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels.add("iteration1"); 257ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels.add("iteration2"); 258ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels.add("iteration3"); 259ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels.add("iteration4"); 260ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels.add("iteration5"); 261ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifyTimingBundle(timing, labels); 262ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 263ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 264f76c56bcaa9df1d1afa711177f813dc63f399795Brett Chabot @MediumTest 265ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void testLongSequence() throws Exception { 266ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang MockPerformanceResultsWriter writer = new MockPerformanceResultsWriter(); 267ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.setPerformanceResultsWriter(writer); 268ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.beginSnapshot("testLongSequence"); 269ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.startTiming("testLongSequenceTiming1"); 270075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 271ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("iteration1"); 272075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 273ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("iteration2"); 274075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomShortPeriod(); 275ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle timing1 = mPerfCollector.stopTiming("iteration3"); 276075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomLongPeriod(); 277ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 278ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.startTiming("testLongSequenceTiming2"); 279075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 280ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("iteration4"); 281075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 282ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("iteration5"); 283075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomShortPeriod(); 284ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle timing2 = mPerfCollector.stopTiming("iteration6"); 285075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomLongPeriod(); 286ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 287ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.startTiming("testLongSequenceTiming3"); 288075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 289ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("iteration7"); 290075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 291ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("iteration8"); 292075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomShortPeriod(); 293ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle timing3 = mPerfCollector.stopTiming("iteration9"); 294075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomLongPeriod(); 295ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 296ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.startTiming("testLongSequenceTiming4"); 297075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 298ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("iteration10"); 299075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 300ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("iteration11"); 301075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomShortPeriod(); 302ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle timing4 = mPerfCollector.stopTiming("iteration12"); 303075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomLongPeriod(); 304ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 305ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.startTiming("testLongSequenceTiming5"); 306075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 307ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("iteration13"); 308075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomTinyPeriod(); 309ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.addIteration("iteration14"); 310075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomShortPeriod(); 311ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle timing5 = mPerfCollector.stopTiming("iteration15"); 312075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomLongPeriod(); 313ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle snapshot1 = mPerfCollector.endSnapshot(); 314ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle snapshot2 = writer.snapshotResults; 315ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 316075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEqualsBundle(snapshot1, snapshot2); 317ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifySnapshotBundle(snapshot1); 318ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 319ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang ArrayList<String> labels1 = new ArrayList<String>(); 320ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels1.add("iteration1"); 321ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels1.add("iteration2"); 322ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels1.add("iteration3"); 323ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifyTimingBundle(timing1, labels1); 324ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang ArrayList<String> labels2 = new ArrayList<String>(); 325ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels2.add("iteration4"); 326ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels2.add("iteration5"); 327ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels2.add("iteration6"); 328ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifyTimingBundle(timing2, labels2); 329ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang ArrayList<String> labels3 = new ArrayList<String>(); 330ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels3.add("iteration7"); 331ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels3.add("iteration8"); 332ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels3.add("iteration9"); 333ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifyTimingBundle(timing3, labels3); 334ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang ArrayList<String> labels4 = new ArrayList<String>(); 335ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels4.add("iteration10"); 336ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels4.add("iteration11"); 337ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels4.add("iteration12"); 338ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifyTimingBundle(timing4, labels4); 339ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang ArrayList<String> labels5 = new ArrayList<String>(); 340ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels5.add("iteration13"); 341ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels5.add("iteration14"); 342ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels5.add("iteration15"); 343ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifyTimingBundle(timing5, labels5); 344ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 345ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 346ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang /* 347ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang * Verify that snapshotting and timing do not interfere w/ each other, 348ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang * by staggering calls to snapshot and timing functions. 349ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang */ 350f76c56bcaa9df1d1afa711177f813dc63f399795Brett Chabot @MediumTest 351ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void testOutOfOrderSequence() { 352ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang MockPerformanceResultsWriter writer = new MockPerformanceResultsWriter(); 353ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.setPerformanceResultsWriter(writer); 354ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.startTiming("testOutOfOrderSequenceTiming"); 355075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomShortPeriod(); 356ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang mPerfCollector.beginSnapshot("testOutOfOrderSequenceSnapshot"); 357075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomShortPeriod(); 358ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle timing1 = mPerfCollector.stopTiming("timing1"); 359075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomShortPeriod(); 360ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle snapshot1 = mPerfCollector.endSnapshot(); 361ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 362ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle timing2 = writer.timingResults; 363ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle snapshot2 = writer.snapshotResults; 364ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 365075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEqualsBundle(snapshot1, snapshot2); 366ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifySnapshotBundle(snapshot1); 367ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 368075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEqualsBundle(timing1, timing2); 369ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang ArrayList<String> labels = new ArrayList<String>(); 370ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang labels.add("timing1"); 371ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifyTimingBundle(timing1, labels); 372ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 373ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 374075997f12e2fb2b646172a92926be0f26f739099Jack Wang private void workForRandomPeriod(int minDuration, int maxDuration) { 375ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Random random = new Random(); 376ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang int period = minDuration + random.nextInt(maxDuration - minDuration); 377075997f12e2fb2b646172a92926be0f26f739099Jack Wang long start = Process.getElapsedCpuTime(); 378075997f12e2fb2b646172a92926be0f26f739099Jack Wang // Generate positive amount of work, so cpu time is measurable in 379ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang // milliseconds 380075997f12e2fb2b646172a92926be0f26f739099Jack Wang while (Process.getElapsedCpuTime() - start < period) { 381075997f12e2fb2b646172a92926be0f26f739099Jack Wang for (int i = 0, temp = 0; i < 50; i++ ) { 382075997f12e2fb2b646172a92926be0f26f739099Jack Wang temp += i; 383ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 384ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 385ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 386ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 387075997f12e2fb2b646172a92926be0f26f739099Jack Wang private void workForRandomTinyPeriod() { 388075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomPeriod(2, 5); 389ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 390ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 391075997f12e2fb2b646172a92926be0f26f739099Jack Wang private void workForRandomShortPeriod() { 392075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomPeriod(10, 25); 393ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 394ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 395075997f12e2fb2b646172a92926be0f26f739099Jack Wang private void workForRandomLongPeriod() { 396075997f12e2fb2b646172a92926be0f26f739099Jack Wang workForRandomPeriod(50, 100); 397ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 398ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 399ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang private void verifySnapshotBundle(Bundle snapshot) { 400ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue("At least 26 metrics collected", 26 <= snapshot.size()); 401ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 402ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_CPU_TIME)); 403ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_CPU_TIME) > 0); 404ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_EXECUTION_TIME)); 405ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_EXECUTION_TIME) > 0); 406ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 407ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey( 408ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang PerformanceCollector.METRIC_KEY_PRE_RECEIVED_TRANSACTIONS)); 409ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_PRE_SENT_TRANSACTIONS)); 410ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_RECEIVED_TRANSACTIONS)); 411ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_SENT_TRANSACTIONS)); 412ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_GC_INVOCATION_COUNT)); 413ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 414ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_JAVA_ALLOCATED)); 415ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_JAVA_ALLOCATED) > 0); 416ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_JAVA_FREE)); 417ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_JAVA_FREE) > 0); 418ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_JAVA_PRIVATE_DIRTY)); 419ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_JAVA_PRIVATE_DIRTY) > 0); 420ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_JAVA_PSS)); 421ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_JAVA_PSS) > 0); 422ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_JAVA_SHARED_DIRTY)); 423ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_JAVA_SHARED_DIRTY) > 0); 424ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_JAVA_SIZE)); 425ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_JAVA_SIZE) > 0); 426ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_NATIVE_ALLOCATED)); 427ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_NATIVE_ALLOCATED) > 0); 428ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_NATIVE_FREE)); 429ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_NATIVE_FREE) > 0); 430ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_NATIVE_PRIVATE_DIRTY)); 431ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_NATIVE_PRIVATE_DIRTY) > 0); 432ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_NATIVE_PSS)); 433ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_NATIVE_PSS) > 0); 434ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_NATIVE_SHARED_DIRTY)); 435ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_NATIVE_SHARED_DIRTY) > 0); 436ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_NATIVE_SIZE)); 437ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_NATIVE_SIZE) > 0); 438ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_GLOBAL_ALLOC_COUNT)); 439ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_GLOBAL_ALLOC_COUNT) > 0); 440ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_GLOBAL_ALLOC_SIZE)); 441ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_GLOBAL_ALLOC_SIZE) > 0); 442ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_GLOBAL_FREED_COUNT)); 443ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_GLOBAL_FREED_COUNT) > 0); 444ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_GLOBAL_FREED_SIZE)); 445ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_GLOBAL_FREED_SIZE) > 0); 446ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_OTHER_PRIVATE_DIRTY)); 447ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_OTHER_PRIVATE_DIRTY) > 0); 448ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_OTHER_PSS)); 449ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_OTHER_PSS) > 0); 450ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.containsKey(PerformanceCollector.METRIC_KEY_OTHER_SHARED_DIRTY)); 451ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(snapshot.getLong(PerformanceCollector.METRIC_KEY_OTHER_SHARED_DIRTY) > 0); 452ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 453ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 454ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang private void verifyIterationBundle(Bundle iteration, String label) { 455ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertEquals(3, iteration.size()); 456ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(iteration.containsKey(PerformanceCollector.METRIC_KEY_LABEL)); 457ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertEquals(label, iteration.getString(PerformanceCollector.METRIC_KEY_LABEL)); 458ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(iteration.containsKey(PerformanceCollector.METRIC_KEY_CPU_TIME)); 459ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(iteration.getLong(PerformanceCollector.METRIC_KEY_CPU_TIME) > 0); 460ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(iteration.containsKey(PerformanceCollector.METRIC_KEY_EXECUTION_TIME)); 461ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(iteration.getLong(PerformanceCollector.METRIC_KEY_EXECUTION_TIME) > 0); 462ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 463ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 464ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang private void verifyTimingBundle(Bundle timing, ArrayList<String> labels) { 465ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertEquals(1, timing.size()); 466ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertTrue(timing.containsKey(PerformanceCollector.METRIC_KEY_ITERATIONS)); 467ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang ArrayList<Parcelable> iterations = timing.getParcelableArrayList( 468ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang PerformanceCollector.METRIC_KEY_ITERATIONS); 469ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertNotNull(iterations); 470ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang assertEquals(labels.size(), iterations.size()); 471ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang for (int i = 0; i < labels.size(); i ++) { 472ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Bundle iteration = (Bundle)iterations.get(i); 473ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang verifyIterationBundle(iteration, labels.get(i)); 474ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 475ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 476ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 477075997f12e2fb2b646172a92926be0f26f739099Jack Wang private void assertEqualsBundle(Bundle b1, Bundle b2) { 478075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEquals(b1.keySet(), b2.keySet()); 479075997f12e2fb2b646172a92926be0f26f739099Jack Wang for (String key : b1.keySet()) { 480075997f12e2fb2b646172a92926be0f26f739099Jack Wang assertEquals(b1.get(key), b2.get(key)); 481075997f12e2fb2b646172a92926be0f26f739099Jack Wang } 482075997f12e2fb2b646172a92926be0f26f739099Jack Wang } 483075997f12e2fb2b646172a92926be0f26f739099Jack Wang 484ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang private Object readPrivateField(String fieldName, Object object) throws Exception { 485ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang Field f = object.getClass().getDeclaredField(fieldName); 486ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang f.setAccessible(true); 487ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang return f.get(object); 488ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 489ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 490ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang private class MockPerformanceResultsWriter implements PerformanceResultsWriter { 491ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 492ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public String snapshotLabel; 493ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public Bundle snapshotResults = new Bundle(); 494ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public String timingLabel; 495ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public Bundle timingResults = new Bundle(); 496ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 497ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void writeBeginSnapshot(String label) { 498ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang snapshotLabel = label; 499ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 500ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 501ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void writeEndSnapshot(Bundle results) { 502075997f12e2fb2b646172a92926be0f26f739099Jack Wang snapshotResults.putAll(results); 503ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 504ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 505ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void writeStartTiming(String label) { 506ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang timingLabel = label; 507ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 508ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang 509ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang public void writeStopTiming(Bundle results) { 510075997f12e2fb2b646172a92926be0f26f739099Jack Wang timingResults.putAll(results); 511075997f12e2fb2b646172a92926be0f26f739099Jack Wang } 512075997f12e2fb2b646172a92926be0f26f739099Jack Wang 513075997f12e2fb2b646172a92926be0f26f739099Jack Wang public void writeMeasurement(String label, long value) { 514075997f12e2fb2b646172a92926be0f26f739099Jack Wang timingResults.putLong(label, value); 515075997f12e2fb2b646172a92926be0f26f739099Jack Wang } 516075997f12e2fb2b646172a92926be0f26f739099Jack Wang 517075997f12e2fb2b646172a92926be0f26f739099Jack Wang public void writeMeasurement(String label, float value) { 518075997f12e2fb2b646172a92926be0f26f739099Jack Wang timingResults.putFloat(label, value); 519075997f12e2fb2b646172a92926be0f26f739099Jack Wang } 520075997f12e2fb2b646172a92926be0f26f739099Jack Wang 521075997f12e2fb2b646172a92926be0f26f739099Jack Wang public void writeMeasurement(String label, String value) { 522075997f12e2fb2b646172a92926be0f26f739099Jack Wang timingResults.putString(label, value); 523ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 524ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang } 525ff1df69dd4835c177c724e1b5f1ba02d1f674047Jack Wang} 526