shaka-packager/tools/perf/measurements/image_decoding.py

54 lines
1.9 KiB
Python

# Copyright (c) 2012 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from telemetry.page import page_measurement
class ImageDecoding(page_measurement.PageMeasurement):
def CustomizeBrowserOptions(self, options):
options.extra_browser_args.append('--enable-gpu-benchmarking')
def WillNavigateToPage(self, page, tab):
tab.ExecuteJavaScript("""
if (window.chrome &&
chrome.gpuBenchmarking &&
chrome.gpuBenchmarking.clearImageCache) {
chrome.gpuBenchmarking.clearImageCache();
}
""")
tab.StartTimelineRecording()
def NeedsBrowserRestartAfterEachRun(self, tab):
return not tab.ExecuteJavaScript("""
window.chrome &&
chrome.gpuBenchmarking &&
chrome.gpuBenchmarking.clearImageCache;
""")
def MeasurePage(self, page, tab, results):
tab.StopTimelineRecording()
def _IsDone():
return tab.EvaluateJavaScript('isDone')
decode_image_events = \
tab.timeline_model.GetAllEventsOfName('DecodeImage')
# If it is a real image page, then store only the last-minIterations
# decode tasks.
if (hasattr(page,
'image_decoding_measurement_limit_results_to_min_iterations') and
page.image_decoding_measurement_limit_results_to_min_iterations):
assert _IsDone()
min_iterations = tab.EvaluateJavaScript('minIterations')
decode_image_events = decode_image_events[-min_iterations:]
durations = [d.duration for d in decode_image_events]
if not durations:
results.Add('ImageDecoding_avg', 'ms', 'unsupported')
return
image_decoding_avg = sum(durations) / len(durations)
results.Add('ImageDecoding_avg', 'ms', image_decoding_avg)
results.Add('ImageLoading_avg', 'ms',
tab.EvaluateJavaScript('averageLoadingTimeMs()'))