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

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

Issue 11576050: [Telemetry] Add memory and IO stats to page cycler (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address dtu nits Created 7 years, 9 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 import sys
5
4 from telemetry.core import util 6 from telemetry.core import util
5 from telemetry.page import page_benchmark 7 from telemetry.page import page_benchmark
6 8
7 MEMORY_HISTOGRAMS = [ 9 MEMORY_HISTOGRAMS = [
8 {'name': 'V8.MemoryExternalFragmentationTotal', 'units': 'percent'}, 10 {'name': 'V8.MemoryExternalFragmentationTotal', 'units': 'percent'},
9 {'name': 'V8.MemoryHeapSampleTotalCommitted', 'units': 'kb'}, 11 {'name': 'V8.MemoryHeapSampleTotalCommitted', 'units': 'kb'},
10 {'name': 'V8.MemoryHeapSampleTotalUsed', 'units': 'kb'}] 12 {'name': 'V8.MemoryHeapSampleTotalUsed', 'units': 'kb'}]
11 13
12 class PageCycler(page_benchmark.PageBenchmark): 14 class PageCycler(page_benchmark.PageBenchmark):
13 def CustomizeBrowserOptions(self, options): 15 def CustomizeBrowserOptions(self, options):
14 options.AppendExtraBrowserArg('--dom-automation') 16 options.AppendExtraBrowserArg('--dom-automation')
15 options.AppendExtraBrowserArg('--js-flags=--expose_gc') 17 options.AppendExtraBrowserArg('--js-flags=--expose_gc')
18 options.AppendExtraBrowserArg('--no-sandbox')
19
20 def MeasureMemory(self, tab, results):
21 memory = tab.browser.memory_stats
22 if not memory['Browser']:
23 return
24
25 metric = 'rss'
26 if sys.platform == 'win32':
27 metric = 'ws'
28
29 # Browser
30 if 'VM' in memory['Browser']:
31 results.Add('vm_size_f_b', 'bytes', memory['Browser']['VM'],
32 chart_name='vm_size_final_b', data_type='unimportant')
33 if 'VMPeak' in memory['Browser']:
34 results.Add('vm_peak_b', 'bytes', memory['Browser']['VMPeak'],
35 chart_name='vm_pk_b', data_type='unimportant')
36 if 'WorkingSetSize' in memory['Browser']:
37 results.Add('vm_%s_f_b' % metric, 'bytes',
38 memory['Browser']['WorkingSetSize'],
39 chart_name='vm_%s_final_b' % metric, data_type='unimportant')
40 if 'WorkingSetSizePeak' in memory['Browser']:
41 results.Add('%s_peak_b' % metric, 'bytes',
42 memory['Browser']['WorkingSetSizePeak'],
43 chart_name='%s_pk_b' % metric, data_type='unimportant')
44 if 'PrivateDirty' in memory['Browser']:
45 results.Add('vm_private_dirty_f_b', 'bytes',
46 memory['Browser']['PrivateDirty'],
47 chart_name='vm_private_dirty_final_b',
48 data_type='unimportant')
49 if 'ProportionalSetSize' in memory['Browser']:
50 results.Add('vm_pss_f_b', 'bytes',
51 memory['Browser']['ProportionalSetSize'],
52 chart_name='vm_pss_final_b', data_type='unimportant')
53
54 # Renderer
55 if 'VM' in memory['Renderer']:
56 results.Add('vm_size_f_r', 'bytes', memory['Renderer']['VM'],
57 chart_name='vm_size_final_r', data_type='unimportant')
58 if 'VMPeak' in memory['Renderer']:
59 results.Add('vm_peak_r', 'bytes', memory['Browser']['VMPeak'],
60 chart_name='vm_pk_r', data_type='unimportant')
61 if 'WorkingSetSize' in memory['Renderer']:
62 results.Add('vm_%s_f_r' % metric, 'bytes',
63 memory['Renderer']['WorkingSetSize'],
64 chart_name='vm_%s_final_r' % metric, data_type='unimportant')
65 if 'WorkingSetSizePeak' in memory['Renderer']:
66 results.Add('%s_peak_r' % metric, 'bytes',
67 memory['Browser']['WorkingSetSizePeak'],
68 chart_name='%s_pk_r' % metric, data_type='unimportant')
69 if 'PrivateDirty' in memory['Renderer']:
70 results.Add('vm_private_dirty_f_r', 'bytes',
71 memory['Renderer']['PrivateDirty'],
72 chart_name='vm_private_dirty_final_r',
73 data_type='unimportant')
74 if 'ProportionalSetSize' in memory['Renderer']:
75 results.Add('vm_pss_f_r', 'bytes',
76 memory['Renderer']['ProportionalSetSize'],
77 chart_name='vm_pss_final_r', data_type='unimportant')
78
79 # Total
80 if 'VM' in memory['Browser'] and 'WM' in memory['Renderer']:
81 results.Add('vm_size_f_t', 'bytes',
82 memory['Browser']['VM'] + memory['Renderer']['VM'],
83 chart_name='vm_size_final_t', data_type='unimportant')
84 if ('WorkingSetSize' in memory['Browser'] and
85 'WorkingSetSize' in memory['Renderer']):
86 results.Add('vm_%s_f_t' % metric, 'bytes',
87 memory['Browser']['WorkingSetSize'] +
88 memory['Renderer']['WorkingSetSize'],
89 chart_name='vm_%s_final_t' % metric, data_type='unimportant')
90 if ('PrivateDirty' in memory['Browser'] and
91 'PrivateDirty' in memory['Renderer']):
92 results.Add('vm_private_dirty_f_t', 'bytes',
93 memory['Browser']['PrivateDirty'] +
94 memory['Renderer']['PrivateDirty'],
95 chart_name='vm_private_dirty_final_t',
96 data_type='unimportant')
97 if ('ProportionalSetSize' in memory['Browser'] and
98 'ProportionalSetSize' in memory['Renderer']):
99 results.Add('vm_pss_f_t', 'bytes',
100 memory['Browser']['ProportionalSetSize'] +
101 memory['Renderer']['ProportionalSetSize'],
102 chart_name='vm_pss_final_t', data_type='unimportant')
103
104 results.Add('cc', 'kb', memory['SystemCommitCharge'],
105 chart_name='commit_charge', data_type='unimportant')
106 results.Add('proc_', 'count', memory['ProcessCount'],
107 chart_name='processes', data_type='unimportant')
108
109 def MeasureIO(self, tab, results):
110 io_stats = tab.browser.io_stats
111 if not io_stats['Browser']:
112 return
113 results.Add('r_op_b', '', io_stats['Browser']['ReadOperationCount'],
114 chart_name='read_op_b', data_type='unimportant')
115 results.Add('w_op_b', '', io_stats['Browser']['WriteOperationCount'],
116 chart_name='write_op_b', data_type='unimportant')
117 results.Add('r_b', 'kb', io_stats['Browser']['ReadTransferCount'],
118 chart_name='read_byte_b', data_type='unimportant')
119 results.Add('w_b', 'kb', io_stats['Browser']['WriteTransferCount'],
120 chart_name='write_byte_b', data_type='unimportant')
121 results.Add('r_op_r', '', io_stats['Renderer']['ReadOperationCount'],
122 chart_name='read_op_r', data_type='unimportant')
123 results.Add('w_op_r', '', io_stats['Renderer']['WriteOperationCount'],
124 chart_name='write_op_r', data_type='unimportant')
125 results.Add('r_r', 'kb', io_stats['Renderer']['ReadOperationCount'],
126 chart_name='read_byte_r', data_type='unimportant')
127 results.Add('w_r', 'kb', io_stats['Renderer']['WriteOperationCount'],
128 chart_name='write_byte_r', data_type='unimportant')
16 129
17 def MeasurePage(self, _, tab, results): 130 def MeasurePage(self, _, tab, results):
18 def _IsDone(): 131 def _IsDone():
19 return tab.GetCookieByName('__pc_done') == '1' 132 return tab.GetCookieByName('__pc_done') == '1'
20 util.WaitFor(_IsDone, 1200, poll_interval=5) 133 util.WaitFor(_IsDone, 1200, poll_interval=5)
21 print 'Pages: [%s]' % tab.GetCookieByName('__pc_pages') 134 print 'Pages: [%s]' % tab.GetCookieByName('__pc_pages')
22 135
23 # TODO(tonyg): Get IO and memory statistics. 136 self.MeasureMemory(tab, results)
137 self.MeasureIO(tab, results)
24 138
25 for histogram in MEMORY_HISTOGRAMS: 139 for histogram in MEMORY_HISTOGRAMS:
26 name = histogram['name'] 140 name = histogram['name']
27 data = tab.EvaluateJavaScript( 141 data = tab.EvaluateJavaScript(
28 'window.domAutomationController.getHistogram("%s")' % name) 142 'window.domAutomationController.getHistogram("%s")' % name)
29 results.Add(name, histogram['units'], data, data_type='histogram') 143 results.Add(name, histogram['units'], data, data_type='histogram')
30 144
31 def _IsNavigatedToReport(): 145 def _IsNavigatedToReport():
32 return tab.GetCookieByName('__navigated_to_report') == '1' 146 return tab.GetCookieByName('__navigated_to_report') == '1'
33 util.WaitFor(_IsNavigatedToReport, 60, poll_interval=5) 147 util.WaitFor(_IsNavigatedToReport, 60, poll_interval=5)
34 timings = tab.EvaluateJavaScript('__get_timings()').split(',') 148 timings = tab.EvaluateJavaScript('__get_timings()').split(',')
35 results.Add('t', 'ms', [int(t) for t in timings], chart_name='times') 149 results.Add('t', 'ms', [int(t) for t in timings], chart_name='times')
36 150
37 # TODO(tonyg): Add version that runs with extension profile. 151 # TODO(tonyg): Add version that runs with extension profile.
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