OLD | NEW |
---|---|
(Empty) | |
1 # Copyright 2015 The Chromium Authors. All rights reserved. | |
Sami
2015/08/26 10:03:25
Could you please add a unit test for this measurem
| |
2 # Use of this source code is governed by a BSD-style license that can be | |
3 # found in the LICENSE file. | |
4 | |
5 from telemetry.page import page_test | |
6 from telemetry.timeline import tracing_category_filter | |
7 from telemetry.timeline import tracing_options | |
8 from telemetry.timeline.model import TimelineModel | |
9 from telemetry.value import scalar | |
10 | |
11 | |
12 class RendererMemory(page_test.PageTest): | |
nednguyen
2015/08/26 11:50:22
I am not ok with adding another page_test. Please
| |
13 def __init__(self): | |
14 super(RendererMemory, self).__init__() | |
15 | |
16 def WillNavigateToPage(self, page, tab): | |
17 category_filter = tracing_category_filter.TracingCategoryFilter( | |
18 '-*,blink.console,disabled-by-default-memory-infra') | |
19 options = tracing_options.TracingOptions() | |
20 options.enable_chrome_trace = True | |
21 tab.browser.platform.tracing_controller.Start(options, category_filter, 10) | |
Sami
2015/08/26 10:03:25
nit: 10s is already the default timeout so you cou
| |
22 | |
23 def CustomizeBrowserOptions(self, options): | |
24 options.AppendExtraBrowserArgs( | |
25 ['--enable-memory-benchmarking', | |
petrcermak
2015/08/26 09:33:50
nit: I think this would be even better with the li
| |
26 '--ignore-certificate-errors', | |
27 '--no-sandbox']) | |
28 | |
29 def CleanUpAfterPage(self, _, tab): | |
30 if tab.browser.platform.tracing_controller.is_tracing_running: | |
31 tab.browser.platform.tracing_controller.Stop() | |
32 | |
33 def ValidateAndMeasurePage(self, _, tab, results): | |
34 if not tab.browser.supports_memory_dumping: | |
35 self.skipTest('Browser does not support memory dumping, skipping test.') | |
petrcermak
2015/08/26 09:33:50
I've just investigated this method a little more a
| |
36 guid = tab.browser.DumpMemory() | |
37 assert guid is not None | |
38 timeline_data = tab.browser.platform.tracing_controller.Stop() | |
39 timeline_model = TimelineModel(timeline_data) | |
40 renderer_process = timeline_model.GetRendererProcessFromTabId(tab.id) | |
41 assert renderer_process is not None | |
42 dump = self._FindRendererDump( | |
43 timeline_model, guid, renderer_process.pid) | |
44 self._AddAllocatorResults(dump, results) | |
45 | |
46 def _FindRendererDump(self, timeline_model, guid, pid): | |
47 memory_dumps = list(timeline_model.IterGlobalMemoryDumps()) | |
48 assert len(memory_dumps) == 1 | |
49 assert memory_dumps[0].dump_id == guid | |
50 renderer_dumps = [ | |
51 dump for dump in memory_dumps[0].IterProcessMemoryDumps() | |
52 if dump.process.pid == pid] | |
53 assert len(renderer_dumps) == 1 | |
54 return renderer_dumps[0] | |
55 | |
56 def _AddAllocatorResults(self, dump, results): | |
57 usage = dump.GetMemoryUsage() | |
58 | |
59 def _AddAllocatorStats(category): | |
60 results.AddValue(scalar.ScalarValue( | |
61 results.current_page, category, 'MiB', | |
62 float(usage.get('allocator_' + category, 0.0)) / 1024**2, | |
63 description='Total memory allocated by ' + category)) | |
64 _AddAllocatorStats('malloc') | |
65 _AddAllocatorStats('v8') | |
66 _AddAllocatorStats('blink_gc') | |
67 _AddAllocatorStats('partition_alloc') | |
68 _AddAllocatorStats('discardable') | |
69 | |
70 def _AddMMapStats(category): | |
71 results.AddValue(scalar.ScalarValue( | |
72 results.current_page, category, 'MiB', | |
73 float(usage.get('mmaps_' + category, 0.0)) / 1024**2, | |
74 description=category)) | |
75 _AddMMapStats('private_dirty') | |
OLD | NEW |