| OLD | NEW |
| 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 histogram_util | 7 from metrics import histogram_util |
| 8 from metrics import Metric | 8 from metrics import Metric |
| 9 from telemetry.value import histogram | 9 from telemetry.value import histogram |
| 10 from telemetry.value import scalar | 10 from telemetry.value import scalar |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 52 class MemoryMetric(Metric): | 52 class MemoryMetric(Metric): |
| 53 """MemoryMetric gathers memory statistics from the browser object. | 53 """MemoryMetric gathers memory statistics from the browser object. |
| 54 | 54 |
| 55 This includes both per-page histogram stats, most about javascript | 55 This includes both per-page histogram stats, most about javascript |
| 56 memory usage, and overall memory stats from the system for the whole | 56 memory usage, and overall memory stats from the system for the whole |
| 57 test run.""" | 57 test run.""" |
| 58 | 58 |
| 59 def __init__(self, browser): | 59 def __init__(self, browser): |
| 60 super(MemoryMetric, self).__init__() | 60 super(MemoryMetric, self).__init__() |
| 61 self._browser = browser | 61 self._browser = browser |
| 62 self._start_commit_charge = self._browser.memory_stats['SystemCommitCharge'] | 62 start_memory_stats = self._browser.memory_stats |
| 63 self._start_commit_charge = None |
| 64 if 'SystemCommitCharge' in start_memory_stats: |
| 65 self._start_commit_charge = start_memory_stats['SystemCommitCharge'] |
| 63 self._memory_stats = None | 66 self._memory_stats = None |
| 64 self._histogram_start = dict() | 67 self._histogram_start = dict() |
| 65 self._histogram_delta = dict() | 68 self._histogram_delta = dict() |
| 66 | 69 |
| 67 @classmethod | 70 @classmethod |
| 68 def CustomizeBrowserOptions(cls, options): | 71 def CustomizeBrowserOptions(cls, options): |
| 69 options.AppendExtraBrowserArgs([ | 72 options.AppendExtraBrowserArgs([ |
| 70 '--enable-stats-collection-bindings', | 73 '--enable-stats-collection-bindings', |
| 71 # For a hard-coded set of Google pages (such as GMail), we produce | 74 # For a hard-coded set of Google pages (such as GMail), we produce |
| 72 # custom memory histograms (V8.Something_gmail) instead of the generic | 75 # custom memory histograms (V8.Something_gmail) instead of the generic |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 118 results.AddValue(histogram.HistogramValue( | 121 results.AddValue(histogram.HistogramValue( |
| 119 results.current_page, h['display_name'], h['units'], | 122 results.current_page, h['display_name'], h['units'], |
| 120 raw_value_json=self._histogram_delta[h['name']], important=False, | 123 raw_value_json=self._histogram_delta[h['name']], important=False, |
| 121 description=h.get('description'))) | 124 description=h.get('description'))) |
| 122 self._memory_stats = self._browser.memory_stats | 125 self._memory_stats = self._browser.memory_stats |
| 123 if not self._memory_stats['Browser']: | 126 if not self._memory_stats['Browser']: |
| 124 return | 127 return |
| 125 AddResultsForProcesses(results, self._memory_stats, | 128 AddResultsForProcesses(results, self._memory_stats, |
| 126 metric_trace_name=trace_name) | 129 metric_trace_name=trace_name) |
| 127 | 130 |
| 128 end_commit_charge = self._memory_stats['SystemCommitCharge'] | 131 if self._start_commit_charge: |
| 129 commit_charge_difference = end_commit_charge - self._start_commit_charge | 132 end_commit_charge = self._memory_stats['SystemCommitCharge'] |
| 130 results.AddValue(scalar.ScalarValue( | 133 commit_charge_difference = end_commit_charge - self._start_commit_charge |
| 131 results.current_page, | 134 results.AddValue(scalar.ScalarValue( |
| 132 'commit_charge.' + (trace_name or 'commit_charge'), | 135 results.current_page, |
| 133 'kb', commit_charge_difference, important=False, | 136 'commit_charge.' + (trace_name or 'commit_charge'), |
| 134 description='System commit charge (committed memory pages).')) | 137 'kb', commit_charge_difference, important=False, |
| 138 description='System commit charge (committed memory pages).')) |
| 135 results.AddValue(scalar.ScalarValue( | 139 results.AddValue(scalar.ScalarValue( |
| 136 results.current_page, 'processes.' + (trace_name or 'processes'), | 140 results.current_page, 'processes.' + (trace_name or 'processes'), |
| 137 'count', self._memory_stats['ProcessCount'], important=False, | 141 'count', self._memory_stats['ProcessCount'], important=False, |
| 138 description='Number of processes used by Chrome.')) | 142 description='Number of processes used by Chrome.')) |
| 139 | 143 |
| 140 | 144 |
| 141 def AddResultsForProcesses(results, memory_stats, chart_trace_name='final', | 145 def AddResultsForProcesses(results, memory_stats, chart_trace_name='final', |
| 142 metric_trace_name=None, | 146 metric_trace_name=None, |
| 143 exclude_metrics=None): | 147 exclude_metrics=None): |
| 144 """Adds memory stats for browser, renderer and gpu processes. | 148 """Adds memory stats for browser, renderer and gpu processes. |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 219 AddResult('VMPeak', 'vm_peak_size', | 223 AddResult('VMPeak', 'vm_peak_size', |
| 220 'The peak Virtual Memory Size (address space allocated) usage ' | 224 'The peak Virtual Memory Size (address space allocated) usage ' |
| 221 'achieved by the * process.') | 225 'achieved by the * process.') |
| 222 AddResult('WorkingSetSizePeak', '%s_peak_size' % metric, | 226 AddResult('WorkingSetSizePeak', '%s_peak_size' % metric, |
| 223 'Peak Working Set Size.') | 227 'Peak Working Set Size.') |
| 224 | 228 |
| 225 AddResultsForProcessTypes(['Browser'], 'browser') | 229 AddResultsForProcessTypes(['Browser'], 'browser') |
| 226 AddResultsForProcessTypes(['Renderer'], 'renderer') | 230 AddResultsForProcessTypes(['Renderer'], 'renderer') |
| 227 AddResultsForProcessTypes(['Gpu'], 'gpu') | 231 AddResultsForProcessTypes(['Gpu'], 'gpu') |
| 228 AddResultsForProcessTypes(['Browser', 'Renderer', 'Gpu'], 'total') | 232 AddResultsForProcessTypes(['Browser', 'Renderer', 'Gpu'], 'total') |
| OLD | NEW |