Index: tools/perf/metrics/rendering_stats.py |
diff --git a/tools/perf/metrics/rendering_stats.py b/tools/perf/metrics/rendering_stats.py |
index 0c176b4b740e1694ac44daae133d88e691ebf00c..ba987327ef79e17dddb550aa0bc82648ac88ac88 100644 |
--- a/tools/perf/metrics/rendering_stats.py |
+++ b/tools/perf/metrics/rendering_stats.py |
@@ -15,6 +15,7 @@ BEGIN_COMP_NAME = 'INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT' |
# This is when the input event has reached swap buffer. |
END_COMP_NAME = 'INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT' |
+ |
def GetScrollInputLatencyEvents(scroll_type, browser_process, timeline_range): |
"""Get scroll events' LatencyInfo from the browser process's trace buffer |
that are within the timeline_range. |
@@ -39,6 +40,7 @@ def GetScrollInputLatencyEvents(scroll_type, browser_process, timeline_range): |
scroll_events.append(ss) |
return scroll_events |
+ |
def ComputeMouseWheelScrollLatency(mouse_wheel_events): |
""" Compute the mouse wheel scroll latency. |
@@ -57,6 +59,7 @@ def ComputeMouseWheelScrollLatency(mouse_wheel_events): |
mouse_wheel_latency.append(latency / 1000.0) |
return mouse_wheel_latency |
+ |
def ComputeTouchScrollLatency(touch_scroll_events): |
""" Compute the touch scroll latency. |
@@ -83,6 +86,24 @@ def ComputeTouchScrollLatency(touch_scroll_events): |
touch_scroll_latency.append(latency / 1000.0) |
return touch_scroll_latency |
+ |
+def HasRenderingStats(process): |
+ """ Returns True if the process contains at least one |
+ BenchmarkInstrumentation::*RenderingStats event with a frame. |
+ """ |
+ if not process: |
+ return False |
+ for event in process.IterAllSlicesOfName( |
+ 'BenchmarkInstrumentation::MainThreadRenderingStats'): |
+ if 'data' in event.args and event.args['data']['frame_count'] == 1: |
+ return True |
+ for event in process.IterAllSlicesOfName( |
+ 'BenchmarkInstrumentation::ImplThreadRenderingStats'): |
+ if 'data' in event.args and event.args['data']['frame_count'] == 1: |
+ return True |
+ return False |
+ |
+ |
class RenderingStats(object): |
def __init__(self, renderer_process, browser_process, timeline_ranges): |
""" |
@@ -96,7 +117,11 @@ class RenderingStats(object): |
All *_time values are measured in milliseconds. |
""" |
assert(len(timeline_ranges) > 0) |
- self.renderer_process = renderer_process |
+ # Find the top level process with rendering stats (browser or renderer). |
+ if HasRenderingStats(browser_process): |
+ self.top_level_process = browser_process |
+ else: |
+ self.top_level_process = renderer_process |
self.frame_timestamps = [] |
self.frame_times = [] |
@@ -153,7 +178,7 @@ class RenderingStats(object): |
def initMainThreadStatsFromTimeline(self, timeline_range): |
event_name = 'BenchmarkInstrumentation::MainThreadRenderingStats' |
events = [] |
- for event in self.renderer_process.IterAllSlicesOfName(event_name): |
+ for event in self.top_level_process.IterAllSlicesOfName(event_name): |
if event.start >= timeline_range.min and event.end <= timeline_range.max: |
if 'data' not in event.args: |
continue |
@@ -184,7 +209,7 @@ class RenderingStats(object): |
def initImplThreadStatsFromTimeline(self, timeline_range): |
event_name = 'BenchmarkInstrumentation::ImplThreadRenderingStats' |
events = [] |
- for event in self.renderer_process.IterAllSlicesOfName(event_name): |
+ for event in self.top_level_process.IterAllSlicesOfName(event_name): |
if event.start >= timeline_range.min and event.end <= timeline_range.max: |
if 'data' not in event.args: |
continue |