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

Side by Side Diff: tools/perf/metrics/memory.py

Issue 809393002: Added support for improvement_direction to relevant values, which is propogated to chartjson. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years 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 2013 The Chromium Authors. All rights reserved. 1 # Copyright 2013 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 import sys 5 import sys
6 6
7 from metrics import Metric 7 from metrics import Metric
8 from telemetry.value import histogram 8 from telemetry.value import histogram
9 from telemetry.value import histogram_util 9 from telemetry.value import histogram_util
10 from telemetry.value import scalar 10 from telemetry.value import scalar
11 11
12 12
13 _HISTOGRAMS = [ 13 _HISTOGRAMS = [
14 { 14 {
15 'name': 'V8.MemoryExternalFragmentationTotal', 'units': 'percent', 15 'name': 'V8.MemoryExternalFragmentationTotal', 'units': 'percent',
16 'display_name': 'V8_MemoryExternalFragmentationTotal', 16 'display_name': 'V8_MemoryExternalFragmentationTotal',
17 'type': histogram_util.RENDERER_HISTOGRAM, 17 'type': histogram_util.RENDERER_HISTOGRAM,
18 'description': 'Total external memory fragmentation after each GC in ' 18 'description': 'Total external memory fragmentation after each GC in '
19 'percent.', 19 'percent.',
20 'higher_is_better': False,
20 }, 21 },
21 { 22 {
22 'name': 'V8.MemoryHeapSampleTotalCommitted', 'units': 'kb', 23 'name': 'V8.MemoryHeapSampleTotalCommitted', 'units': 'kb',
23 'display_name': 'V8_MemoryHeapSampleTotalCommitted', 24 'display_name': 'V8_MemoryHeapSampleTotalCommitted',
24 'type': histogram_util.RENDERER_HISTOGRAM, 25 'type': histogram_util.RENDERER_HISTOGRAM,
25 'description': 'The total size of committed memory used by V8 after ' 26 'description': 'The total size of committed memory used by V8 after '
26 'each GC in KB.' 27 'each GC in KB.',
28 'higher_is_better': False,
27 }, 29 },
28 { 30 {
29 'name': 'V8.MemoryHeapSampleTotalUsed', 'units': 'kb', 31 'name': 'V8.MemoryHeapSampleTotalUsed', 'units': 'kb',
30 'display_name': 'V8_MemoryHeapSampleTotalUsed', 32 'display_name': 'V8_MemoryHeapSampleTotalUsed',
31 'type': histogram_util.RENDERER_HISTOGRAM, 33 'type': histogram_util.RENDERER_HISTOGRAM,
32 'description': 'The total size of live memory used by V8 after each ' 34 'description': 'The total size of live memory used by V8 after each '
33 'GC in KB.', 35 'GC in KB.',
36 'higher_is_better': False,
34 }, 37 },
35 { 38 {
36 'name': 'V8.MemoryHeapSampleMaximumCommitted', 'units': 'kb', 39 'name': 'V8.MemoryHeapSampleMaximumCommitted', 'units': 'kb',
37 'display_name': 'V8_MemoryHeapSampleMaximumCommitted', 40 'display_name': 'V8_MemoryHeapSampleMaximumCommitted',
38 'type': histogram_util.RENDERER_HISTOGRAM 41 'type': histogram_util.RENDERER_HISTOGRAM,
42 'higher_is_better': False,
39 }, 43 },
40 { 44 {
41 'name': 'Memory.RendererUsed', 'units': 'kb', 45 'name': 'Memory.RendererUsed', 'units': 'kb',
42 'display_name': 'Memory_RendererUsed', 46 'display_name': 'Memory_RendererUsed',
43 'type': histogram_util.RENDERER_HISTOGRAM 47 'type': histogram_util.RENDERER_HISTOGRAM,
48 'higher_is_better': False,
44 }, 49 },
45 { 50 {
46 'name': 'Memory.BrowserUsed', 'units': 'kb', 51 'name': 'Memory.BrowserUsed', 'units': 'kb',
47 'display_name': 'Memory_BrowserUsed', 52 'display_name': 'Memory_BrowserUsed',
48 'type': histogram_util.BROWSER_HISTOGRAM 53 'type': histogram_util.BROWSER_HISTOGRAM,
54 'higher_is_better': False,
49 }, 55 },
50 ] 56 ]
51 57
52 class MemoryMetric(Metric): 58 class MemoryMetric(Metric):
53 """MemoryMetric gathers memory statistics from the browser object. 59 """MemoryMetric gathers memory statistics from the browser object.
54 60
55 This includes both per-page histogram stats, most about javascript 61 This includes both per-page histogram stats, most about javascript
56 memory usage, and overall memory stats from the system for the whole 62 memory usage, and overall memory stats from the system for the whole
57 test run.""" 63 test run."""
58 64
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 def AddResults(self, tab, results, trace_name=None): 120 def AddResults(self, tab, results, trace_name=None):
115 """Add results for this page to the results object.""" 121 """Add results for this page to the results object."""
116 assert self._histogram_delta, 'Must call Stop() first' 122 assert self._histogram_delta, 'Must call Stop() first'
117 for h in _HISTOGRAMS: 123 for h in _HISTOGRAMS:
118 # Histogram data may not be available 124 # Histogram data may not be available
119 if h['name'] not in self._histogram_start: 125 if h['name'] not in self._histogram_start:
120 continue 126 continue
121 results.AddValue(histogram.HistogramValue( 127 results.AddValue(histogram.HistogramValue(
122 results.current_page, h['display_name'], h['units'], 128 results.current_page, h['display_name'], h['units'],
123 raw_value_json=self._histogram_delta[h['name']], important=False, 129 raw_value_json=self._histogram_delta[h['name']], important=False,
124 description=h.get('description'))) 130 description=h.get('description'),
131 higher_is_better=h.get('higher_is_better')))
125 self._memory_stats = self._browser.memory_stats 132 self._memory_stats = self._browser.memory_stats
126 if not self._memory_stats['Browser']: 133 if not self._memory_stats['Browser']:
127 return 134 return
128 AddResultsForProcesses(results, self._memory_stats, 135 AddResultsForProcesses(results, self._memory_stats,
129 metric_trace_name=trace_name) 136 metric_trace_name=trace_name)
130 137
131 if self._start_commit_charge: 138 if self._start_commit_charge:
132 end_commit_charge = self._memory_stats['SystemCommitCharge'] 139 end_commit_charge = self._memory_stats['SystemCommitCharge']
133 commit_charge_difference = end_commit_charge - self._start_commit_charge 140 commit_charge_difference = end_commit_charge - self._start_commit_charge
134 results.AddValue(scalar.ScalarValue( 141 results.AddValue(scalar.ScalarValue(
135 results.current_page, 142 results.current_page,
136 'commit_charge.' + (trace_name or 'commit_charge'), 143 'commit_charge.' + (trace_name or 'commit_charge'),
137 'kb', commit_charge_difference, important=False, 144 'kb', commit_charge_difference, important=False,
138 description='System commit charge (committed memory pages).')) 145 description='System commit charge (committed memory pages).',
146 higher_is_better=False))
139 results.AddValue(scalar.ScalarValue( 147 results.AddValue(scalar.ScalarValue(
140 results.current_page, 'processes.' + (trace_name or 'processes'), 148 results.current_page, 'processes.' + (trace_name or 'processes'),
141 'count', self._memory_stats['ProcessCount'], important=False, 149 'count', self._memory_stats['ProcessCount'], important=False,
142 description='Number of processes used by Chrome.')) 150 description='Number of processes used by Chrome.',
151 higher_is_better=False))
143 152
144 153
145 def AddResultsForProcesses(results, memory_stats, chart_trace_name='final', 154 def AddResultsForProcesses(results, memory_stats, chart_trace_name='final',
146 metric_trace_name=None, 155 metric_trace_name=None,
147 exclude_metrics=None): 156 exclude_metrics=None):
148 """Adds memory stats for browser, renderer and gpu processes. 157 """Adds memory stats for browser, renderer and gpu processes.
149 158
150 Args: 159 Args:
151 results: A telemetry.results.PageTestResults object. 160 results: A telemetry.results.PageTestResults object.
152 memory_stats: System memory stats collected. 161 memory_stats: System memory stats collected.
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 values.append(stats[value_name_memory]) 195 values.append(stats[value_name_memory])
187 if values: 196 if values:
188 if metric_trace_name: 197 if metric_trace_name:
189 current_trace = '%s_%s' % (metric_trace_name, process_type_trace) 198 current_trace = '%s_%s' % (metric_trace_name, process_type_trace)
190 chart_name = value_name_trace 199 chart_name = value_name_trace
191 else: 200 else:
192 current_trace = '%s_%s' % (value_name_trace, process_type_trace) 201 current_trace = '%s_%s' % (value_name_trace, process_type_trace)
193 chart_name = current_trace 202 chart_name = current_trace
194 results.AddValue(scalar.ScalarValue( 203 results.AddValue(scalar.ScalarValue(
195 results.current_page, '%s.%s' % (chart_name, current_trace), 'kb', 204 results.current_page, '%s.%s' % (chart_name, current_trace), 'kb',
196 sum(values) / 1024, important=False, description=description)) 205 sum(values) / 1024, important=False, description=description,
206 higher_is_better=False))
197 207
198 AddResult('VM', 'vm_%s_size' % chart_trace_name, 208 AddResult('VM', 'vm_%s_size' % chart_trace_name,
199 'Virtual Memory Size (address space allocated).') 209 'Virtual Memory Size (address space allocated).')
200 AddResult('WorkingSetSize', 'vm_%s_%s_size' % (metric, chart_trace_name), 210 AddResult('WorkingSetSize', 'vm_%s_%s_size' % (metric, chart_trace_name),
201 'Working Set Size (Windows) or Resident Set Size (other ' 211 'Working Set Size (Windows) or Resident Set Size (other '
202 'platforms).') 212 'platforms).')
203 AddResult('PrivateDirty', 'vm_private_dirty_%s' % chart_trace_name, 213 AddResult('PrivateDirty', 'vm_private_dirty_%s' % chart_trace_name,
204 'Private Dirty is basically the amount of RAM inside the ' 214 'Private Dirty is basically the amount of RAM inside the '
205 'process that can not be paged to disk (it is not backed by the ' 215 'process that can not be paged to disk (it is not backed by the '
206 'same data on disk), and is not shared with any other ' 216 'same data on disk), and is not shared with any other '
(...skipping 16 matching lines...) Expand all
223 AddResult('VMPeak', 'vm_peak_size', 233 AddResult('VMPeak', 'vm_peak_size',
224 'The peak Virtual Memory Size (address space allocated) usage ' 234 'The peak Virtual Memory Size (address space allocated) usage '
225 'achieved by the * process.') 235 'achieved by the * process.')
226 AddResult('WorkingSetSizePeak', '%s_peak_size' % metric, 236 AddResult('WorkingSetSizePeak', '%s_peak_size' % metric,
227 'Peak Working Set Size.') 237 'Peak Working Set Size.')
228 238
229 AddResultsForProcessTypes(['Browser'], 'browser') 239 AddResultsForProcessTypes(['Browser'], 'browser')
230 AddResultsForProcessTypes(['Renderer'], 'renderer') 240 AddResultsForProcessTypes(['Renderer'], 'renderer')
231 AddResultsForProcessTypes(['Gpu'], 'gpu') 241 AddResultsForProcessTypes(['Gpu'], 'gpu')
232 AddResultsForProcessTypes(['Browser', 'Renderer', 'Gpu'], 'total') 242 AddResultsForProcessTypes(['Browser', 'Renderer', 'Gpu'], 'total')
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698