ff1df69dd4
+ For bug 1810508 - Added PerformanceCollector class to collect runtime and memory usage data * Moved performance snapshotting from Intrumentation to PerformanceCollector - Added PerformanceResultsWriter interface which defines functions for reporting performance data + Framework integration - Added TimedTest annotation to automatically time tests and write results to instrumentation output - Modified PerformanceTestBase to add collection hooks and wrapper methods - Modified WatcherResultPrinter in InstrumentationTestRunner to implement PerformanceResultsWriter for instrumentation output of performance data - Modified InstrumentationTestRunner and AndroidTestRunner to pass writer instance to test
117 lines
3.4 KiB
Java
117 lines
3.4 KiB
Java
/*
|
|
* 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;
|
|
}
|
|
}
|