def run_once(self, idle_time=120, sleep=10): with chrome.Chrome(): self._backlight = power_utils.Backlight() self._backlight.set_default() t0 = time.time() self._start_time = t0 self._psr = power_utils.DisplayPanelSelfRefresh(init_time=t0) self.status = power_status.get_status() self._stats = power_status.StatoMatic() measurements = [] if not self.status.on_ac(): measurements.append( power_status.SystemPower(self.status.battery_path)) if power_utils.has_rapl_support(): measurements += power_rapl.create_rapl() self._plog = power_status.PowerLogger(measurements, seconds_period=sleep) self._tlog = power_status.TempLogger([], seconds_period=sleep) self._plog.start() self._tlog.start() for _ in xrange(0, idle_time, sleep): time.sleep(sleep) self.status.refresh() self.status.refresh() self._plog.checkpoint('', self._start_time) self._tlog.checkpoint('', self._start_time) self._psr.refresh()
def run_once(self): t0 = time.time() # record the PSR related info. psr = power_utils.DisplayPanelSelfRefresh(init_time=t0) try: self._keyboard_backlight = power_utils.KbdBacklight() self._set_keyboard_backlight_level() except power_utils.KbdBacklightException as e: logging.info("Assuming no keyboard backlight due to :: %s", str(e)) self._keyboard_backlight = None measurements = \ [power_status.SystemPower(self._power_status.battery_path)] if power_utils.has_rapl_support(): measurements += power_rapl.create_rapl() self._plog = power_status.PowerLogger(measurements, seconds_period=20) self._tlog = power_status.TempLogger([], seconds_period=20) self._plog.start() self._tlog.start() if self._log_mem_bandwidth: self._mlog = memory_bandwidth_logger.MemoryBandwidthLogger( raw=False, seconds_period=2) self._mlog.start() ext_path = os.path.join(os.path.dirname(__file__), 'extension') self._tmp_keyvals['username'] = self._username try: self._browser = chrome.Chrome(extension_paths=[ext_path], gaia_login=self._gaia_login, username=self._username, password=self._password) except exceptions.LoginException: # already failed guest login if not self._gaia_login: raise self._gaia_login = False logging.warn("Unable to use GAIA acct %s. Using GUEST instead.\n", self._username) self._browser = chrome.Chrome(extension_paths=[ext_path], gaia_login=self._gaia_login) if not self._gaia_login: self._tmp_keyvals['username'] = '******' extension = self._browser.get_extension(ext_path) for k in params_dict: if getattr(self, params_dict[k]) is not '': extension.ExecuteJavaScript('var %s = %s;' % (k, getattr(self, params_dict[k]))) # This opens a trap start page to capture tabs opened for first login. # It will be closed when startTest is run. extension.ExecuteJavaScript('chrome.windows.create(null, null);') for i in range(self._loop_count): start_time = time.time() extension.ExecuteJavaScript('startTest();') # the power test extension will report its status here latch = self._testServer.add_wait_url('/status') # this starts a thread in the server that listens to log # information from the script script_logging = self._testServer.add_wait_url(url='/log') # dump any log entry that comes from the script into # the debug log self._testServer.add_url_handler(url='/log',\ handler_func=(lambda handler, forms, loop_counter=i:\ _extension_log_handler(handler, forms, loop_counter))) pagelt_tracking = self._testServer.add_wait_url(url='/pagelt') self._testServer.add_url_handler(url='/pagelt',\ handler_func=(lambda handler, forms, tracker=self, loop_counter=i:\ _extension_page_load_info_handler(handler, forms, loop_counter, self))) # reset backlight level since powerd might've modified it # based on ambient light self._set_backlight_level() self._set_lightbar_level() if self._keyboard_backlight: self._set_keyboard_backlight_level() audio_helper.set_volume_levels(self._volume_level, self._mic_gain) low_battery = self._do_wait(self._verbose, self._loop_time, latch) script_logging.set() pagelt_tracking.set() self._plog.checkpoint('loop%d' % (i), start_time) self._tlog.checkpoint('loop%d' % (i), start_time) if self._verbose: logging.debug('loop %d completed', i) if low_battery: logging.info('Exiting due to low battery') break # done with logging from the script, so we can collect that thread t1 = time.time() psr.refresh() self._tmp_keyvals['minutes_battery_life_tested'] = (t1 - t0) / 60 self._tmp_keyvals.update(psr.get_keyvals())
def run_once(self, short=False, test_groups=None, reps=1): # Some sub-tests have duration specified directly, _base_secs * reps # is used in this case. Others complete whenever the underlying task # completes, those are manually tuned to be roughly around # reps * 30 seconds. Don't change _base_secs unless you also # change the manual tuning in sub-tests self._base_secs = 30 self._repeats = reps self._duration_secs = self._base_secs * reps # Lists of default tests to run UI_TESTS = ['backlight', 'download', 'webpages', 'video', 'v8'] NONUI_TESTS = ['backchannel', 'sound', 'lowlevel'] DEFAULT_TESTS = UI_TESTS + NONUI_TESTS DEFAULT_SHORT_TESTS = ['download', 'webpages', 'video'] self.short = short if test_groups is None: if self.short: test_groups = DEFAULT_SHORT_TESTS else: test_groups = DEFAULT_TESTS logging.info('Test groups to run: %s', ', '.join(test_groups)) self._backlight = power_utils.Backlight() self._backlight.set_default() measurements = \ [power_status.SystemPower(self._power_status.battery_path)] if power_utils.has_rapl_support(): measurements += power_rapl.create_rapl() self._plog = power_status.PowerLogger(measurements) self._plog.start() # Log in. with chrome.Chrome() as cr: self._browser = cr.browser graphics_utils.screen_disable_energy_saving() # Most of the tests will be running in this tab. self._tab = cr.browser.tabs[0] # Verify that we have a functioning browser and local web server. self._tab.Activate() self._web_echo("Sanity_test") self._tab.WaitForDocumentReadyStateToBeComplete() # Video test must have the data from download test if ('video' in test_groups): iv = test_groups.index('video') if 'download' not in test_groups[:iv]: msg = '"download" test must run before "video".' raise error.TestError(msg) # Run all the test groups self._run_test_groups(test_groups) # Wrap up keyvals = self._plog.calc() keyvals.update(self._tmp_keyvals) # Calculate expected battery life time with ChromeVer power draw idle_name = 'ChromeVer_system_pwr' if idle_name in keyvals: hours_life = self.energy_full_design / keyvals[idle_name] keyvals['hours_battery_ChromeVer'] = hours_life # Calculate a weighted power draw and battery life time. The weights # are intended to represent "typical" usage. Some video, some Flash ... # and most of the time idle. # see http://www.chromium.org/chromium-os/testing/power-testing weights = { 'vid400p_h264_system_pwr': 0.1, # TODO(chromium:309403) re-enable BallsFlex once Flash in # test-lab understood and re-distribute back to 60/20/10/10. # 'BallsFlex_system_pwr':0.1, 'BallsDHTML_system_pwr': 0.3, } weights[idle_name] = 1 - sum(weights.values()) if set(weights).issubset(set(keyvals)): p = sum(w * keyvals[k] for (k, w) in weights.items()) keyvals['w_Weighted_system_pwr'] = p keyvals['hours_battery_Weighted'] = self.energy_full_design / p self.write_perf_keyval(keyvals) self._plog.save_results(self.resultsdir)
def run_once(self): t0 = time.time() # record the PSR counter psr_t0 = self._get_psr_counter() try: kblight = power_utils.KbdBacklight() kblight.set(self._kblight_percent) self._tmp_keyvals['percent_kbd_backlight'] = kblight.get() except power_utils.KbdBacklightException as e: logging.info("Assuming no keyboard backlight due to :: %s", str(e)) kblight = None measurements = \ [power_status.SystemPower(self._power_status.battery_path)] if power_utils.has_rapl_support(): measurements += power_rapl.create_rapl() self._plog = power_status.PowerLogger(measurements, seconds_period=20) self._tlog = power_status.TempLogger([], seconds_period=20) self._plog.start() self._tlog.start() if self._log_mem_bandwidth: self._mlog = memory_bandwidth_logger.MemoryBandwidthLogger( raw=False, seconds_period=2) self._mlog.start() ext_path = os.path.join(os.path.dirname(__file__), 'extension') self._browser = chrome.Chrome(extension_paths=[ext_path], gaia_login=True, username=self._username, password=self._password) extension = self._browser.get_extension(ext_path) for k in params_dict: if getattr(self, params_dict[k]) is not '': extension.ExecuteJavaScript('var %s = %s;' % (k, getattr(self, params_dict[k]))) # This opens a trap start page to capture tabs opened for first login. # It will be closed when startTest is run. extension.ExecuteJavaScript('chrome.windows.create(null, null);') for i in range(self._loop_count): start_time = time.time() extension.ExecuteJavaScript('startTest();') # the power test extension will report its status here latch = self._testServer.add_wait_url('/status') # reset backlight level since powerd might've modified it # based on ambient light self._set_backlight_level() self._set_lightbar_level() if kblight: kblight.set(self._kblight_percent) audio_helper.set_volume_levels(self._volume_level, self._mic_gain) low_battery = self._do_wait(self._verbose, self._loop_time, latch) self._plog.checkpoint('loop%d' % (i), start_time) self._tlog.checkpoint('loop%d' % (i), start_time) if self._verbose: logging.debug('loop %d completed', i) if low_battery: logging.info('Exiting due to low battery') break t1 = time.time() self._tmp_keyvals['minutes_battery_life_tested'] = (t1 - t0) / 60 if psr_t0: self._tmp_keyvals['psr_residency'] = \ (self._get_psr_counter() - psr_t0) / (10 * (t1 - t0))