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

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: Add abstract base platform_backend 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
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')
16 18
19 def MeasureMemory(self, tab, results):
20 memory = tab.browser.memory_stats
21 if not memory['Browser']:
22 return
23
24 metric = 'rss'
25 if sys.platform == 'win32':
26 metric = 'ws'
27
28 # Browser
29 if memory['Browser'].has_key('VM'):
dtu 2013/03/04 23:26:15 if 'VM' in memory['Browser']: has_key is deprecate
30 results.Add('vm_size_f_b', 'bytes', memory['Browser']['VM'],
31 chart_name='vm_size_final_b', data_type='unimportant')
32 if memory['Browser'].has_key('VMPeak'):
33 results.Add('vm_peak_b', 'bytes', memory['Browser']['VMPeak'],
34 chart_name='vm_pk_b', data_type='unimportant')
35 if memory['Browser'].has_key('WorkingSetSize'):
36 results.Add('vm_%s_f_b' % metric, 'bytes',
37 memory['Browser']['WorkingSetSize'],
38 chart_name='vm_%s_final_b' % metric, data_type='unimportant')
39 if memory['Browser'].has_key('WorkingSetSizePeak'):
40 results.Add('%s_peak_b' % metric, 'bytes',
41 memory['Browser']['WorkingSetSizePeak'],
42 chart_name='%s_pk_b' % metric, data_type='unimportant')
43 if memory['Browser'].has_key('PrivateDirty'):
44 results.Add('vm_private_dirty_f_b', 'bytes',
45 memory['Browser']['PrivateDirty'],
46 chart_name='vm_private_dirty_final_b',
47 data_type='unimportant')
48 if memory['Browser'].has_key('ProportionalSetSize'):
49 results.Add('vm_pss_f_b', 'bytes',
50 memory['Browser']['ProportionalSetSize'],
51 chart_name='vm_pss_final_b', data_type='unimportant')
52
53 # Renderer
54 if memory['Renderer'].has_key('VM'):
55 results.Add('vm_size_f_r', 'bytes', memory['Renderer']['VM'],
56 chart_name='vm_size_final_r', data_type='unimportant')
57 if memory['Renderer'].has_key('VMPeak'):
58 results.Add('vm_peak_r', 'bytes', memory['Browser']['VMPeak'],
59 chart_name='vm_pk_r', data_type='unimportant')
60 if memory['Renderer'].has_key('WorkingSetSize'):
61 results.Add('vm_%s_f_r' % metric, 'bytes',
62 memory['Renderer']['WorkingSetSize'],
63 chart_name='vm_%s_final_r' % metric, data_type='unimportant')
64 if memory['Renderer'].has_key('WorkingSetSizePeak'):
65 results.Add('%s_peak_r' % metric, 'bytes',
66 memory['Browser']['WorkingSetSizePeak'],
67 chart_name='%s_pk_r' % metric, data_type='unimportant')
68 if memory['Renderer'].has_key('PrivateDirty'):
69 results.Add('vm_private_dirty_f_r', 'bytes',
70 memory['Renderer']['PrivateDirty'],
71 chart_name='vm_private_dirty_final_r',
72 data_type='unimportant')
73 if memory['Renderer'].has_key('ProportionalSetSize'):
74 results.Add('vm_pss_f_r', 'bytes',
75 memory['Renderer']['ProportionalSetSize'],
76 chart_name='vm_pss_final_r', data_type='unimportant')
77
78 # Total
79 if (memory['Browser'].has_key('VM') and
80 memory['Renderer'].has_key('VM')):
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 (memory['Browser'].has_key('WorkingSetSize') and
85 memory['Renderer'].has_key('WorkingSetSize')):
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 (memory['Browser'].has_key('PrivateDirty') and
91 memory['Renderer'].has_key('PrivateDirty')):
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 (memory['Browser'].has_key('ProportionalSetSize') and
98 memory['Renderer'].has_key('ProportionalSetSize')):
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')
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

Powered by Google App Engine
This is Rietveld 408576698