1683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav/* 2683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav * Copyright (C) 2015 The Android Open Source Project 3683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav * 4683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav * Licensed under the Apache License, Version 2.0 (the "License"); 5683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav * you may not use this file except in compliance with the License. 6683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav * You may obtain a copy of the License at 7683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav * 8683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav * http://www.apache.org/licenses/LICENSE-2.0 9683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav * 10683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav * Unless required by applicable law or agreed to in writing, software 11683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav * distributed under the License is distributed on an "AS IS" BASIS, 12683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav * See the License for the specific language governing permissions and 14683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav * limitations under the License. 15683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav */ 16683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 17683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslavpackage com.android.providers.settings; 18683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 19683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslavimport android.os.SystemClock; 20683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslavimport android.os.UserHandle; 21683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslavimport android.util.Log; 22683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 23683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav/** 24683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav* Performance tests for the SettingContentProvider. 25683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav*/ 26683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslavpublic class SettingsProviderPerformanceTest extends BaseSettingsProviderTest { 27683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav private static final String LOG_TAG = "SettingsProviderPerformanceTest"; 28683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 29683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav private static final int ITERATION_COUNT = 100; 30683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 31683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav private static final int MICRO_SECONDS_IN_MILLISECOND = 1000; 32683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 33683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav private static final long MAX_AVERAGE_SET_AND_GET_SETTING_DURATION_MILLIS = 20; 34683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 35683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav public void testSetAndGetPerformanceForGlobalViaFrontEndApi() throws Exception { 36683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Start with a clean slate. 37683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav insertStringViaProviderApi(SETTING_TYPE_GLOBAL, 38683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav FAKE_SETTING_NAME, FAKE_SETTING_VALUE, false); 39683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 40683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav final long startTimeMicro = SystemClock.currentTimeMicro(); 41683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 42683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav try { 43683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav for (int i = 0; i < ITERATION_COUNT; i++) { 44683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Set the setting to its first value. 45683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav updateStringViaProviderApiSetting(SETTING_TYPE_GLOBAL, FAKE_SETTING_NAME, 46683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav FAKE_SETTING_VALUE); 47683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 48683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Make sure the setting changed. 49683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav String firstValue = getStringViaFrontEndApiSetting(SETTING_TYPE_GLOBAL, 5043765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen FAKE_SETTING_NAME, UserHandle.USER_SYSTEM); 51683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav assertEquals("Setting value didn't change", FAKE_SETTING_VALUE, firstValue); 52683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 53683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Set the setting to its second value. 54683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav updateStringViaProviderApiSetting(SETTING_TYPE_GLOBAL, FAKE_SETTING_NAME, 55683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav FAKE_SETTING_VALUE_1); 56683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 57683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Make sure the setting changed. 58683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav String secondValue = getStringViaFrontEndApiSetting(SETTING_TYPE_GLOBAL, 5943765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen FAKE_SETTING_NAME, UserHandle.USER_SYSTEM); 60683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav assertEquals("Setting value didn't change", FAKE_SETTING_VALUE_1, secondValue); 61683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 62683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } finally { 63683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Clean up. 64683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav deleteStringViaProviderApi(SETTING_TYPE_GLOBAL, FAKE_SETTING_NAME); 65683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 66683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 67683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav final long elapsedTimeMicro = SystemClock.currentTimeMicro() - startTimeMicro; 68683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 69683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav final long averageTimePerIterationMillis = (long) ((((float) elapsedTimeMicro) 70683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav / ITERATION_COUNT) / MICRO_SECONDS_IN_MILLISECOND); 71683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 72683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav Log.i(LOG_TAG, "Average time to set and get setting via provider APIs: " 73683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav + averageTimePerIterationMillis + " ms"); 74683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 75683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav assertTrue("Setting and getting a settings takes too long.", averageTimePerIterationMillis 76683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav < MAX_AVERAGE_SET_AND_GET_SETTING_DURATION_MILLIS); 77683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 78683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 79683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav public void testSetAndGetPerformanceForGlobalViaProviderApi() throws Exception { 80683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Start with a clean slate. 81683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav deleteStringViaProviderApi(SETTING_TYPE_GLOBAL, FAKE_SETTING_NAME); 82683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 83683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav final long startTimeMicro = SystemClock.currentTimeMicro(); 84683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 85683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav try { 86683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav for (int i = 0; i < ITERATION_COUNT; i++) { 87683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Set the setting to its first value. 88683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav setStringViaFrontEndApiSetting(SETTING_TYPE_GLOBAL, FAKE_SETTING_NAME, 8943765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen FAKE_SETTING_VALUE, UserHandle.USER_SYSTEM); 90683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 91683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Make sure the setting changed. 92683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav String firstValue = getStringViaFrontEndApiSetting(SETTING_TYPE_GLOBAL, 9343765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen FAKE_SETTING_NAME, UserHandle.USER_SYSTEM); 94683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav assertEquals("Setting value didn't change", FAKE_SETTING_VALUE, firstValue); 95683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 96683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Set the setting to its second value. 97683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav setStringViaFrontEndApiSetting(SETTING_TYPE_GLOBAL, FAKE_SETTING_NAME, 9843765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen FAKE_SETTING_VALUE_1, UserHandle.USER_SYSTEM); 99683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 100683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Make sure the setting changed. 101683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav String secondValue = getStringViaFrontEndApiSetting(SETTING_TYPE_GLOBAL, 10243765b77a0286403fd9f7f5305219f0d9a10c953Xiaohui Chen FAKE_SETTING_NAME, UserHandle.USER_SYSTEM); 103683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav assertEquals("Setting value didn't change", FAKE_SETTING_VALUE_1, secondValue); 104683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 105683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } finally { 106683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav // Clean up. 107683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav deleteStringViaProviderApi(SETTING_TYPE_GLOBAL, FAKE_SETTING_NAME); 108683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 109683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 110683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav final long elapsedTimeMicro = SystemClock.currentTimeMicro() - startTimeMicro; 111683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 112683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav final long averageTimePerIterationMillis = (long) ((((float) elapsedTimeMicro) 113683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav / ITERATION_COUNT) / MICRO_SECONDS_IN_MILLISECOND); 114683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 115683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav Log.i(LOG_TAG, "Average time to set and get setting via front-eng APIs: " 116683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav + averageTimePerIterationMillis + " ms"); 117683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav 118683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav assertTrue("Setting and getting a settings takes too long.", averageTimePerIterationMillis 119683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav < MAX_AVERAGE_SET_AND_GET_SETTING_DURATION_MILLIS); 120683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav } 121683914bfb13908bf380a25258cd45bcf43f13dc9Svetoslav} 122