1 /*
2  * Copyright (C) 2018 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.game.qualification.metric;
17 
18 import static org.junit.Assert.assertEquals;
19 import static org.junit.Assert.assertFalse;
20 import static org.junit.Assert.assertTrue;
21 import static org.junit.Assert.fail;
22 
23 import com.android.game.qualification.ApkInfo;
24 import com.android.tradefed.device.metric.DeviceMetricData;
25 
26 import org.junit.Before;
27 import org.junit.Test;
28 
29 import java.util.Collections;
30 import java.util.List;
31 
32 /** Test for {@link GameQualificationFpsCollector}. */
33 public class GameQualificationFpsCollectorTest {
34     private static final String VSYNC = "16666666";
35 
36     private static final ApkInfo APK = new ApkInfo(
37             "foo",
38             "foo.apk",
39             "com.foo",
40             null,
41             "Surface View - com.foo#0",
42             null,
43             Collections.emptyList(),
44             10000,
45             10000,
46             true);
47 
48     private GameQualificationFpsCollector mCollector;
49 
50     @Before
setUp()51     public void setUp() {
52         mCollector = new GameQualificationFpsCollector();
53         mCollector.setApkInfo(APK);
54         mCollector.enable();
55     }
56 
57     @Test
basic()58     public void basic() {
59         mCollector.doStart(new DeviceMetricData(null));
60         assertTrue(mCollector.hasError());
61 
62         mCollector.processRawData(new String[]{VSYNC, "1\t2\t3", "4\t5\t6"});
63         List<GameQualificationMetric> metrics = mCollector.getElapsedTimes();
64         assertFalse(mCollector.hasError());
65         assertEquals(2, metrics.get(0).getActualPresentTime());
66         assertEquals(3, metrics.get(0).getFrameReadyTime());
67 
68         assertEquals(5, metrics.get(1).getActualPresentTime());
69         assertEquals(6, metrics.get(1).getFrameReadyTime());
70 
71         mCollector.processRawData(new String[]{VSYNC, "7\t8\t9"});
72         assertEquals(8, metrics.get(2).getActualPresentTime());
73         assertEquals(9, metrics.get(2).getFrameReadyTime());
74     }
75 
76     @Test
appTerminated()77     public void appTerminated() {
78         mCollector.doStart(new DeviceMetricData(null));
79 
80         mCollector.processRawData(new String[]{VSYNC, "1\t2\t3"});
81         assertFalse(mCollector.hasError());
82         try {
83             // If layer does not exist, dumpsys contains a single
84             mCollector.processRawData(new String[]{VSYNC});
85             fail("expected exception");
86         } catch (RuntimeException e){
87             // Do nothing.
88         }
89     }
90 
91     @Test
regexPattern()92     public void regexPattern() {
93         ApkInfo apk = new ApkInfo(
94                 "foo",
95                 "foo.apk",
96                 "com.foo",
97                 null,
98                 "*Invalid pattern",
99                 null,
100                 Collections.emptyList(),
101                 10000,
102                 10000,
103                 true);
104         mCollector.setApkInfo(apk);
105         try {
106             mCollector.doStart(new DeviceMetricData(null));
107             fail("expected exception");
108         } catch (RuntimeException e){
109             // Do nothing.
110         }
111     }
112 }