/* * Copyright (C) 2007 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.test; import android.os.Bundle; import android.os.PerformanceCollector; import android.os.PerformanceCollector.PerformanceResultsWriter; import java.lang.reflect.Method; /** * Provides hooks and wrappers to automatically and manually collect and report * performance data in tests. * * {@hide} Pending approval for public API. */ public class PerformanceTestBase extends InstrumentationTestCase implements PerformanceTestCase { private static PerformanceCollector sPerfCollector = new PerformanceCollector(); private static int sNumTestMethods = 0; private static int sNumTestMethodsLeft = 0; // Count number of tests, used to emulate beforeClass and afterClass from JUnit4 public PerformanceTestBase() { if (sNumTestMethods == 0) { Method methods[] = getClass().getMethods(); for (Method m : methods) { if (m.getName().startsWith("test")) { sNumTestMethods ++; sNumTestMethodsLeft ++; } } } } @Override protected void setUp() throws Exception { super.setUp(); // @beforeClass // Will skew timing measured by TestRunner, but not by PerformanceCollector if (sNumTestMethodsLeft == sNumTestMethods) { sPerfCollector.beginSnapshot(this.getClass().getName()); } } @Override protected void tearDown() throws Exception { // @afterClass // Will skew timing measured by TestRunner, but not by PerformanceCollector if (--sNumTestMethodsLeft == 0) { sPerfCollector.endSnapshot(); } super.tearDown(); } public void setPerformanceResultsWriter(PerformanceResultsWriter writer) { sPerfCollector.setPerformanceResultsWriter(writer); } /** * @see PerformanceCollector#beginSnapshot(String) */ protected void beginSnapshot(String label) { sPerfCollector.beginSnapshot(label); } /** * @see PerformanceCollector#endSnapshot() */ protected Bundle endSnapshot() { return sPerfCollector.endSnapshot(); } /** * @see PerformanceCollector#startTiming(String) */ protected void startTiming(String label) { sPerfCollector.startTiming(label); } /** * @see PerformanceCollector#addIteration(String) */ protected Bundle addIteration(String label) { return sPerfCollector.addIteration(label); } /** * @see PerformanceCollector#stopTiming(String) */ protected Bundle stopTiming(String label) { return sPerfCollector.stopTiming(label); } public int startPerformance(PerformanceTestCase.Intermediates intermediates) { return 0; } public boolean isPerformanceOnly() { return true; } }