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

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

Issue 22492004: Move memory-related histogram data collection to metrics/memory.py (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 4 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
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
11 collections are performed in between the page loads (in the beforeunload event). 11 collections are performed in between the page loads (in the beforeunload event).
12 This extra garbage collection time is not included in the measurement times. 12 This extra garbage collection time is not included in the measurement times.
13 13
14 Finally, various memory and IO statistics are gathered at the very end of 14 Finally, various memory and IO statistics are gathered at the very end of
15 cycling all pages. 15 cycling all pages.
16 """ 16 """
17 17
18 import os 18 import os
19 import sys 19 import sys
20 20
21 from metrics import histogram
22 from metrics import memory 21 from metrics import memory
23 from telemetry.core import util 22 from telemetry.core import util
24 from telemetry.page import page_measurement 23 from telemetry.page import page_measurement
25 24
26
27 MEMORY_HISTOGRAMS = [
28 {'name': 'V8.MemoryExternalFragmentationTotal', 'units': 'percent'},
29 {'name': 'V8.MemoryHeapSampleTotalCommitted', 'units': 'kb'},
30 {'name': 'V8.MemoryHeapSampleTotalUsed', 'units': 'kb'}]
31
32
33 class PageCycler(page_measurement.PageMeasurement): 25 class PageCycler(page_measurement.PageMeasurement):
34 def __init__(self, *args, **kwargs): 26 def __init__(self, *args, **kwargs):
35 super(PageCycler, self).__init__(*args, **kwargs) 27 super(PageCycler, self).__init__(*args, **kwargs)
36 28
37 with open(os.path.join(os.path.dirname(__file__), 29 with open(os.path.join(os.path.dirname(__file__),
38 'page_cycler.js'), 'r') as f: 30 'page_cycler.js'), 'r') as f:
39 self._page_cycler_js = f.read() 31 self._page_cycler_js = f.read()
40 32
41 self._memory_metric = None 33 self._memory_metric = None
42 self._histograms = None
43 34
44 def AddCommandLineOptions(self, parser): 35 def AddCommandLineOptions(self, parser):
45 # The page cyclers should default to 10 iterations. In order to change the 36 # The page cyclers should default to 10 iterations. In order to change the
46 # default of an option, we must remove and re-add it. 37 # default of an option, we must remove and re-add it.
47 # TODO: Remove this after transition to run_benchmark. 38 # TODO: Remove this after transition to run_benchmark.
48 pageset_repeat_option = parser.get_option('--pageset-repeat') 39 pageset_repeat_option = parser.get_option('--pageset-repeat')
49 pageset_repeat_option.default = 10 40 pageset_repeat_option.default = 10
50 parser.remove_option('--pageset-repeat') 41 parser.remove_option('--pageset-repeat')
51 parser.add_option(pageset_repeat_option) 42 parser.add_option(pageset_repeat_option)
52 43
53 def DidStartBrowser(self, browser): 44 def DidStartBrowser(self, browser):
54 """Initialize metrics once right after the browser has been launched.""" 45 """Initialize metrics once right after the browser has been launched."""
55 self._memory_metric = memory.MemoryMetric(browser) 46 self._memory_metric = memory.MemoryMetric(browser)
56 self._memory_metric.Start()
57 self._histograms = [histogram.HistogramMetric(
58 h, histogram.RENDERER_HISTOGRAM)
59 for h in MEMORY_HISTOGRAMS]
60 47
61 def DidStartHTTPServer(self, tab): 48 def DidStartHTTPServer(self, tab):
62 # Avoid paying for a cross-renderer navigation on the first page on legacy 49 # Avoid paying for a cross-renderer navigation on the first page on legacy
63 # page cyclers which use the filesystem. 50 # page cyclers which use the filesystem.
64 tab.Navigate(tab.browser.http_server.UrlOf('nonexistent.html')) 51 tab.Navigate(tab.browser.http_server.UrlOf('nonexistent.html'))
65 52
66 def WillNavigateToPage(self, page, tab): 53 def WillNavigateToPage(self, page, tab):
67 page.script_to_evaluate_on_commit = self._page_cycler_js 54 page.script_to_evaluate_on_commit = self._page_cycler_js
68 55
69 def DidNavigateToPage(self, page, tab): 56 def DidNavigateToPage(self, page, tab):
70 for h in self._histograms: 57 self._memory_metric.Start(page, tab)
71 h.Start(page, tab)
72 58
73 def CustomizeBrowserOptions(self, options): 59 def CustomizeBrowserOptions(self, options):
74 options.AppendExtraBrowserArg('--enable-stats-collection-bindings') 60 options.AppendExtraBrowserArg('--enable-stats-collection-bindings')
75 options.AppendExtraBrowserArg('--js-flags=--expose_gc') 61 options.AppendExtraBrowserArg('--js-flags=--expose_gc')
76 options.AppendExtraBrowserArg('--no-sandbox') 62 options.AppendExtraBrowserArg('--no-sandbox')
77 63
78 # Old commandline flags used for reference builds. 64 # Old commandline flags used for reference builds.
79 options.AppendExtraBrowserArg('--dom-automation') 65 options.AppendExtraBrowserArg('--dom-automation')
80 66
81 # Temporarily disable typical_25 page set on mac. 67 # Temporarily disable typical_25 page set on mac.
(...skipping 25 matching lines...) Expand all
107 if 'WriteTransferCount' in io_stats[process_type_io]: 93 if 'WriteTransferCount' in io_stats[process_type_io]:
108 results.AddSummary('write_bytes_' + process_type_trace, 'kb', 94 results.AddSummary('write_bytes_' + process_type_trace, 'kb',
109 io_stats[process_type_io] 95 io_stats[process_type_io]
110 ['WriteTransferCount'] / 1024, 96 ['WriteTransferCount'] / 1024,
111 data_type='unimportant') 97 data_type='unimportant')
112 AddSummariesForProcessType('Browser', 'browser') 98 AddSummariesForProcessType('Browser', 'browser')
113 AddSummariesForProcessType('Renderer', 'renderer') 99 AddSummariesForProcessType('Renderer', 'renderer')
114 AddSummariesForProcessType('Gpu', 'gpu') 100 AddSummariesForProcessType('Gpu', 'gpu')
115 101
116 def MeasurePage(self, page, tab, results): 102 def MeasurePage(self, page, tab, results):
103 self._memory_metric.Stop(page, tab)
104 self._memory_metric.AddResults(tab, results)
tonyg 2013/08/09 01:43:44 I think these need to be after we wait for the pag
qyearsley 2013/08/09 16:43:15 Yeah -- that's how it has been, so if want to keep
105
117 def _IsDone(): 106 def _IsDone():
118 return bool(tab.EvaluateJavaScript('__pc_load_time')) 107 return bool(tab.EvaluateJavaScript('__pc_load_time'))
119 util.WaitFor(_IsDone, 60) 108 util.WaitFor(_IsDone, 60)
120
121 for h in self._histograms:
122 h.GetValue(page, tab, results)
123
124 results.Add('page_load_time', 'ms', 109 results.Add('page_load_time', 'ms',
125 int(float(tab.EvaluateJavaScript('__pc_load_time'))), 110 int(float(tab.EvaluateJavaScript('__pc_load_time'))),
126 chart_name='times') 111 chart_name='times')
127 112
128 def DidRunTest(self, tab, results): 113 def DidRunTest(self, tab, results):
129 self._memory_metric.Stop() 114 self._memory_metric.AddSummaryResults(results)
130 self._memory_metric.AddResults(tab, results)
131 self.MeasureIO(tab, results) 115 self.MeasureIO(tab, results)
132 116
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698