skpicture_printer.py revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
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.
4import glob
5import os
6
7from telemetry.page import page_measurement
8
9
10_JS = 'chrome.gpuBenchmarking.printToSkPicture("{0}");'
11
12
13class SkpicturePrinter(page_measurement.PageMeasurement):
14  @classmethod
15  def AddCommandLineArgs(cls, parser):
16    parser.add_option('-s', '--skp-outdir',
17                      help='Output directory for the SKP files')
18
19  @classmethod
20  def ProcessCommandLineArgs(cls, parser, args):
21    if not args.skp_outdir:
22      parser.error('Please specify --skp-outdir')
23    cls._skp_outdir = args.skp_outdir
24
25  def CustomizeBrowserOptions(self, options):
26    options.AppendExtraBrowserArgs(['--enable-gpu-benchmarking',
27                                    '--no-sandbox',
28                                    '--enable-deferred-image-decoding',
29                                    '--force-compositing-mode'])
30
31  def MeasurePage(self, page, tab, results):
32    if tab.browser.platform.GetOSName() in ['android', 'chromeos']:
33      raise page_measurement.MeasurementFailure(
34          'SkPicture printing not supported on this platform')
35
36    # Replace win32 path separator char '\' with '\\'.
37    outpath = os.path.abspath(
38        os.path.join(self._skp_outdir, page.file_safe_name))
39    js = _JS.format(outpath.replace('\\', '\\\\'))
40    tab.EvaluateJavaScript(js)
41    pictures = glob.glob(os.path.join(outpath, '*.skp'))
42    results.Add('saved_picture_count', 'count', len(pictures))
43