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

Unified Diff: tools/perf/measurements/rasterize_and_record.py

Issue 25353009: telemetry: Refactored rasterize_and_record measurement. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Made BenchmarkInstrumentation a class. Created 7 years, 2 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 | « content/renderer/render_widget.cc ('k') | tools/perf/metrics/rendering_stats.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/perf/measurements/rasterize_and_record.py
diff --git a/tools/perf/measurements/rasterize_and_record.py b/tools/perf/measurements/rasterize_and_record.py
index 356c57400634c110ffa68e935808091b40ff6b6a..41509bd7fe388b84094411b47885e91b93f8cde6 100644
--- a/tools/perf/measurements/rasterize_and_record.py
+++ b/tools/perf/measurements/rasterize_and_record.py
@@ -5,100 +5,15 @@
import time
from metrics import smoothness
+from metrics.rendering_stats import RenderingStats
from telemetry.page import page_measurement
-class StatsCollector(object):
- def __init__(self, timeline):
- """
- Utility class for collecting rendering stats from timeline model.
-
- timeline -- The timeline model
- """
- self.timeline = timeline
- self.total_best_rasterize_time = 0
- self.total_best_record_time = 0
- self.total_pixels_rasterized = 0
- self.total_pixels_recorded = 0
- self.trigger_event = self.FindTriggerEvent()
- self.renderer_process = self.trigger_event.start_thread.parent
-
- def FindTriggerEvent(self):
- events = [s for
- s in self.timeline.GetAllEventsOfName(
- 'measureNextFrame')
- if s.parent_slice == None]
- if len(events) != 1:
- raise LookupError, 'no measureNextFrame event found'
- return events[0]
-
- def FindFrameNumber(self, trigger_time):
- start_event = None
- for event in self.renderer_process.IterAllSlicesOfName(
- "LayerTreeHost::UpdateLayers"):
- if event.start > trigger_time:
- if start_event == None:
- start_event = event
- elif event.start < start_event.start:
- start_event = event
- if start_event is None:
- raise LookupError, \
- 'no LayterTreeHost::UpdateLayers after measureNextFrame found'
- return start_event.args["source_frame_number"]
-
- def GatherRasterizeStats(self, frame_number):
- for event in self.renderer_process.IterAllSlicesOfName(
- "RasterWorkerPoolTaskImpl::RunRasterOnThread"):
- if event.args["data"]["source_frame_number"] == frame_number and \
- event.args['data']['resolution'] == 'HIGH_RESOLUTION':
- for raster_loop_event in event.GetAllSubSlicesOfName("RasterLoop"):
- best_rasterize_time = float("inf")
- for raster_event in raster_loop_event.GetAllSubSlicesOfName(
- "Picture::Raster"):
- if "num_pixels_rasterized" in raster_event.args:
- best_rasterize_time = min(best_rasterize_time,
- raster_event.duration)
- self.total_pixels_rasterized += \
- raster_event.args["num_pixels_rasterized"]
- if best_rasterize_time == float('inf'):
- best_rasterize_time = 0
- self.total_best_rasterize_time += best_rasterize_time
-
- def GatherRecordStats(self, frame_number):
- for event in self.renderer_process.IterAllSlicesOfName(
- "PictureLayer::Update"):
- if event.args["source_frame_number"] == frame_number:
- for record_loop_event in event.GetAllSubSlicesOfName("RecordLoop"):
- best_record_time = float('inf')
- for record_event in record_loop_event.GetAllSubSlicesOfName(
- "Picture::Record"):
- best_record_time = min(best_record_time, record_event.duration)
- self.total_pixels_recorded += (
- record_event.args["data"]["width"] *
- record_event.args["data"]["height"])
- if best_record_time == float('inf'):
- best_record_time = 0
- self.total_best_record_time += best_record_time
-
- def GatherRenderingStats(self):
- trigger_time = self.trigger_event.start
- frame_number = self.FindFrameNumber(trigger_time)
- self.GatherRasterizeStats(frame_number)
- self.GatherRecordStats(frame_number)
-
-def DivideIfPossibleOrZero(numerator, denominator):
- if denominator == 0:
- return 0
- return numerator / denominator
-
class RasterizeAndRecord(page_measurement.PageMeasurement):
def __init__(self):
super(RasterizeAndRecord, self).__init__('', True)
self._metrics = None
def AddCommandLineOptions(self, parser):
- parser.add_option('--report-all-results', dest='report_all_results',
- action='store_true',
- help='Reports all data collected')
parser.add_option('--raster-record-repeat', dest='raster_record_repeat',
default=20,
help='Repetitions in raster and record loops.' +
@@ -150,14 +65,15 @@ class RasterizeAndRecord(page_measurement.PageMeasurement):
});
""")
+ time.sleep(float(self.options.stop_wait_time))
tab.browser.StartTracing('webkit.console,benchmark', 60)
self._metrics.Start()
tab.ExecuteJavaScript("""
window.__rafFired = false;
window.webkitRequestAnimationFrame(function() {
- console.time("measureNextFrame");
chrome.gpuBenchmarking.setNeedsDisplayOnAllLayers();
+ console.time("measureNextFrame");
window.__rafFired = true;
});
""")
@@ -169,26 +85,20 @@ class RasterizeAndRecord(page_measurement.PageMeasurement):
tab.ExecuteJavaScript('console.timeEnd("measureNextFrame")')
self._metrics.Stop()
+ rendering_stats_deltas = self._metrics.deltas
timeline = tab.browser.StopTracing().AsTimelineModel()
-
- collector = StatsCollector(timeline)
- collector.GatherRenderingStats()
-
- rendering_stats = self._metrics.end_values
-
- results.Add('best_rasterize_time', 'seconds',
- collector.total_best_rasterize_time,
- data_type='unimportant')
- results.Add('best_record_time', 'seconds',
- collector.total_best_record_time,
- data_type='unimportant')
- results.Add('total_pixels_rasterized', 'pixels',
- collector.total_pixels_rasterized,
- data_type='unimportant')
- results.Add('total_pixels_recorded', 'pixels',
- collector.total_pixels_recorded,
- data_type='unimportant')
-
- if self.options.report_all_results:
- for k, v in rendering_stats.iteritems():
- results.Add(k, '', v)
+ timeline_marker = smoothness.FindTimelineMarker(timeline,
+ 'measureNextFrame')
+ benchmark_stats = RenderingStats(timeline_marker,
+ timeline_marker,
+ rendering_stats_deltas,
+ self._metrics.is_using_gpu_benchmarking)
+
+ results.Add('rasterize_time', 'ms',
+ max(benchmark_stats.rasterize_time) * 1000.0)
+ results.Add('record_time', 'ms',
+ max(benchmark_stats.record_time) * 1000.0)
+ results.Add('rasterized_pixels', 'pixels',
+ max(benchmark_stats.rasterized_pixel_count))
+ results.Add('recorded_pixels', 'pixels',
+ max(benchmark_stats.recorded_pixel_count))
« no previous file with comments | « content/renderer/render_widget.cc ('k') | tools/perf/metrics/rendering_stats.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698