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

Unified Diff: telemetry/telemetry/web_perf/metrics/rendering_stats.py

Issue 2594573002: Change smoothness frame-times metrics on CrOS (Closed)
Patch Set: Created 4 years 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 | « no previous file | telemetry/telemetry/web_perf/metrics/rendering_stats_unittest.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: telemetry/telemetry/web_perf/metrics/rendering_stats.py
diff --git a/telemetry/telemetry/web_perf/metrics/rendering_stats.py b/telemetry/telemetry/web_perf/metrics/rendering_stats.py
index 65bdbee87c5582f7bd91403b20b81548786d5585..9f9b104ff8e067d1340ac9a2fd72a1a77a2c186d 100644
--- a/telemetry/telemetry/web_perf/metrics/rendering_stats.py
+++ b/telemetry/telemetry/web_perf/metrics/rendering_stats.py
@@ -105,6 +105,16 @@ def ComputeEventLatencies(input_events):
return [(name, latency) for _, name, latency in input_event_latencies]
+def HasDrmStats(process):
+ """ Return True if the process contains DrmEventFlipComplete event.
+ """
+ if not process:
+ return False
+ for event in process.IterAllSlicesOfName('DrmEventFlipComplete'):
+ if 'data' in event.args and event.args['data']['frame_count'] == 1:
+ return True
+ return False
+
def HasRenderingStats(process):
""" Returns True if the process contains at least one
BenchmarkInstrumentation::*RenderingStats event with a frame.
@@ -126,6 +136,9 @@ def GetTimestampEventName(process):
if process.name == 'SurfaceFlinger':
return 'vsync_before'
+ if process.name == 'GPU Process':
+ return 'DrmEventFlipComplete'
+
event_name = 'BenchmarkInstrumentation::DisplayRenderingStats'
for event in process.IterAllSlicesOfName(event_name):
if 'data' in event.args and event.args['data']['frame_count'] == 1:
@@ -135,7 +148,7 @@ def GetTimestampEventName(process):
class RenderingStats(object):
def __init__(self, renderer_process, browser_process, surface_flinger_process,
- timeline_ranges):
+ gpu_process, timeline_ranges):
"""
Utility class for extracting rendering statistics from the timeline (or
other loggin facilities), and providing them in a common format to classes
@@ -153,6 +166,8 @@ class RenderingStats(object):
if surface_flinger_process:
timestamp_process = surface_flinger_process
self._GetRefreshPeriodFromSurfaceFlingerProcess(surface_flinger_process)
+ elif HasDrmStats(gpu_process):
+ timestamp_process = gpu_process
elif HasRenderingStats(browser_process):
timestamp_process = browser_process
else:
@@ -237,8 +252,13 @@ class RenderingStats(object):
if frame_count > 1:
raise ValueError('trace contains multi-frame render stats')
if frame_count == 1:
- self.frame_timestamps[-1].append(
- event.start)
+ if event.name == 'DrmEventFlipComplete':
+ self.frame_timestamps[-1].append(
+ event.args['data']['vblank.tv_sec'] * 1000.0 +
+ event.args['data']['vblank.tv_usec'] / 1000.0)
+ else:
+ self.frame_timestamps[-1].append(
+ event.start)
if len(self.frame_timestamps[-1]) >= 2:
self.frame_times[-1].append(
self.frame_timestamps[-1][-1] - self.frame_timestamps[-1][-2])
« no previous file with comments | « no previous file | telemetry/telemetry/web_perf/metrics/rendering_stats_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698