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

Unified Diff: tools/android/loading/pull_sandwich_metrics.py

Issue 1707793002: sandwich: Refactor to use more existing code. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addresses benoit's comments Created 4 years, 10 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/android/loading/loading_trace.py ('k') | tools/android/loading/pull_sandwich_metrics_unittest.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/android/loading/pull_sandwich_metrics.py
diff --git a/tools/android/loading/pull_sandwich_metrics.py b/tools/android/loading/pull_sandwich_metrics.py
index df24f1c36658a6d3d8893dd7ad5dc643ff0a1abc..926a5798d982d86f847c193f756bf7faac09024d 100755
--- a/tools/android/loading/pull_sandwich_metrics.py
+++ b/tools/android/loading/pull_sandwich_metrics.py
@@ -15,6 +15,9 @@ import logging
import os
import sys
+import loading_trace as loading_trace_module
+import tracing
+
CATEGORIES = ['blink.user_timing', 'disabled-by-default-memory-infra']
@@ -29,41 +32,41 @@ _CSV_FIELD_NAMES = [
_TRACKED_EVENT_NAMES = set(['requestStart', 'loadEventStart', 'loadEventEnd'])
-def _GetBrowserPID(trace):
+def _GetBrowserPID(tracing_track):
"""Get the browser PID from a trace.
Args:
- trace: The cached trace.
+ tracing_track: The tracing.TracingTrack.
Returns:
The browser's PID as an integer.
"""
- for event in trace['traceEvents']:
- if event['cat'] != '__metadata' or event['name'] != 'process_name':
+ for event in tracing_track.GetEvents():
+ if event.category != '__metadata' or event.name != 'process_name':
continue
- if event['args']['name'] == 'Browser':
- return event['pid']
+ if event.args['name'] == 'Browser':
+ return event.pid
raise ValueError('couldn\'t find browser\'s PID')
-def _GetBrowserDumpEvents(trace):
- """Get the browser memory dump events from a trace.
+def _GetBrowserDumpEvents(tracing_track):
+ """Get the browser memory dump events from a tracing track.
Args:
- trace: The cached trace.
+ tracing_track: The tracing.TracingTrack.
Returns:
List of memory dump events.
"""
- browser_pid = _GetBrowserPID(trace)
+ browser_pid = _GetBrowserPID(tracing_track)
browser_dumps_events = []
- for event in trace['traceEvents']:
- if event['cat'] != 'disabled-by-default-memory-infra':
+ for event in tracing_track.GetEvents():
+ if event.category != 'disabled-by-default-memory-infra':
continue
- if event['ph'] != 'v' or event['name'] != 'periodic_interval':
+ if event.type != 'v' or event.name != 'periodic_interval':
continue
# Ignore dump events for processes other than the browser process
- if event['pid'] != browser_pid:
+ if event.pid != browser_pid:
continue
browser_dumps_events.append(event)
if len(browser_dumps_events) == 0:
@@ -71,31 +74,31 @@ def _GetBrowserDumpEvents(trace):
return browser_dumps_events
-def _GetWebPageTrackedEvents(trace):
- """Get the web page's tracked events from a trace.
+def _GetWebPageTrackedEvents(tracing_track):
+ """Get the web page's tracked events from a tracing track.
Args:
- trace: The cached trace.
+ tracing_track: The tracing.TracingTrack.
Returns:
Dictionary all tracked events.
"""
main_frame = None
tracked_events = {}
- for event in trace['traceEvents']:
- if event['cat'] != 'blink.user_timing':
+ for event in tracing_track.GetEvents():
+ if event.category != 'blink.user_timing':
continue
- event_name = event['name']
+ event_name = event.name
# Ignore events until about:blank's unloadEventEnd that give the main
# frame id.
if not main_frame:
if event_name == 'unloadEventEnd':
- main_frame = event['args']['frame']
+ main_frame = event.args['frame']
logging.info('found about:blank\'s event \'unloadEventEnd\'')
continue
# Ignore sub-frames events. requestStart don't have the frame set but it
# is fine since tracking the first one after about:blank's unloadEventEnd.
- if 'frame' in event['args'] and event['args']['frame'] != main_frame:
+ if 'frame' in event.args and event.args['frame'] != main_frame:
continue
if event_name in _TRACKED_EVENT_NAMES and event_name not in tracked_events:
logging.info('found url\'s event \'%s\'' % event_name)
@@ -104,32 +107,33 @@ def _GetWebPageTrackedEvents(trace):
return tracked_events
-def _PullMetricsFromTrace(trace):
+def _PullMetricsFromLoadingTrace(loading_trace):
"""Pulls all the metrics from a given trace.
Args:
- trace: The cached trace.
+ loading_trace: loading_trace_module.LoadingTrace.
Returns:
Dictionary with all _CSV_FIELD_NAMES's field set (except the 'id').
"""
- browser_dump_events = _GetBrowserDumpEvents(trace)
- web_page_tracked_events = _GetWebPageTrackedEvents(trace)
+ browser_dump_events = _GetBrowserDumpEvents(loading_trace.tracing_track)
+ web_page_tracked_events = _GetWebPageTrackedEvents(
+ loading_trace.tracing_track)
browser_malloc_sum = 0
browser_malloc_max = 0
for dump_event in browser_dump_events:
- attr = dump_event['args']['dumps']['allocators']['malloc']['attrs']['size']
+ attr = dump_event.args['dumps']['allocators']['malloc']['attrs']['size']
assert attr['units'] == 'bytes'
size = int(attr['value'], 16)
browser_malloc_sum += size
browser_malloc_max = max(browser_malloc_max, size)
return {
- 'total_load': (web_page_tracked_events['loadEventEnd']['ts'] -
- web_page_tracked_events['requestStart']['ts']),
- 'onload': (web_page_tracked_events['loadEventEnd']['ts'] -
- web_page_tracked_events['loadEventStart']['ts']),
+ 'total_load': (web_page_tracked_events['loadEventEnd'].start_msec -
+ web_page_tracked_events['requestStart'].start_msec),
+ 'onload': (web_page_tracked_events['loadEventEnd'].start_msec -
+ web_page_tracked_events['loadEventStart'].start_msec),
'browser_malloc_avg': browser_malloc_sum / float(len(browser_dump_events)),
'browser_malloc_max': browser_malloc_max
}
@@ -162,12 +166,11 @@ def _PullMetricsFromOutputDirectory(output_directory_path):
if not os.path.isfile(trace_path):
continue
logging.info('processing \'%s\'' % trace_path)
- with open(trace_path) as trace_file:
- trace = json.load(trace_file)
- trace_metrics = _PullMetricsFromTrace(trace)
- trace_metrics['id'] = page_id
- trace_metrics['url'] = run_infos['urls'][page_id]
- metrics.append(trace_metrics)
+ loading_trace = loading_trace_module.LoadingTrace.FromJsonFile(trace_path)
+ trace_metrics = _PullMetricsFromLoadingTrace(loading_trace)
+ trace_metrics['id'] = page_id
+ trace_metrics['url'] = run_infos['urls'][page_id]
+ metrics.append(trace_metrics)
assert len(metrics) > 0, ('Looks like \'{}\' was not a sandwich ' +
'run directory.').format(output_directory_path)
return metrics
« no previous file with comments | « tools/android/loading/loading_trace.py ('k') | tools/android/loading/pull_sandwich_metrics_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698