Home | History | Annotate | Download | only in cts
      1 /*
      2  * Copyright (C) 2015 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 
     17 package android.leanbackjank.cts;
     18 
     19 import android.os.Bundle;
     20 import android.support.test.uiautomator.UiDevice;
     21 
     22 import androidx.test.jank.GfxMonitor;
     23 import androidx.test.jank.JankTestBase;
     24 import androidx.test.jank.WindowContentFrameStatsMonitor;
     25 
     26 import com.android.compatibility.common.util.DeviceReportLog;
     27 import com.android.compatibility.common.util.ResultType;
     28 import com.android.compatibility.common.util.ResultUnit;
     29 
     30 public abstract class CtsJankTestBase extends JankTestBase {
     31 
     32     private final String REPORT_LOG_NAME = "CtsLeanbackJankTestCases";
     33 
     34     private UiDevice mDevice;
     35     private DeviceReportLog mLog;
     36 
     37     private void printIntValueWithKey(String source, Bundle metrics, String key,
     38             ResultType resultType, ResultUnit resultUnit) {
     39         if (!metrics.containsKey(key)) {
     40             return;
     41         }
     42         mLog.addValue(source, formatKeyForTestMetrics(key), metrics.getInt(key), resultType, resultUnit);
     43     }
     44 
     45     private void printDoubleValueWithKey(String source, Bundle metrics, String key,
     46             ResultType resultType, ResultUnit resultUnit) {
     47         if (!metrics.containsKey(key)) {
     48             return;
     49         }
     50         mLog.addValue(source, formatKeyForTestMetrics(key), metrics.getDouble(key), resultType,
     51                 resultUnit);
     52     }
     53 
     54     private String formatKeyForTestMetrics(String key) {
     55         return key.toLowerCase().replace('-', '_');
     56     }
     57 
     58     @Override
     59     public void afterTest(Bundle metrics) {
     60         String source = String.format("%s#%s", getClass().getCanonicalName(), getName());
     61         printDoubleValueWithKey(source, metrics, WindowContentFrameStatsMonitor.KEY_AVG_FPS,
     62                 ResultType.HIGHER_BETTER, ResultUnit.FPS);
     63         printDoubleValueWithKey(source, metrics,
     64                 WindowContentFrameStatsMonitor.KEY_AVG_LONGEST_FRAME,
     65                 ResultType.LOWER_BETTER, ResultUnit.MS);
     66         printIntValueWithKey(source, metrics, WindowContentFrameStatsMonitor.KEY_MAX_NUM_JANKY,
     67                 ResultType.LOWER_BETTER, ResultUnit.COUNT);
     68         mLog.setSummary(formatKeyForTestMetrics(WindowContentFrameStatsMonitor.KEY_AVG_NUM_JANKY),
     69                 metrics.getDouble(WindowContentFrameStatsMonitor.KEY_AVG_NUM_JANKY),
     70                 ResultType.LOWER_BETTER, ResultUnit.COUNT);
     71 
     72         printDoubleValueWithKey(source, metrics, GfxMonitor.KEY_AVG_NUM_JANKY,
     73                 ResultType.LOWER_BETTER, ResultUnit.COUNT);
     74         printDoubleValueWithKey(source, metrics, GfxMonitor.KEY_AVG_FRAME_TIME_90TH_PERCENTILE,
     75                 ResultType.LOWER_BETTER, ResultUnit.MS);
     76         printDoubleValueWithKey(source, metrics, GfxMonitor.KEY_AVG_FRAME_TIME_95TH_PERCENTILE,
     77                 ResultType.LOWER_BETTER, ResultUnit.MS);
     78         printDoubleValueWithKey(source, metrics, GfxMonitor.KEY_AVG_FRAME_TIME_99TH_PERCENTILE,
     79                 ResultType.LOWER_BETTER, ResultUnit.MS);
     80         printDoubleValueWithKey(source, metrics, GfxMonitor.KEY_AVG_MISSED_VSYNC,
     81                 ResultType.LOWER_BETTER, ResultUnit.COUNT);
     82         printDoubleValueWithKey(source, metrics, GfxMonitor.KEY_AVG_SLOW_UI_THREAD,
     83                 ResultType.LOWER_BETTER, ResultUnit.COUNT);
     84         printDoubleValueWithKey(source, metrics, GfxMonitor.KEY_AVG_SLOW_BITMAP_UPLOADS,
     85                 ResultType.LOWER_BETTER, ResultUnit.COUNT);
     86         printDoubleValueWithKey(source, metrics, GfxMonitor.KEY_AVG_SLOW_DRAW,
     87                 ResultType.LOWER_BETTER, ResultUnit.COUNT);
     88         printDoubleValueWithKey(source, metrics, GfxMonitor.KEY_AVG_HIGH_INPUT_LATENCY,
     89                 ResultType.LOWER_BETTER, ResultUnit.COUNT);
     90     }
     91 
     92     @Override
     93     protected void setUp() throws Exception {
     94         super.setUp();
     95         String streamName = "cts_leanback_jank";
     96         mLog = new DeviceReportLog(REPORT_LOG_NAME, streamName);
     97         // fix device orientation
     98         mDevice = UiDevice.getInstance(getInstrumentation());
     99         mDevice.setOrientationNatural();
    100     }
    101 
    102     @Override
    103     protected void tearDown() throws Exception {
    104         mLog.submit(getInstrumentation());
    105         // restore device orientation
    106         mDevice.unfreezeRotation();
    107         super.tearDown();
    108     }
    109 
    110     protected UiDevice getUiDevice() {
    111         return mDevice;
    112     }
    113 }
    114