1# Copyright 2013 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
5import time
6
7from metrics import smoothness
8from telemetry.page import page_measurement
9
10class RecordPerArea(page_measurement.PageMeasurement):
11  def __init__(self):
12    super(RecordPerArea, self).__init__('', True)
13
14  def AddCommandLineOptions(self, parser):
15    parser.add_option('--start-wait-time', dest='start_wait_time',
16                      default=2,
17                      help='Wait time before the benchmark is started ' +
18                      '(must be long enought to load all content)')
19
20  def CustomizeBrowserOptions(self, options):
21    smoothness.SmoothnessMetrics.CustomizeBrowserOptions(options)
22    options.AppendExtraBrowserArgs([
23        '--enable-impl-side-painting',
24        '--force-compositing-mode',
25        '--enable-threaded-compositing',
26        '--enable-gpu-benchmarking'
27    ])
28
29  def MeasurePage(self, page, tab, results):
30    # Wait until the page has loaded and come to a somewhat steady state.
31    # Needs to be adjusted for every device (~2 seconds for workstation).
32    time.sleep(float(self.options.start_wait_time))
33
34    # Enqueue benchmark
35    tab.ExecuteJavaScript("""
36        window.benchmark_results = {};
37        window.benchmark_results.done = false;
38        chrome.gpuBenchmarking.runMicroBenchmark(
39            "picture_record_benchmark",
40            function(value) {
41              window.benchmark_results.done = true;
42              window.benchmark_results.results = value;
43            }, [{width: 1, height: 1},
44                {width: 250, height: 250},
45                {width: 500, height: 500},
46                {width: 750, height: 750},
47                {width: 1000, height: 1000},
48                {width: 256, height: 1024},
49                {width: 1024, height: 256}]);
50    """)
51
52    tab.WaitForJavaScriptExpression('window.benchmark_results.done', 300)
53
54    all_data = tab.EvaluateJavaScript('window.benchmark_results.results')
55    for data in all_data:
56      width = data['width']
57      height = data['height']
58      area = width * height
59      time_ms = data['time_ms']
60
61      results.Add('area_%07d_%dx%d' % (area, width, height), 'ms', time_ms)
62
63