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 com.android.providers.settings; 18 19 import android.os.SystemClock; 20 import android.os.UserHandle; 21 import android.util.Log; 22 23 /** 24 * Performance tests for the SettingContentProvider. 25 */ 26 public class SettingsProviderPerformanceTest extends BaseSettingsProviderTest { 27 private static final String LOG_TAG = "SettingsProviderPerformanceTest"; 28 29 private static final int ITERATION_COUNT = 100; 30 31 private static final int MICRO_SECONDS_IN_MILLISECOND = 1000; 32 33 private static final long MAX_AVERAGE_SET_AND_GET_SETTING_DURATION_MILLIS = 20; 34 35 public void testSetAndGetPerformanceForGlobalViaFrontEndApi() throws Exception { 36 // Start with a clean slate. 37 insertStringViaProviderApi(SETTING_TYPE_GLOBAL, 38 FAKE_SETTING_NAME, FAKE_SETTING_VALUE, false); 39 40 final long startTimeMicro = SystemClock.currentTimeMicro(); 41 42 try { 43 for (int i = 0; i < ITERATION_COUNT; i++) { 44 // Set the setting to its first value. 45 updateStringViaProviderApiSetting(SETTING_TYPE_GLOBAL, FAKE_SETTING_NAME, 46 FAKE_SETTING_VALUE); 47 48 // Make sure the setting changed. 49 String firstValue = getStringViaFrontEndApiSetting(SETTING_TYPE_GLOBAL, 50 FAKE_SETTING_NAME, UserHandle.USER_SYSTEM); 51 assertEquals("Setting value didn't change", FAKE_SETTING_VALUE, firstValue); 52 53 // Set the setting to its second value. 54 updateStringViaProviderApiSetting(SETTING_TYPE_GLOBAL, FAKE_SETTING_NAME, 55 FAKE_SETTING_VALUE_1); 56 57 // Make sure the setting changed. 58 String secondValue = getStringViaFrontEndApiSetting(SETTING_TYPE_GLOBAL, 59 FAKE_SETTING_NAME, UserHandle.USER_SYSTEM); 60 assertEquals("Setting value didn't change", FAKE_SETTING_VALUE_1, secondValue); 61 } 62 } finally { 63 // Clean up. 64 deleteStringViaProviderApi(SETTING_TYPE_GLOBAL, FAKE_SETTING_NAME); 65 } 66 67 final long elapsedTimeMicro = SystemClock.currentTimeMicro() - startTimeMicro; 68 69 final long averageTimePerIterationMillis = (long) ((((float) elapsedTimeMicro) 70 / ITERATION_COUNT) / MICRO_SECONDS_IN_MILLISECOND); 71 72 Log.i(LOG_TAG, "Average time to set and get setting via provider APIs: " 73 + averageTimePerIterationMillis + " ms"); 74 75 assertTrue("Setting and getting a settings takes too long.", averageTimePerIterationMillis 76 < MAX_AVERAGE_SET_AND_GET_SETTING_DURATION_MILLIS); 77 } 78 79 public void testSetAndGetPerformanceForGlobalViaProviderApi() throws Exception { 80 // Start with a clean slate. 81 deleteStringViaProviderApi(SETTING_TYPE_GLOBAL, FAKE_SETTING_NAME); 82 83 final long startTimeMicro = SystemClock.currentTimeMicro(); 84 85 try { 86 for (int i = 0; i < ITERATION_COUNT; i++) { 87 // Set the setting to its first value. 88 setStringViaFrontEndApiSetting(SETTING_TYPE_GLOBAL, FAKE_SETTING_NAME, 89 FAKE_SETTING_VALUE, UserHandle.USER_SYSTEM); 90 91 // Make sure the setting changed. 92 String firstValue = getStringViaFrontEndApiSetting(SETTING_TYPE_GLOBAL, 93 FAKE_SETTING_NAME, UserHandle.USER_SYSTEM); 94 assertEquals("Setting value didn't change", FAKE_SETTING_VALUE, firstValue); 95 96 // Set the setting to its second value. 97 setStringViaFrontEndApiSetting(SETTING_TYPE_GLOBAL, FAKE_SETTING_NAME, 98 FAKE_SETTING_VALUE_1, UserHandle.USER_SYSTEM); 99 100 // Make sure the setting changed. 101 String secondValue = getStringViaFrontEndApiSetting(SETTING_TYPE_GLOBAL, 102 FAKE_SETTING_NAME, UserHandle.USER_SYSTEM); 103 assertEquals("Setting value didn't change", FAKE_SETTING_VALUE_1, secondValue); 104 } 105 } finally { 106 // Clean up. 107 deleteStringViaProviderApi(SETTING_TYPE_GLOBAL, FAKE_SETTING_NAME); 108 } 109 110 final long elapsedTimeMicro = SystemClock.currentTimeMicro() - startTimeMicro; 111 112 final long averageTimePerIterationMillis = (long) ((((float) elapsedTimeMicro) 113 / ITERATION_COUNT) / MICRO_SECONDS_IN_MILLISECOND); 114 115 Log.i(LOG_TAG, "Average time to set and get setting via front-eng APIs: " 116 + averageTimePerIterationMillis + " ms"); 117 118 assertTrue("Setting and getting a settings takes too long.", averageTimePerIterationMillis 119 < MAX_AVERAGE_SET_AND_GET_SETTING_DURATION_MILLIS); 120 } 121 } 122