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

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: 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
40 self._v8_object_stats_metric = None
15 41
16 # Timestamp of the last memory retrieval. 42 # Timestamp of the last memory retrieval.
17 self._last_mem_dump = 0 43 self._last_mem_dump = 0
18 44
19 def AddCommandLineOptions(self, parser): 45 def AddCommandLineOptions(self, parser):
20 group = optparse.OptionGroup(parser, 'Endure options') 46 group = optparse.OptionGroup(parser, 'Endure options')
21 group.add_option('--perf-stats-interval', 47 group.add_option('--perf-stats-interval',
22 dest='perf_stats_interval', 48 dest='perf_stats_interval',
23 default=20, 49 default=20,
24 type='int', 50 type='int',
25 help='Time interval between perf dumps (secs)') 51 help='Time interval between perf dumps (secs)')
26 parser.add_option_group(group) 52 parser.add_option_group(group)
27 53
54 def DidStartBrowser(self, browser):
55 # Save the browser for memory_stats.
56 self._browser = browser
57 self._v8_object_stats_metric = v8_object_stats.V8ObjectStatsMetric()
58
59 def CustomizeBrowserOptions(self, options):
60 # TODO(edmundyan): Remove --no-sandbox once v8_object_stats can run
61 # independetly
62 options.AppendExtraBrowserArg('--no-sandbox')
tonyg 2013/09/04 17:47:38 If the metric needs this, the metric should be res
edmundyan 2013/09/05 20:32:11 Done.
63 v8_object_stats.V8ObjectStatsMetric.CustomizeBrowserOptions(options)
64
28 def CanRunForPage(self, page): 65 def CanRunForPage(self, page):
29 return hasattr(page, 'endure') 66 return hasattr(page, 'endure')
30 67
31 def WillRunPageRepeats(self, page, tab): 68 def WillRunPageRepeats(self, page, tab):
32 """Reset the starting time for each new page.""" 69 """Reset the starting time for each new page."""
33 self._test_start_time = time.time() 70 self._test_start_time = time.time()
34 71
35 def MeasurePage(self, page, tab, results): 72 def MeasurePage(self, page, tab, results):
36 """Dump perf information if we have gone past our interval time.""" 73 """Dump perf information if we have gone past our interval time."""
37 now = time.time() 74 now = time.time()
38 if int(round(now - self._last_mem_dump)) > self.options.perf_stats_interval: 75 if int(round(now - self._last_mem_dump)) > self.options.perf_stats_interval:
39 self._last_mem_dump = now 76 self._last_mem_dump = now
40 self._GetPerformanceStats(tab, results, now) 77 self._GetPerformanceStats(page, tab, results, now)
41 78
42 def _GetPerformanceStats(self, tab, results, now): 79 def _GetPerformanceStats(self, page, tab, results, now):
43 """Record all memory information.""" 80 """Record all memory information."""
44 elapsed_time = int(round(now - self._test_start_time)) 81 elapsed_time = int(round(now - self._test_start_time))
45 82
83 # Grab all metrics at the beginning
84 _dom_stats = tab.dom_stats
tonyg 2013/09/04 17:47:38 No need to _ prefix local variables.
edmundyan 2013/09/05 20:32:11 Done.
85 _memory_stats = self._browser.memory_stats
86 self._v8_object_stats_metric.Stop(page, tab)
87 _v8_info = self._v8_object_stats_metric._results
88
89
46 # DOM Nodes 90 # DOM Nodes
47 dom_node_count = tab.dom_stats['node_count'] 91 dom_node_count = _dom_stats['node_count']
48 self._SaveToResults(results, 'TotalDOMNodeCount_X', 92 self._SaveToResults(results, 'TotalDOMNodeCount_X',
49 'seconds', elapsed_time) 93 'seconds', elapsed_time)
50 self._SaveToResults(results, 'TotalDOMNodeCount_Y', 94 self._SaveToResults(results, 'TotalDOMNodeCount_Y',
51 'nodes', dom_node_count) 95 'nodes', dom_node_count)
52 96
53 # Event Listeners 97 # Event Listeners
54 event_listener_count = tab.dom_stats['event_listener_count'] 98 event_listener_count = _dom_stats['event_listener_count']
55 self._SaveToResults(results, 'EventListenerCount_X', 99 self._SaveToResults(results, 'EventListenerCount_X',
56 'seconds', elapsed_time) 100 'seconds', elapsed_time)
57 self._SaveToResults(results, 'EventListenerCount_Y', 101 self._SaveToResults(results, 'EventListenerCount_Y',
58 'listeners', event_listener_count) 102 'listeners', event_listener_count)
59 103
104 # Memory stats
105 browser_vm = _memory_stats['Browser'].get('VM', 0) / 1024.0
106 self._SaveToResults(results, 'BrowserVirtualMemory_X',
107 'seconds', elapsed_time)
108 self._SaveToResults(results, 'BrowserVirtualMemory_Y',
109 'KB', browser_vm)
110 renderer_vm = _memory_stats['Renderer'].get('VM', 0) / 1024.0
111 self._SaveToResults(results, 'RendererVirtualMemory_X',
112 'seconds', elapsed_time)
113 self._SaveToResults(results, 'RendererVirtualMemory_Y',
114 'KB', renderer_vm)
115
116 # V8 stats
117 v8_bytes_commited = self._SumDictFromKeys(_v8_info,
118 _V8_BYTES_COMMITED) / 1024.0
119 self._SaveToResults(results, 'V8BytesCommited_X',
120 'seconds', elapsed_time)
121 self._SaveToResults(results, 'V8BytesCommited_Y',
122 'KB', v8_bytes_commited)
123
124 v8_bytes_used = self._SumDictFromKeys(_v8_info,
125 _V8_BYTES_USED) / 1024.0
126 self._SaveToResults(results, 'V8BytesUsed_X',
127 'seconds', elapsed_time)
128 self._SaveToResults(results, 'V8BytesUsed_Y',
129 'KB', v8_bytes_used)
130
131 v8_mem_allocated = self._SumDictFromKeys(_v8_info,
132 _V8_MEMORY_ALLOCATED) / 1024.0
133 self._SaveToResults(results, 'V8MemoryAllocated_X',
134 'seconds', elapsed_time)
135 self._SaveToResults(results, 'V8MemoryAllocated_Y',
136 'KB', v8_mem_allocated)
137
138 def _SumDictFromKeys(self, d, keys_list):
139 return sum([v for k, v in d.iteritems() if k in keys_list])
Michael Achenbach 2013/09/05 11:57:23 How about: [d[k] for k in keys_list] or can there
edmundyan 2013/09/05 20:32:11 There won't be missing keys. If v8 can't find the
140
60 def _SaveToResults(self, results, trace_name, units, value, 141 def _SaveToResults(self, results, trace_name, units, value,
61 chart_name=None, data_type='default'): 142 chart_name=None, data_type='default'):
62 results.Add(trace_name, units, value, chart_name, data_type) 143 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