54 lines
1.9 KiB
Python
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()'))
|