Home | History | Annotate | Download | only in measurements
      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.
      4 
      5 from telemetry.page import page_measurement
      6 
      7 
      8 class ImageDecoding(page_measurement.PageMeasurement):
      9   def CustomizeBrowserOptions(self, options):
     10     options.AppendExtraBrowserArgs('--enable-gpu-benchmarking')
     11 
     12   def WillNavigateToPage(self, page, tab):
     13     tab.ExecuteJavaScript("""
     14         if (window.chrome &&
     15             chrome.gpuBenchmarking &&
     16             chrome.gpuBenchmarking.clearImageCache) {
     17           chrome.gpuBenchmarking.clearImageCache();
     18         }
     19     """)
     20     tab.StartTimelineRecording()
     21 
     22   def NeedsBrowserRestartAfterEachRun(self, browser):
     23     return not browser.tabs[0].ExecuteJavaScript("""
     24         window.chrome &&
     25             chrome.gpuBenchmarking &&
     26             chrome.gpuBenchmarking.clearImageCache;
     27     """)
     28 
     29   def MeasurePage(self, page, tab, results):
     30     tab.StopTimelineRecording()
     31     def _IsDone():
     32       return tab.EvaluateJavaScript('isDone')
     33 
     34     decode_image_events = \
     35         tab.timeline_model.GetAllEventsOfName('DecodeImage')
     36 
     37     # If it is a real image page, then store only the last-minIterations
     38     # decode tasks.
     39     if (hasattr(page,
     40                'image_decoding_measurement_limit_results_to_min_iterations') and
     41         page.image_decoding_measurement_limit_results_to_min_iterations):
     42       assert _IsDone()
     43       min_iterations = tab.EvaluateJavaScript('minIterations')
     44       decode_image_events = decode_image_events[-min_iterations:]
     45 
     46     durations = [d.duration for d in decode_image_events]
     47     if not durations:
     48       results.Add('ImageDecoding_avg', 'ms', 'unsupported')
     49       return
     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()'))
     54