OLD | NEW |
---|---|
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. |
OLD | NEW |