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

Side by Side Diff: tools/perf/measurements/endure.py

Issue 23961002: Adding V8 and process memory information as metrics that endure tracks (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased with update to v8 metric Created 7 years, 3 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 from metrics import v8_object_stats
5 from telemetry.page import page_measurement 6 from telemetry.page import page_measurement
6 7
7 import optparse 8 import optparse
8 import time 9 import time
9 10
11 _V8_BYTES_COMMITED = [
12 'V8.MemoryNewSpaceBytesCommitted',
13 'V8.MemoryOldPointerSpaceBytesCommitted',
14 'V8.MemoryOldDataSpaceBytesCommitted',
15 'V8.MemoryCodeSpaceBytesCommitted',
16 'V8.MemoryMapSpaceBytesCommitted',
17 'V8.MemoryCellSpaceBytesCommitted',
18 'V8.MemoryPropertyCellSpaceBytesCommitted',
19 'V8.MemoryLoSpaceBytesCommitted'
20 ]
21 _V8_BYTES_USED = [
22 'V8.MemoryNewSpaceBytesUsed',
23 'V8.MemoryOldPointerSpaceBytesUsed',
24 'V8.MemoryOldDataSpaceBytesUsed',
25 'V8.MemoryCodeSpaceBytesUsed',
26 'V8.MemoryMapSpaceBytesUsed',
27 'V8.MemoryCellSpaceBytesUsed',
28 'V8.MemoryPropertyCellSpaceBytesUsed',
29 'V8.MemoryLoSpaceBytesUsed'
30 ]
31 _V8_MEMORY_ALLOCATED = [
32 'V8.OsMemoryAllocated'
33 ]
10 34
11 class Endure(page_measurement.PageMeasurement): 35 class Endure(page_measurement.PageMeasurement):
12 def __init__(self): 36 def __init__(self):
13 super(Endure, self).__init__('endure') 37 super(Endure, self).__init__('endure')
38 self._browser = None
14 self._test_start_time = None 39 self._test_start_time = None
15 40
16 # Timestamp of the last memory retrieval. 41 # Timestamp of the last memory retrieval.
17 self._last_mem_dump = 0 42 self._last_mem_dump = 0
18 43
19 def AddCommandLineOptions(self, parser): 44 def AddCommandLineOptions(self, parser):
20 group = optparse.OptionGroup(parser, 'Endure options') 45 group = optparse.OptionGroup(parser, 'Endure options')
21 group.add_option('--perf-stats-interval', 46 group.add_option('--perf-stats-interval',
22 dest='perf_stats_interval', 47 dest='perf_stats_interval',
23 default=20, 48 default=20,
24 type='int', 49 type='int',
25 help='Time interval between perf dumps (secs)') 50 help='Time interval between perf dumps (secs)')
26 parser.add_option_group(group) 51 parser.add_option_group(group)
27 52
53 def DidStartBrowser(self, browser):
54 # Save the browser for memory_stats.
55 self._browser = browser
56
57 def CustomizeBrowserOptions(self, options):
58 v8_object_stats.V8ObjectStatsMetric.CustomizeBrowserOptions(options)
59
28 def CanRunForPage(self, page): 60 def CanRunForPage(self, page):
29 return hasattr(page, 'endure') 61 return hasattr(page, 'endure')
30 62
31 def WillRunPageRepeats(self, page, tab): 63 def WillRunPageRepeats(self, page, tab):
32 """Reset the starting time for each new page.""" 64 """Reset the starting time for each new page."""
33 self._test_start_time = time.time() 65 self._test_start_time = time.time()
34 66
35 def MeasurePage(self, page, tab, results): 67 def MeasurePage(self, page, tab, results):
36 """Dump perf information if we have gone past our interval time.""" 68 """Dump perf information if we have gone past our interval time."""
37 now = time.time() 69 now = time.time()
38 if int(round(now - self._last_mem_dump)) > self.options.perf_stats_interval: 70 if int(round(now - self._last_mem_dump)) > self.options.perf_stats_interval:
39 self._last_mem_dump = now 71 self._last_mem_dump = now
40 self._GetPerformanceStats(tab, results, now) 72 self._GetPerformanceStats(tab, results, now)
41 73
42 def _GetPerformanceStats(self, tab, results, now): 74 def _GetPerformanceStats(self, tab, results, now):
43 """Record all memory information.""" 75 """Record all memory information."""
44 elapsed_time = int(round(now - self._test_start_time)) 76 elapsed_time = int(round(now - self._test_start_time))
45 77
46 # DOM Nodes 78 # DOM Nodes
47 dom_node_count = tab.dom_stats['node_count'] 79 dom_stats = tab.dom_stats
80 dom_node_count = dom_stats['node_count']
48 self._SaveToResults(results, 'TotalDOMNodeCount_X', 81 self._SaveToResults(results, 'TotalDOMNodeCount_X',
49 'seconds', elapsed_time) 82 'seconds', elapsed_time)
50 self._SaveToResults(results, 'TotalDOMNodeCount_Y', 83 self._SaveToResults(results, 'TotalDOMNodeCount_Y',
51 'nodes', dom_node_count) 84 'nodes', dom_node_count)
52 85
53 # Event Listeners 86 # Event Listeners
54 event_listener_count = tab.dom_stats['event_listener_count'] 87 event_listener_count = dom_stats['event_listener_count']
55 self._SaveToResults(results, 'EventListenerCount_X', 88 self._SaveToResults(results, 'EventListenerCount_X',
56 'seconds', elapsed_time) 89 'seconds', elapsed_time)
57 self._SaveToResults(results, 'EventListenerCount_Y', 90 self._SaveToResults(results, 'EventListenerCount_Y',
58 'listeners', event_listener_count) 91 'listeners', event_listener_count)
59 92
93 # Memory stats
94 memory_stats = self._browser.memory_stats
95 browser_vm = memory_stats['Browser'].get('VM', 0) / 1024.0
96 self._SaveToResults(results, 'BrowserVirtualMemory_X',
97 'seconds', elapsed_time)
98 self._SaveToResults(results, 'BrowserVirtualMemory_Y',
99 'KB', browser_vm)
100 renderer_vm = memory_stats['Renderer'].get('VM', 0) / 1024.0
101 self._SaveToResults(results, 'RendererVirtualMemory_X',
102 'seconds', elapsed_time)
103 self._SaveToResults(results, 'RendererVirtualMemory_Y',
104 'KB', renderer_vm)
105
106 # V8 stats
107 v8_bytes_commited = v8_object_stats.V8ObjectStatsMetric.GetV8StatsTable(
108 tab, _V8_BYTES_COMMITED)
109 v8_bytes_commited = sum(v8_bytes_commited.values()) / 1024.0
110 self._SaveToResults(results, 'V8BytesCommited_X',
111 'seconds', elapsed_time)
112 self._SaveToResults(results, 'V8BytesCommited_Y',
113 'KB', v8_bytes_commited)
114
115 v8_bytes_used = v8_object_stats.V8ObjectStatsMetric.GetV8StatsTable(
116 tab, _V8_BYTES_USED)
117 print v8_bytes_used
118 v8_bytes_used = sum(v8_bytes_used.values()) / 1024.0
119 self._SaveToResults(results, 'V8BytesUsed_X',
120 'seconds', elapsed_time)
121 self._SaveToResults(results, 'V8BytesUsed_Y',
122 'KB', v8_bytes_used)
123
124 v8_mem_allocated = v8_object_stats.V8ObjectStatsMetric.GetV8StatsTable(
125 tab, _V8_MEMORY_ALLOCATED)
126 v8_mem_allocated = sum(v8_mem_allocated.values()) / 1024.0
127 self._SaveToResults(results, 'V8MemoryAllocated_X',
128 'seconds', elapsed_time)
129 self._SaveToResults(results, 'V8MemoryAllocated_Y',
130 'KB', v8_mem_allocated)
131
60 def _SaveToResults(self, results, trace_name, units, value, 132 def _SaveToResults(self, results, trace_name, units, value,
61 chart_name=None, data_type='default'): 133 chart_name=None, data_type='default'):
62 results.Add(trace_name, units, value, chart_name, data_type) 134 results.Add(trace_name, units, value, chart_name, data_type)
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698