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 17package android.support.v4.app; 18 19 20import static org.junit.Assert.assertNotNull; 21import static org.junit.Assert.assertNull; 22import static org.junit.Assert.assertTrue; 23 24import android.content.Intent; 25import android.os.Build; 26import android.support.test.InstrumentationRegistry; 27import android.support.test.filters.MediumTest; 28import android.support.test.filters.SmallTest; 29import android.support.test.rule.ActivityTestRule; 30import android.support.test.runner.AndroidJUnit4; 31import android.util.SparseIntArray; 32 33import org.junit.Rule; 34import org.junit.Test; 35import org.junit.runner.RunWith; 36 37@RunWith(AndroidJUnit4.class) 38@SmallTest 39public class FrameMetricsAggregatorTest { 40 41 @Rule 42 public final ActivityTestRule<FrameMetricsActivity> mActivityTestRule; 43 private FrameMetricsSubActivity mSecondActivity = null; 44 45 46 public FrameMetricsAggregatorTest() { 47 mActivityTestRule = new ActivityTestRule<>(FrameMetricsActivity.class); 48 } 49 50 @Test 51 @MediumTest 52 public void testFrameMetrics() throws Throwable { 53 FrameMetricsAggregator metrics = new FrameMetricsAggregator(); 54 55 // Check that getMetrics() returns empty results 56 SparseIntArray[] durations = metrics.getMetrics(); 57 if (Build.VERSION.SDK_INT < 24) { 58 assertNull(durations); 59 } else { 60 assertNotNull(durations); 61 for (SparseIntArray sparseArray : durations) { 62 assertNull(sparseArray); 63 } 64 } 65 66 final FrameMetricsActivity activity = mActivityTestRule.getActivity(); 67 metrics.add(activity); 68 69 // Check that getMetrics() returns results only for TOTAL_DURATION 70 durations = metrics.getMetrics(); 71 if (Build.VERSION.SDK_INT < 24) { 72 assertNull(durations); 73 } else { 74 assertNotNull(durations); 75 for (int i = 0; i < durations.length; ++i) { 76 if (i == FrameMetricsAggregator.TOTAL_INDEX) { 77 assertNotNull(durations[i]); 78 } else { 79 assertNull(durations[i]); 80 } 81 } 82 } 83 84 // Start tracking all durations 85 metrics = new FrameMetricsAggregator(FrameMetricsAggregator.EVERY_DURATION); 86 metrics.add(activity); 87 88 // Check that getMetrics() returns results for all durations 89 durations = metrics.getMetrics(); 90 if (Build.VERSION.SDK_INT < 24) { 91 assertNull(durations); 92 } else { 93 assertNotNull(durations); 94 for (SparseIntArray sparseArray : durations) { 95 assertNotNull(sparseArray); 96 } 97 } 98 99 long startTime = System.currentTimeMillis(); 100 while (System.currentTimeMillis() - startTime < 1000) { 101 if (mSecondActivity == null && System.currentTimeMillis() - startTime > 400) { 102 Intent intent = new Intent(activity, FrameMetricsSubActivity.class) 103 .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 104 mSecondActivity = (FrameMetricsSubActivity) 105 InstrumentationRegistry.getInstrumentation().startActivitySync(intent); 106 metrics.add(mSecondActivity); 107 } 108 mActivityTestRule.runOnUiThread(new Runnable() { 109 @Override 110 public void run() { 111 activity.invalidate(); 112 } 113 }); 114 try { 115 Thread.sleep(10); 116 } catch (Exception e) { 117 } 118 } 119 120 durations = metrics.getMetrics(); 121 if (Build.VERSION.SDK_INT < 24) { 122 assertNull(durations); 123 } else { 124 assertNotNull(durations); 125 for (SparseIntArray sparseArray : durations) { 126 assertNotNull(sparseArray); 127 assertTrue(sparseArray.size() > 0); 128 } 129 } 130 durations = metrics.remove(mSecondActivity); 131 if (Build.VERSION.SDK_INT < 24) { 132 assertNull(durations); 133 } else { 134 assertNotNull(durations); 135 for (SparseIntArray sparseArray : durations) { 136 assertNotNull(sparseArray); 137 assertTrue(sparseArray.size() > 0); 138 } 139 } 140 durations = metrics.stop(); 141 if (Build.VERSION.SDK_INT < 24) { 142 assertNull(durations); 143 } else { 144 assertNotNull(durations); 145 for (SparseIntArray sparseArray : durations) { 146 assertNotNull(sparseArray); 147 assertTrue(sparseArray.size() > 0); 148 } 149 } 150 durations = metrics.reset(); 151 if (Build.VERSION.SDK_INT < 24) { 152 assertNull(durations); 153 } else { 154 assertNotNull(durations); 155 for (SparseIntArray sparseArray : durations) { 156 assertNotNull(sparseArray); 157 assertTrue(sparseArray.size() > 0); 158 } 159 } 160 durations = metrics.getMetrics(); 161 if (Build.VERSION.SDK_INT < 24) { 162 assertNull(durations); 163 } else { 164 assertNotNull(durations); 165 for (SparseIntArray sparseArray : durations) { 166 assertNull(sparseArray); 167 } 168 } 169 170 } 171 172} 173