| # Copyright 2013 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| from measurements import startup |
| from metrics import cpu |
| from metrics import startup_metric |
| |
| |
| class SessionRestore(startup.Startup): |
| """Performs a measurement of Chromium's Session restore performance. |
| |
| This test is meant to be run against a generated profile. |
| This test inherits support for the --warm or --cold command line options - |
| see startup.py for details. |
| """ |
| |
| def __init__(self): |
| super(SessionRestore, self).__init__() |
| self.close_tabs_before_run = False |
| self._cpu_metric = None |
| |
| def CustomizeBrowserOptions(self, options): |
| super(SessionRestore, self).CustomizeBrowserOptions(options) |
| options.AppendExtraBrowserArgs([ |
| '--restore-last-session' |
| ]) |
| |
| def CanRunForPage(self, page): |
| # No matter how many pages in the pageset, just perform one test iteration. |
| return page.page_set.pages.index(page) == 0 |
| |
| def RunNavigateSteps(self, page, tab): |
| # Overriden so that no page navigation occurs. |
| pass |
| |
| def ValidatePageSet(self, page_set): |
| # Reject any pageset that contains more than one WPR archive. |
| wpr_archives = {} |
| for page in page_set: |
| wpr_archives[page_set.WprFilePathForPage(page)] = True |
| |
| if len(wpr_archives.keys()) > 1: |
| raise Exception("Invalid pageset: more than 1 WPR archive found.: " + |
| ', '.join(wpr_archives.keys())) |
| |
| def DidStartBrowser(self, browser): |
| self._cpu_metric = cpu.CpuMetric(browser) |
| self._cpu_metric.Start(None, None) |
| |
| def MeasurePage(self, page, tab, results): |
| # Wait for all tabs to finish loading. |
| for i in xrange(len(tab.browser.tabs)): |
| t = tab.browser.tabs[i] |
| t.WaitForDocumentReadyStateToBeComplete() |
| |
| # Record CPU usage from browser start to when all pages have loaded. |
| self._cpu_metric.Stop(None, None) |
| self._cpu_metric.AddResults(tab, results, 'cpu_utilization') |
| |
| startup_metric.StartupMetric().AddResults(tab, results) |
| |
| # TODO(jeremy): Measure time to load - first, last and frontmost tab here. |