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

Unified Diff: tools/perf/measurements/blink_partition_alloc.py

Issue 1210403002: [DoNotCommit] telemetry: Retrieve per-allocator memory usage (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/perf/benchmarks/renderer_memory.py ('k') | tools/perf/measurements/memory_infra.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/perf/measurements/blink_partition_alloc.py
diff --git a/tools/perf/measurements/blink_partition_alloc.py b/tools/perf/measurements/blink_partition_alloc.py
new file mode 100644
index 0000000000000000000000000000000000000000..68701a5bf1d912d0a27feb6eb985db143fdb5a6d
--- /dev/null
+++ b/tools/perf/measurements/blink_partition_alloc.py
@@ -0,0 +1,90 @@
+# Copyright 2015 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# TODO(bashi): DO-NOT-FOR-COMMIT. Just for local measurements.
+
+import collections
+import logging
+
+from telemetry.page import action_runner
+from telemetry.page import page_test
+from telemetry.timeline import tracing_category_filter
+from telemetry.timeline import tracing_options
+from telemetry.timeline.model import TimelineModel
+from telemetry.value import scalar
+
+
+class BlinkPartitionAlloc(page_test.PageTest):
+ def __init__(self):
+ super(BlinkPartitionAlloc, self).__init__()
+
+ def WillNavigateToPage(self, page, tab):
+ category_filter = tracing_category_filter.TracingCategoryFilter(
+ 'disabled-by-default-memory-infra')
+ options = tracing_options.TracingOptions()
+ options.enable_chrome_trace = True
+ tab.browser.platform.tracing_controller.Start(options, category_filter,
+ 10)
+ def CustomizeBrowserOptions(self, options):
+ options.AppendExtraBrowserArgs(['--no-sandbox'])
+
+ def DidNavigateToPage(self, page, tab):
+ runner = action_runner.ActionRunner(tab)
+ runner.Wait(10)
+
+ def ValidateAndMeasurePage(self, page, tab, results):
+ timeline_data = tab.browser.platform.tracing_controller.Stop()
+ timeline_model = TimelineModel(timeline_data)
+ renderer_process = timeline_model.GetRendererProcessFromTabId(tab.id)
+ stats = self._GetPerPartitionStats(timeline_model, renderer_process.pid)
+ self._AddResults(stats, results)
+
+ def CleanUpAfterPage(self, page, tab):
+ if tab.browser.platform.tracing_controller.is_tracing_running:
+ tab.browser.platform.tracing_controller.Stop()
+
+ def _FindLatestRendererDump(self, timeline_model, pid):
+ """Returns the latest ProcessMemoryDumpEvent which is associated with
+ the renderer process and its |has_mmaps| is true.
+ """
+ latest = None
+ for memory_event in timeline_model.IterGlobalMemoryDumps():
+ renderer_events = filter(lambda event: event.process.pid == pid,
+ memory_event._process_dumps)
+ if len(renderer_events) == 0:
+ continue
+ assert(len(renderer_events) == 1)
+ current = renderer_events[0]
+ if current.has_mmaps and (not latest or latest.start < current.start):
+ latest = current
+ assert(latest != None)
+ return latest
+
+ def _GetPerPartitionStats(self, timeline_model, pid):
+ latest = self._FindLatestRendererDump(timeline_model, pid)
+ stats = collections.defaultdict(int)
+ allocators = latest._event['args']['dumps']['allocators']
+ for allocator_name, value in allocators.iteritems():
+ name_parts = allocator_name.split('/')
+ if name_parts[0] == 'partition_alloc':
+ if name_parts[-1] != 'allocated_objects':
+ # We don't count 'allocated_objects' since the outer includes the
+ # value.
+ continue
+ partition = name_parts[2]
+ stats[partition] += int(value['attrs']['size']['value'], 16)
+ return stats
+
+ def _AddResults(self, stats, results):
+ total = 0.0
+ for category, value in stats.iteritems():
+ total += value
+ results.AddValue(scalar.ScalarValue(
+ results.current_page, category, 'MiB',
+ float(value) / 1024**2,
+ description=category))
+ results.AddValue(scalar.ScalarValue(
+ results.current_page, 'total', 'MiB',
+ float(total) / 1024**2,
+ description='total'))
« no previous file with comments | « tools/perf/benchmarks/renderer_memory.py ('k') | tools/perf/measurements/memory_infra.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698