1 /* 2 * Copyright (C) 2016 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 com.android.cts.deviceowner; 18 19 import android.content.Context; 20 import android.os.CpuUsageInfo; 21 import android.os.HardwarePropertiesManager; 22 import android.os.SystemClock; 23 24 import java.lang.Math; 25 26 /** 27 * Test {@link HardwarePropertiesManager} 28 */ 29 public class HardwarePropertiesManagerTest extends BaseDeviceOwnerTest { 30 public static final int MAX_FAN_SPEED = 20000; 31 public static final int MAX_DEVICE_TEMPERATURE = 200; 32 public static final int MONITORING_ITERATION_NUMBER = 10; 33 34 // Time between checks in milliseconds. 35 public static final long SLEEP_TIME = 10; 36 checkFanSpeed(float speed)37 private void checkFanSpeed(float speed) { 38 assertTrue(speed >= 0 && speed < MAX_FAN_SPEED); 39 } 40 checkDeviceTemp(float temp, float throttlingTemp, float shutdownTemp)41 private void checkDeviceTemp(float temp, float throttlingTemp, float shutdownTemp) { 42 // Check validity of current temperature. 43 assertTrue(Math.abs(temp) < MAX_DEVICE_TEMPERATURE 44 || temp == HardwarePropertiesManager.UNDEFINED_TEMPERATURE); 45 46 // Compare current temperature and shutdown threshold to determine direction. 47 if (shutdownTemp != HardwarePropertiesManager.UNDEFINED_TEMPERATURE 48 && throttlingTemp != HardwarePropertiesManager.UNDEFINED_TEMPERATURE) { 49 50 // Cold (lower) thresholds. 51 if (throttlingTemp > shutdownTemp) { 52 // Compare current temperature and shutdown threshold. 53 assertTrue(temp > shutdownTemp 54 || temp == HardwarePropertiesManager.UNDEFINED_TEMPERATURE); 55 } 56 57 // Warm (upper) thresholds. 58 else if (throttlingTemp < shutdownTemp) { 59 // Compare current temperature and shutdown threshold. 60 assertTrue(temp < shutdownTemp 61 || temp == HardwarePropertiesManager.UNDEFINED_TEMPERATURE); 62 } 63 } 64 } 65 66 private void checkCpuUsageInfo(CpuUsageInfo info) { 67 assertTrue(info == null || (info.getActive() >= 0 && info.getTotal() >= 0 68 && info.getTotal() >= info.getActive())); 69 } 70 checkFanSpeeds(float[] fanSpeeds)71 private void checkFanSpeeds(float[] fanSpeeds) { 72 for (float speed : fanSpeeds) { 73 checkFanSpeed(speed); 74 } 75 } 76 checkTemps(float[] temps, float[] throttlingThresholds, float[] shutdownThresholds)77 private void checkTemps(float[] temps, float[] throttlingThresholds, 78 float[] shutdownThresholds) { 79 assertEquals(temps.length, throttlingThresholds.length); 80 assertEquals(temps.length, shutdownThresholds.length); 81 for (int i = 0; i < temps.length; ++i) { 82 checkDeviceTemp(temps[i], throttlingThresholds[i], shutdownThresholds[i]); 83 } 84 } 85 checkCpuUsages(CpuUsageInfo[] cpuUsages)86 private void checkCpuUsages(CpuUsageInfo[] cpuUsages) { 87 for (CpuUsageInfo info : cpuUsages) { 88 checkCpuUsageInfo(info); 89 } 90 } 91 92 // Check validity of new array of fan speeds: 93 // the number of fans should be the same. checkFanSpeeds(float[] speeds, float[] oldSpeeds)94 private void checkFanSpeeds(float[] speeds, float[] oldSpeeds) { 95 assertEquals(speeds.length, oldSpeeds.length); 96 } 97 98 // Check validity of new array of cpu usages: 99 // The number of CPUs should be the same and total/active time should not decrease. checkCpuUsages(CpuUsageInfo[] infos, CpuUsageInfo[] oldInfos)100 private void checkCpuUsages(CpuUsageInfo[] infos, 101 CpuUsageInfo[] oldInfos) { 102 assertEquals(infos.length, oldInfos.length); 103 for (int i = 0; i < infos.length; ++i) { 104 assertTrue(oldInfos[i] == null || infos[i] == null 105 || (oldInfos[i].getActive() <= infos[i].getActive() 106 && oldInfos[i].getTotal() <= infos[i].getTotal())); 107 } 108 } 109 110 /** 111 * test points: 112 * 1. Get fan speeds, device temperatures and CPU usage information. 113 * 2. Check for validity. 114 * 3. Sleep. 115 * 4. Do it 10 times and compare with old ones. 116 */ testHardwarePropertiesManager()117 public void testHardwarePropertiesManager() throws InterruptedException, 118 SecurityException { 119 HardwarePropertiesManager hm = (HardwarePropertiesManager) getContext().getSystemService( 120 Context.HARDWARE_PROPERTIES_SERVICE); 121 122 float[] oldFanSpeeds = hm.getFanSpeeds(); 123 124 float[] cpuTemps = hm.getDeviceTemperatures( 125 HardwarePropertiesManager.DEVICE_TEMPERATURE_CPU, 126 HardwarePropertiesManager.TEMPERATURE_CURRENT); 127 float[] cpuThrottlingThresholds = hm.getDeviceTemperatures( 128 HardwarePropertiesManager.DEVICE_TEMPERATURE_CPU, 129 HardwarePropertiesManager.TEMPERATURE_THROTTLING); 130 float[] cpuShutdownThresholds = hm.getDeviceTemperatures( 131 HardwarePropertiesManager.DEVICE_TEMPERATURE_CPU, 132 HardwarePropertiesManager.TEMPERATURE_SHUTDOWN); 133 134 float[] gpuTemps = hm.getDeviceTemperatures( 135 HardwarePropertiesManager.DEVICE_TEMPERATURE_GPU, 136 HardwarePropertiesManager.TEMPERATURE_CURRENT); 137 float[] gpuThrottlingThresholds = hm.getDeviceTemperatures( 138 HardwarePropertiesManager.DEVICE_TEMPERATURE_GPU, 139 HardwarePropertiesManager.TEMPERATURE_THROTTLING); 140 float[] gpuShutdownThresholds = hm.getDeviceTemperatures( 141 HardwarePropertiesManager.DEVICE_TEMPERATURE_GPU, 142 HardwarePropertiesManager.TEMPERATURE_SHUTDOWN); 143 144 float[] batteryTemps = hm.getDeviceTemperatures( 145 HardwarePropertiesManager.DEVICE_TEMPERATURE_BATTERY, 146 HardwarePropertiesManager.TEMPERATURE_CURRENT); 147 float[] batteryThrottlingThresholds = hm.getDeviceTemperatures( 148 HardwarePropertiesManager.DEVICE_TEMPERATURE_BATTERY, 149 HardwarePropertiesManager.TEMPERATURE_THROTTLING); 150 float[] batteryShutdownThresholds = hm.getDeviceTemperatures( 151 HardwarePropertiesManager.DEVICE_TEMPERATURE_BATTERY, 152 HardwarePropertiesManager.TEMPERATURE_SHUTDOWN); 153 154 float[] skinTemps = hm.getDeviceTemperatures( 155 HardwarePropertiesManager.DEVICE_TEMPERATURE_SKIN, 156 HardwarePropertiesManager.TEMPERATURE_CURRENT); 157 float[] skinThrottlingThresholds = hm.getDeviceTemperatures( 158 HardwarePropertiesManager.DEVICE_TEMPERATURE_SKIN, 159 HardwarePropertiesManager.TEMPERATURE_THROTTLING); 160 float[] skinShutdownThresholds = hm.getDeviceTemperatures( 161 HardwarePropertiesManager.DEVICE_TEMPERATURE_SKIN, 162 HardwarePropertiesManager.TEMPERATURE_SHUTDOWN); 163 164 CpuUsageInfo[] oldCpuUsages = hm.getCpuUsages(); 165 166 checkFanSpeeds(oldFanSpeeds); 167 checkTemps(cpuTemps, cpuThrottlingThresholds, cpuShutdownThresholds); 168 checkTemps(gpuTemps, gpuThrottlingThresholds, gpuShutdownThresholds); 169 checkTemps(batteryTemps, batteryThrottlingThresholds, batteryShutdownThresholds); 170 checkTemps(skinTemps, skinThrottlingThresholds, skinShutdownThresholds); 171 checkCpuUsages(oldCpuUsages); 172 173 for (int i = 0; i < MONITORING_ITERATION_NUMBER; i++) { 174 Thread.sleep(SLEEP_TIME); 175 176 float[] fanSpeeds = hm.getFanSpeeds(); 177 cpuTemps = hm.getDeviceTemperatures( 178 HardwarePropertiesManager.DEVICE_TEMPERATURE_CPU, 179 HardwarePropertiesManager.TEMPERATURE_CURRENT); 180 gpuTemps = hm.getDeviceTemperatures( 181 HardwarePropertiesManager.DEVICE_TEMPERATURE_GPU, 182 HardwarePropertiesManager.TEMPERATURE_CURRENT); 183 batteryTemps = hm.getDeviceTemperatures( 184 HardwarePropertiesManager.DEVICE_TEMPERATURE_BATTERY, 185 HardwarePropertiesManager.TEMPERATURE_CURRENT); 186 skinTemps = hm.getDeviceTemperatures( 187 HardwarePropertiesManager.DEVICE_TEMPERATURE_SKIN, 188 HardwarePropertiesManager.TEMPERATURE_CURRENT); 189 CpuUsageInfo[] cpuUsages = hm.getCpuUsages(); 190 191 checkFanSpeeds(fanSpeeds); 192 checkTemps(cpuTemps, cpuThrottlingThresholds, cpuShutdownThresholds); 193 checkTemps(gpuTemps, gpuThrottlingThresholds, gpuShutdownThresholds); 194 checkTemps(batteryTemps, batteryThrottlingThresholds, batteryShutdownThresholds); 195 checkTemps(skinTemps, skinThrottlingThresholds, skinShutdownThresholds); 196 checkCpuUsages(cpuUsages); 197 198 // No need to compare length of old and new temperature arrays: 199 // they are compared through throttling and shutdown threshold arrays lengths. 200 checkFanSpeeds(fanSpeeds, oldFanSpeeds); 201 checkCpuUsages(cpuUsages, oldCpuUsages); 202 203 oldFanSpeeds = fanSpeeds; 204 oldCpuUsages = cpuUsages; 205 } 206 } 207 } 208