Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(179)

Side by Side Diff: tools/perf/perf_tools/page_cycler.py

Issue 16373012: [telemetry] Simplify the way PageRunner is called. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add DidStartHTTPServer() and re-add WillRunPageSet() Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | tools/telemetry/telemetry/core/browser.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """The page cycler measurement. 5 """The page cycler measurement.
6 6
7 This measurement registers a window load handler in which is forces a layout and 7 This measurement registers a window load handler in which is forces a layout and
8 then records the value of performance.now(). This call to now() measures the 8 then records the value of performance.now(). This call to now() measures the
9 time from navigationStart (immediately after the previous page's beforeunload 9 time from navigationStart (immediately after the previous page's beforeunload
10 event) until after the layout in the page's load event. In addition, two garbage 10 event) until after the layout in the page's load event. In addition, two garbage
(...skipping 10 matching lines...) Expand all
21 from perf_tools import histogram_metric 21 from perf_tools import histogram_metric
22 from telemetry.core import util 22 from telemetry.core import util
23 from telemetry.page import page_measurement 23 from telemetry.page import page_measurement
24 24
25 MEMORY_HISTOGRAMS = [ 25 MEMORY_HISTOGRAMS = [
26 {'name': 'V8.MemoryExternalFragmentationTotal', 'units': 'percent'}, 26 {'name': 'V8.MemoryExternalFragmentationTotal', 'units': 'percent'},
27 {'name': 'V8.MemoryHeapSampleTotalCommitted', 'units': 'kb'}, 27 {'name': 'V8.MemoryHeapSampleTotalCommitted', 'units': 'kb'},
28 {'name': 'V8.MemoryHeapSampleTotalUsed', 'units': 'kb'}] 28 {'name': 'V8.MemoryHeapSampleTotalUsed', 'units': 'kb'}]
29 29
30 class PageCycler(page_measurement.PageMeasurement): 30 class PageCycler(page_measurement.PageMeasurement):
31 def __init__(self, *args, **kwargs):
32 super(PageCycler, self).__init__(*args, **kwargs)
33
34 with open(os.path.join(os.path.dirname(__file__),
35 'page_cycler.js'), 'r') as f:
36 self._page_cycler_js = f.read()
37
38 self._start_commit_charge = None
39 self._histograms = None
40
31 def AddCommandLineOptions(self, parser): 41 def AddCommandLineOptions(self, parser):
32 # The page cyclers should default to 10 iterations. In order to change the 42 # The page cyclers should default to 10 iterations. In order to change the
33 # default of an option, we must remove and re-add it. 43 # default of an option, we must remove and re-add it.
34 pageset_repeat_option = parser.get_option('--pageset-repeat') 44 pageset_repeat_option = parser.get_option('--pageset-repeat')
35 pageset_repeat_option.default = 10 45 pageset_repeat_option.default = 10
36 parser.remove_option('--pageset-repeat') 46 parser.remove_option('--pageset-repeat')
37 parser.add_option(pageset_repeat_option) 47 parser.add_option(pageset_repeat_option)
38 48
39 def WillRunPageSet(self, tab, results): 49 def SetUpBrowser(self, browser):
40 # Avoid paying for a cross-renderer navigation on the first page on legacy 50 self._start_commit_charge = browser.memory_stats['SystemCommitCharge']
41 # page cyclers which use the filesystem.
42 if tab.browser.http_server:
43 tab.Navigate(tab.browser.http_server.UrlOf('nonexistent.html'))
44 51
45 with open(os.path.join(os.path.dirname(__file__), 52 self._histograms = [histogram_metric.HistogramMetric(
46 'page_cycler.js'), 'r') as f:
47 self.page_cycler_js = f.read() # pylint: disable=W0201
48
49 # pylint: disable=W0201
50 self.start_commit_charge = tab.browser.memory_stats['SystemCommitCharge']
51
52 # pylint: disable=W0201
53 self.histograms = [histogram_metric.HistogramMetric(
54 h, histogram_metric.RENDERER_HISTOGRAM) 53 h, histogram_metric.RENDERER_HISTOGRAM)
55 for h in MEMORY_HISTOGRAMS] 54 for h in MEMORY_HISTOGRAMS]
56 55
56 def DidStartHTTPServer(self, tab):
57 # Avoid paying for a cross-renderer navigation on the first page on legacy
58 # page cyclers which use the filesystem.
59 tab.Navigate(tab.browser.http_server.UrlOf('nonexistent.html'))
60
57 def WillNavigateToPage(self, page, tab): 61 def WillNavigateToPage(self, page, tab):
58 page.script_to_evaluate_on_commit = self.page_cycler_js 62 page.script_to_evaluate_on_commit = self._page_cycler_js
59 63
60 def DidNavigateToPage(self, page, tab): 64 def DidNavigateToPage(self, page, tab):
61 for h in self.histograms: 65 for h in self._histograms:
62 h.Start(page, tab) 66 h.Start(page, tab)
63 67
64 def CustomizeBrowserOptions(self, options): 68 def CustomizeBrowserOptions(self, options):
65 options.AppendExtraBrowserArg('--enable-stats-collection-bindings') 69 options.AppendExtraBrowserArg('--enable-stats-collection-bindings')
66 options.AppendExtraBrowserArg('--js-flags=--expose_gc') 70 options.AppendExtraBrowserArg('--js-flags=--expose_gc')
67 options.AppendExtraBrowserArg('--no-sandbox') 71 options.AppendExtraBrowserArg('--no-sandbox')
68 72
69 # Old commandline flags used for reference builds. 73 # Old commandline flags used for reference builds.
70 options.AppendExtraBrowserArg('--dom-automation') 74 options.AppendExtraBrowserArg('--dom-automation')
71 75
(...skipping 28 matching lines...) Expand all
100 AddSummary('ProportionalSetSize', 'vm_proportional_set_size_final_') 104 AddSummary('ProportionalSetSize', 'vm_proportional_set_size_final_')
101 AddSummary('VMPeak', 'vm_peak_size_') 105 AddSummary('VMPeak', 'vm_peak_size_')
102 AddSummary('WorkingSetSizePeak', '%s_peak_size_' % metric) 106 AddSummary('WorkingSetSizePeak', '%s_peak_size_' % metric)
103 107
104 AddSummariesForProcessTypes(['Browser'], 'browser') 108 AddSummariesForProcessTypes(['Browser'], 'browser')
105 AddSummariesForProcessTypes(['Renderer'], 'renderer') 109 AddSummariesForProcessTypes(['Renderer'], 'renderer')
106 AddSummariesForProcessTypes(['Gpu'], 'gpu') 110 AddSummariesForProcessTypes(['Gpu'], 'gpu')
107 AddSummariesForProcessTypes(['Browser', 'Renderer', 'Gpu'], 'total') 111 AddSummariesForProcessTypes(['Browser', 'Renderer', 'Gpu'], 'total')
108 112
109 results.AddSummary('commit_charge', 'kb', 113 results.AddSummary('commit_charge', 'kb',
110 memory['SystemCommitCharge'] - self.start_commit_charge, 114 memory['SystemCommitCharge'] - self._start_commit_charge,
111 data_type='unimportant') 115 data_type='unimportant')
112 results.AddSummary('processes', 'count', memory['ProcessCount'], 116 results.AddSummary('processes', 'count', memory['ProcessCount'],
113 data_type='unimportant') 117 data_type='unimportant')
114 118
115 def MeasureIO(self, tab, results): 119 def MeasureIO(self, tab, results):
116 io_stats = tab.browser.io_stats 120 io_stats = tab.browser.io_stats
117 if not io_stats['Browser']: 121 if not io_stats['Browser']:
118 return 122 return
119 123
120 def AddSummariesForProcessType(process_type_io, process_type_trace): 124 def AddSummariesForProcessType(process_type_io, process_type_trace):
(...skipping 19 matching lines...) Expand all
140 data_type='unimportant') 144 data_type='unimportant')
141 AddSummariesForProcessType('Browser', 'browser') 145 AddSummariesForProcessType('Browser', 'browser')
142 AddSummariesForProcessType('Renderer', 'renderer') 146 AddSummariesForProcessType('Renderer', 'renderer')
143 AddSummariesForProcessType('Gpu', 'gpu') 147 AddSummariesForProcessType('Gpu', 'gpu')
144 148
145 def MeasurePage(self, page, tab, results): 149 def MeasurePage(self, page, tab, results):
146 def _IsDone(): 150 def _IsDone():
147 return bool(tab.EvaluateJavaScript('__pc_load_time')) 151 return bool(tab.EvaluateJavaScript('__pc_load_time'))
148 util.WaitFor(_IsDone, 60) 152 util.WaitFor(_IsDone, 60)
149 153
150 for h in self.histograms: 154 for h in self._histograms:
151 h.GetValue(page, tab, results) 155 h.GetValue(page, tab, results)
152 156
153 results.Add('page_load_time', 'ms', 157 results.Add('page_load_time', 'ms',
154 int(float(tab.EvaluateJavaScript('__pc_load_time'))), 158 int(float(tab.EvaluateJavaScript('__pc_load_time'))),
155 chart_name='times') 159 chart_name='times')
156 160
157 def DidRunPageSet(self, tab, results): 161 def DidRunPageSet(self, tab, results):
158 self.MeasureMemory(tab, results) 162 self.MeasureMemory(tab, results)
159 self.MeasureIO(tab, results) 163 self.MeasureIO(tab, results)
OLDNEW
« no previous file with comments | « no previous file | tools/telemetry/telemetry/core/browser.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698