Home | History | Annotate | Download | only in metric
      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