Home | History | Annotate | Download | only in settings
      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