diff options
author | dtu@chromium.org <dtu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-15 00:42:59 +0000 |
---|---|---|
committer | dtu@chromium.org <dtu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-15 00:42:59 +0000 |
commit | 3e001dce773fd9252e0ccffe11ef8fb43bdf1922 (patch) | |
tree | 540caa5b4512ed92c6dd5ee2252e0e12bd787568 /tools/perf | |
parent | 968e2f30f0f774757398de6a9e8532b73f0d568f (diff) | |
download | chromium_src-3e001dce773fd9252e0ccffe11ef8fb43bdf1922.zip chromium_src-3e001dce773fd9252e0ccffe11ef8fb43bdf1922.tar.gz chromium_src-3e001dce773fd9252e0ccffe11ef8fb43bdf1922.tar.bz2 |
[telemetry] Simplify the way PageRunner is called.
Before:
results = page_test_results.PageTestResults()
with page_runner.PageRunner(ps):
possible_browser = browser_finder.FindBrowser(options)
runner.Run(options, possible_browser, test, results)
After:
results = page_runner.Run(test, ps, options)
Turns out, PageRunner keeps very little state on its own, and stores most of its state in RunState. Using a with statement does nothing because PageRunner.Close() just passes. Therefore, we can get rid of the PageRunner object and just have page_runner.Run() directly. The only exception was has_called_will_run_page_set, which I solved by getting rid of WillRunPageSet() :(
We can also move a lot of its setup methods to RunState, since those methods delve pretty deeply into RunState anyway. There's more work that could be done here in the future.
Finally, move the results object and possible_browser creation from page_test_runner to page_runner/page_test. This will make it easier for the future test_runner to call page_runner directly. The separation of concerns is that test_runner/page_test_runner only deal with parsing the command line, and page_runner does everything else. In the future, page_test_runner can be obsoleted.
BUG=237412
TEST=./run_tests, smoothness_measurement, and page_cycler with no failures.
R=nduca@chromium.org
Review URL: https://codereview.chromium.org/16373012
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@206529 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'tools/perf')
-rw-r--r-- | tools/perf/perf_tools/page_cycler.py | 40 |
1 files changed, 22 insertions, 18 deletions
diff --git a/tools/perf/perf_tools/page_cycler.py b/tools/perf/perf_tools/page_cycler.py index d10adcd..c185a28 100644 --- a/tools/perf/perf_tools/page_cycler.py +++ b/tools/perf/perf_tools/page_cycler.py @@ -28,6 +28,16 @@ MEMORY_HISTOGRAMS = [ {'name': 'V8.MemoryHeapSampleTotalUsed', 'units': 'kb'}] class PageCycler(page_measurement.PageMeasurement): + def __init__(self, *args, **kwargs): + super(PageCycler, self).__init__(*args, **kwargs) + + with open(os.path.join(os.path.dirname(__file__), + 'page_cycler.js'), 'r') as f: + self._page_cycler_js = f.read() + + self._start_commit_charge = None + self._histograms = None + def AddCommandLineOptions(self, parser): # The page cyclers should default to 10 iterations. In order to change the # default of an option, we must remove and re-add it. @@ -36,29 +46,23 @@ class PageCycler(page_measurement.PageMeasurement): parser.remove_option('--pageset-repeat') parser.add_option(pageset_repeat_option) - def WillRunPageSet(self, tab, results): - # Avoid paying for a cross-renderer navigation on the first page on legacy - # page cyclers which use the filesystem. - if tab.browser.http_server: - tab.Navigate(tab.browser.http_server.UrlOf('nonexistent.html')) - - with open(os.path.join(os.path.dirname(__file__), - 'page_cycler.js'), 'r') as f: - self.page_cycler_js = f.read() # pylint: disable=W0201 - - # pylint: disable=W0201 - self.start_commit_charge = tab.browser.memory_stats['SystemCommitCharge'] + def SetUpBrowser(self, browser): + self._start_commit_charge = browser.memory_stats['SystemCommitCharge'] - # pylint: disable=W0201 - self.histograms = [histogram_metric.HistogramMetric( + self._histograms = [histogram_metric.HistogramMetric( h, histogram_metric.RENDERER_HISTOGRAM) for h in MEMORY_HISTOGRAMS] + def DidStartHTTPServer(self, tab): + # Avoid paying for a cross-renderer navigation on the first page on legacy + # page cyclers which use the filesystem. + tab.Navigate(tab.browser.http_server.UrlOf('nonexistent.html')) + def WillNavigateToPage(self, page, tab): - page.script_to_evaluate_on_commit = self.page_cycler_js + page.script_to_evaluate_on_commit = self._page_cycler_js def DidNavigateToPage(self, page, tab): - for h in self.histograms: + for h in self._histograms: h.Start(page, tab) def CustomizeBrowserOptions(self, options): @@ -107,7 +111,7 @@ class PageCycler(page_measurement.PageMeasurement): AddSummariesForProcessTypes(['Browser', 'Renderer', 'Gpu'], 'total') results.AddSummary('commit_charge', 'kb', - memory['SystemCommitCharge'] - self.start_commit_charge, + memory['SystemCommitCharge'] - self._start_commit_charge, data_type='unimportant') results.AddSummary('processes', 'count', memory['ProcessCount'], data_type='unimportant') @@ -147,7 +151,7 @@ class PageCycler(page_measurement.PageMeasurement): return bool(tab.EvaluateJavaScript('__pc_load_time')) util.WaitFor(_IsDone, 60) - for h in self.histograms: + for h in self._histograms: h.GetValue(page, tab, results) results.Add('page_load_time', 'ms', |