1 /* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package com.android.tradefed.device.metric; 17 18 import com.android.ddmlib.testrunner.TestIdentifier; 19 import com.android.tradefed.build.IBuildInfo; 20 import com.android.tradefed.device.ITestDevice; 21 import com.android.tradefed.invoker.IInvocationContext; 22 import com.android.tradefed.result.ITestInvocationListener; 23 import com.android.tradefed.result.InputStreamSource; 24 import com.android.tradefed.result.LogDataType; 25 26 import java.util.List; 27 import java.util.Map; 28 29 /** 30 * Base implementation of {@link IMetricCollector} that allows to start and stop collection on 31 * {@link #onTestRunStart(DeviceMetricData)} and {@link #onTestRunEnd(DeviceMetricData)}. 32 */ 33 public class BaseDeviceMetricCollector implements IMetricCollector { 34 35 private IInvocationContext mContext; 36 private ITestInvocationListener mForwarder; 37 private DeviceMetricData mRunData; 38 39 @Override 40 public ITestInvocationListener init( 41 IInvocationContext context, ITestInvocationListener listener) { 42 mContext = context; 43 mForwarder = listener; 44 return this; 45 } 46 47 @Override 48 public List<ITestDevice> getDevices() { 49 return mContext.getDevices(); 50 } 51 52 @Override 53 public List<IBuildInfo> getBuildInfos() { 54 return mContext.getBuildInfos(); 55 } 56 57 @Override 58 public ITestInvocationListener getInvocationListener() { 59 return mForwarder; 60 } 61 62 @Override 63 public void onTestRunStart(DeviceMetricData runData) { 64 // Does nothing 65 } 66 67 @Override 68 public void onTestRunEnd(DeviceMetricData runData) { 69 // Does nothing 70 } 71 72 /** =================================== */ 73 /** Invocation Listeners for forwarding */ 74 @Override 75 public final void invocationStarted(IInvocationContext context) { 76 mForwarder.invocationStarted(context); 77 } 78 79 @Override 80 public final void invocationFailed(Throwable cause) { 81 mForwarder.invocationFailed(cause); 82 } 83 84 @Override 85 public final void invocationEnded(long elapsedTime) { 86 mForwarder.invocationEnded(elapsedTime); 87 } 88 89 @Override 90 public final void testLog(String dataName, LogDataType dataType, InputStreamSource dataStream) { 91 mForwarder.testLog(dataName, dataType, dataStream); 92 } 93 94 /** Test run callbacks */ 95 @Override 96 public final void testRunStarted(String runName, int testCount) { 97 mRunData = new DeviceMetricData(); 98 onTestRunStart(mRunData); 99 mForwarder.testRunStarted(runName, testCount); 100 } 101 102 @Override 103 public final void testRunFailed(String errorMessage) { 104 mForwarder.testRunFailed(errorMessage); 105 } 106 107 @Override 108 public final void testRunStopped(long elapsedTime) { 109 mForwarder.testRunStopped(elapsedTime); 110 } 111 112 @Override 113 public final void testRunEnded(long elapsedTime, Map<String, String> runMetrics) { 114 onTestRunEnd(mRunData); 115 mRunData.addToMetrics(runMetrics); 116 mForwarder.testRunEnded(elapsedTime, runMetrics); 117 } 118 119 /** Test cases callbacks */ 120 @Override 121 public final void testStarted(TestIdentifier test) { 122 testStarted(test, System.currentTimeMillis()); 123 } 124 125 @Override 126 public final void testStarted(TestIdentifier test, long startTime) { 127 mForwarder.testStarted(test, startTime); 128 } 129 130 @Override 131 public final void testFailed(TestIdentifier test, String trace) { 132 mForwarder.testFailed(test, trace); 133 } 134 135 @Override 136 public final void testEnded(TestIdentifier test, Map<String, String> testMetrics) { 137 testEnded(test, System.currentTimeMillis(), testMetrics); 138 } 139 140 @Override 141 public final void testEnded( 142 TestIdentifier test, long endTime, Map<String, String> testMetrics) { 143 mForwarder.testEnded(test, endTime, testMetrics); 144 } 145 146 @Override 147 public final void testAssumptionFailure(TestIdentifier test, String trace) { 148 mForwarder.testAssumptionFailure(test, trace); 149 } 150 151 @Override 152 public final void testIgnored(TestIdentifier test) { 153 mForwarder.testIgnored(test); 154 } 155 } 156