| Index: tools/perf/metrics/memory.py
|
| diff --git a/tools/perf/metrics/memory.py b/tools/perf/metrics/memory.py
|
| index 8e4eaf5b2450f0636b18440a192e24c098215454..2a608659228bf57df081f1f014d8cd700ba22ea7 100644
|
| --- a/tools/perf/metrics/memory.py
|
| +++ b/tools/perf/metrics/memory.py
|
| @@ -11,24 +11,43 @@ from telemetry.value import scalar
|
|
|
|
|
| _HISTOGRAMS = [
|
| - {'name': 'V8.MemoryExternalFragmentationTotal', 'units': 'percent',
|
| - 'display_name': 'V8_MemoryExternalFragmentationTotal',
|
| - 'type': histogram_util.RENDERER_HISTOGRAM},
|
| - {'name': 'V8.MemoryHeapSampleTotalCommitted', 'units': 'kb',
|
| - 'display_name': 'V8_MemoryHeapSampleTotalCommitted',
|
| - 'type': histogram_util.RENDERER_HISTOGRAM},
|
| - {'name': 'V8.MemoryHeapSampleTotalUsed', 'units': 'kb',
|
| - 'display_name': 'V8_MemoryHeapSampleTotalUsed',
|
| - 'type': histogram_util.RENDERER_HISTOGRAM},
|
| - {'name': 'V8.MemoryHeapSampleMaximumCommitted', 'units': 'kb',
|
| - 'display_name': 'V8_MemoryHeapSampleMaximumCommitted',
|
| - 'type': histogram_util.RENDERER_HISTOGRAM},
|
| - {'name': 'Memory.RendererUsed', 'units': 'kb',
|
| - 'display_name': 'Memory_RendererUsed',
|
| - 'type': histogram_util.RENDERER_HISTOGRAM},
|
| - {'name': 'Memory.BrowserUsed', 'units': 'kb',
|
| - 'display_name': 'Memory_BrowserUsed',
|
| - 'type': histogram_util.BROWSER_HISTOGRAM}]
|
| + {
|
| + 'name': 'V8.MemoryExternalFragmentationTotal', 'units': 'percent',
|
| + 'display_name': 'V8_MemoryExternalFragmentationTotal',
|
| + 'type': histogram_util.RENDERER_HISTOGRAM,
|
| + 'description': 'Total external memory fragmentation after each GC in '
|
| + 'percent.',
|
| + },
|
| + {
|
| + 'name': 'V8.MemoryHeapSampleTotalCommitted', 'units': 'kb',
|
| + 'display_name': 'V8_MemoryHeapSampleTotalCommitted',
|
| + 'type': histogram_util.RENDERER_HISTOGRAM,
|
| + 'description': 'The total size of committed memory used by V8 after '
|
| + 'each GC in KB.'
|
| + },
|
| + {
|
| + 'name': 'V8.MemoryHeapSampleTotalUsed', 'units': 'kb',
|
| + 'display_name': 'V8_MemoryHeapSampleTotalUsed',
|
| + 'type': histogram_util.RENDERER_HISTOGRAM,
|
| + 'description': 'The total size of live memory used by V8 after each '
|
| + 'GC in KB.',
|
| + },
|
| + {
|
| + 'name': 'V8.MemoryHeapSampleMaximumCommitted', 'units': 'kb',
|
| + 'display_name': 'V8_MemoryHeapSampleMaximumCommitted',
|
| + 'type': histogram_util.RENDERER_HISTOGRAM
|
| + },
|
| + {
|
| + 'name': 'Memory.RendererUsed', 'units': 'kb',
|
| + 'display_name': 'Memory_RendererUsed',
|
| + 'type': histogram_util.RENDERER_HISTOGRAM
|
| + },
|
| + {
|
| + 'name': 'Memory.BrowserUsed', 'units': 'kb',
|
| + 'display_name': 'Memory_BrowserUsed',
|
| + 'type': histogram_util.BROWSER_HISTOGRAM
|
| + },
|
| +]
|
|
|
| class MemoryMetric(Metric):
|
| """MemoryMetric gathers memory statistics from the browser object.
|
| @@ -98,7 +117,8 @@ class MemoryMetric(Metric):
|
| continue
|
| results.AddValue(histogram.HistogramValue(
|
| results.current_page, h['display_name'], h['units'],
|
| - raw_value_json=self._histogram_delta[h['name']], important=False))
|
| + raw_value_json=self._histogram_delta[h['name']], important=False,
|
| + description=h.get('description')))
|
| self._memory_stats = self._browser.memory_stats
|
| if not self._memory_stats['Browser']:
|
| return
|
| @@ -110,14 +130,12 @@ class MemoryMetric(Metric):
|
| results.AddValue(scalar.ScalarValue(
|
| results.current_page,
|
| 'commit_charge.' + (trace_name or 'commit_charge'),
|
| - 'kb',
|
| - commit_charge_difference, important=False))
|
| + 'kb', commit_charge_difference, important=False,
|
| + description='System commit charge (committed memory pages).'))
|
| results.AddValue(scalar.ScalarValue(
|
| - results.current_page,
|
| - 'processes.' + (trace_name or 'processes'),
|
| - 'count',
|
| - self._memory_stats['ProcessCount'],
|
| - important=False))
|
| + results.current_page, 'processes.' + (trace_name or 'processes'),
|
| + 'count', self._memory_stats['ProcessCount'], important=False,
|
| + description='Number of processes used by Chrome.'))
|
|
|
|
|
| def AddResultsForProcesses(results, memory_stats, chart_trace_name='final',
|
| @@ -143,15 +161,15 @@ def AddResultsForProcesses(results, memory_stats, chart_trace_name='final',
|
| """Add all results for a given set of process types.
|
|
|
| Args:
|
| - process_types_memory: A list of process types, e.g. Browser, 'Renderer'
|
| - process_type_trace: The name of this set of process types in the output
|
| + process_types_memory: A list of process types, e.g. Browser, 'Renderer'.
|
| + process_type_trace: The name of this set of process types in the output.
|
| """
|
| - def AddResult(value_name_memory, value_name_trace):
|
| + def AddResult(value_name_memory, value_name_trace, description):
|
| """Add a result for a given statistic.
|
|
|
| Args:
|
| - value_name_memory: Name of some statistic, e.g. VM, WorkingSetSize
|
| - value_name_trace: Name of this statistic to be used in the output
|
| + value_name_memory: Name of some statistic, e.g. VM, WorkingSetSize.
|
| + value_name_trace: Name of this statistic to be used in the output.
|
| """
|
| if value_name_memory in exclude_metrics:
|
| return
|
| @@ -171,16 +189,38 @@ def AddResultsForProcesses(results, memory_stats, chart_trace_name='final',
|
| chart_name = current_trace
|
| results.AddValue(scalar.ScalarValue(
|
| results.current_page, '%s.%s' % (chart_name, current_trace), 'kb',
|
| - sum(values) / 1024, important=False))
|
| -
|
| - AddResult('VM', 'vm_%s_size' % chart_trace_name)
|
| - AddResult('WorkingSetSize', 'vm_%s_%s_size' % (metric, chart_trace_name))
|
| - AddResult('PrivateDirty', 'vm_private_dirty_%s' % chart_trace_name)
|
| + sum(values) / 1024, important=False, description=description))
|
| +
|
| + AddResult('VM', 'vm_%s_size' % chart_trace_name,
|
| + 'Virtual Memory Size (address space allocated).')
|
| + AddResult('WorkingSetSize', 'vm_%s_%s_size' % (metric, chart_trace_name),
|
| + 'Working Set Size (Windows) or Resident Set Size (other '
|
| + 'platforms).')
|
| + AddResult('PrivateDirty', 'vm_private_dirty_%s' % chart_trace_name,
|
| + 'Private Dirty is basically the amount of RAM inside the '
|
| + 'process that can not be paged to disk (it is not backed by the '
|
| + 'same data on disk), and is not shared with any other '
|
| + 'processes. Another way to look at this is the RAM that will '
|
| + 'become available to the system when that process goes away '
|
| + '(and probably quickly subsumed into caches and other uses of '
|
| + 'it).')
|
| AddResult('ProportionalSetSize',
|
| - 'vm_proportional_set_size_%s' % chart_trace_name)
|
| - AddResult('SharedDirty', 'vm_shared_dirty_%s' % chart_trace_name)
|
| - AddResult('VMPeak', 'vm_peak_size')
|
| - AddResult('WorkingSetSizePeak', '%s_peak_size' % metric)
|
| + 'vm_proportional_set_size_%s' % chart_trace_name,
|
| + 'The Proportional Set Size (PSS) number is a metric the kernel '
|
| + 'computes that takes into account memory sharing -- basically '
|
| + 'each page of RAM in a process is scaled by a ratio of the '
|
| + 'number of other processes also using that page. This way you '
|
| + 'can (in theory) add up the PSS across all processes to see '
|
| + 'the total RAM they are using, and compare PSS between '
|
| + 'processes to get a rough idea of their relative weight.')
|
| + AddResult('SharedDirty', 'vm_shared_dirty_%s' % chart_trace_name,
|
| + 'Shared Dirty is the amount of RAM outside the process that can '
|
| + 'not be paged to disk, and is shared with other processes.')
|
| + AddResult('VMPeak', 'vm_peak_size',
|
| + 'The peak Virtual Memory Size (address space allocated) usage '
|
| + 'achieved by the * process.')
|
| + AddResult('WorkingSetSizePeak', '%s_peak_size' % metric,
|
| + 'Peak Working Set Size.')
|
|
|
| AddResultsForProcessTypes(['Browser'], 'browser')
|
| AddResultsForProcessTypes(['Renderer'], 'renderer')
|
|
|