| 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
|
|
|