1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
5 from telemetry
.page
import page_measurement
8 class ImageDecoding(page_measurement
.PageMeasurement
):
9 def CustomizeBrowserOptions(self
, options
):
10 options
.AppendExtraBrowserArgs('--enable-gpu-benchmarking')
12 def WillNavigateToPage(self
, page
, tab
):
13 tab
.ExecuteJavaScript("""
15 chrome.gpuBenchmarking &&
16 chrome.gpuBenchmarking.clearImageCache) {
17 chrome.gpuBenchmarking.clearImageCache();
20 tab
.StartTimelineRecording()
22 def NeedsBrowserRestartAfterEachRun(self
, tab
):
23 return not tab
.ExecuteJavaScript("""
25 chrome.gpuBenchmarking &&
26 chrome.gpuBenchmarking.clearImageCache;
29 def MeasurePage(self
, page
, tab
, results
):
30 tab
.StopTimelineRecording()
32 return tab
.EvaluateJavaScript('isDone')
34 decode_image_events
= \
35 tab
.timeline_model
.GetAllEventsOfName('DecodeImage')
37 # If it is a real image page, then store only the last-minIterations
40 'image_decoding_measurement_limit_results_to_min_iterations') and
41 page
.image_decoding_measurement_limit_results_to_min_iterations
):
43 min_iterations
= tab
.EvaluateJavaScript('minIterations')
44 decode_image_events
= decode_image_events
[-min_iterations
:]
46 durations
= [d
.duration
for d
in decode_image_events
]
48 results
.Add('ImageDecoding_avg', 'ms', 'unsupported')
50 image_decoding_avg
= sum(durations
) / len(durations
)
51 results
.Add('ImageDecoding_avg', 'ms', image_decoding_avg
)
52 results
.Add('ImageLoading_avg', 'ms',
53 tab
.EvaluateJavaScript('averageLoadingTimeMs()'))