skpicture_printer.py revision 9ab5563a3196760eb381d102cbb2bc0f7abc6a50
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import os
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)from telemetry.page import page_measurement
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
89ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)_JS = 'chrome.gpuBenchmarking.printToSkPicture("{0}");'
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
119ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
129ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochclass SkpicturePrinter(page_measurement.PageMeasurement):
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  def AddCommandLineOptions(self, parser):
14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    parser.add_option('-s', '--skp-outdir',
15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                      help='Output directory for the SKP files')
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def CustomizeBrowserOptions(self, options):
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    options.extra_browser_args.extend(['--enable-gpu-benchmarking',
19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                                       '--no-sandbox',
20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                                       '--enable-deferred-image-decoding',
21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                                       '--force-compositing-mode'])
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def MeasurePage(self, page, tab, results):
24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    skp_outdir = self.options.skp_outdir
25868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    if not skp_outdir:
26868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      raise Exception('Please specify --skp-outdir')
27868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    outpath = os.path.abspath(
28868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        os.path.join(skp_outdir,
29868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                     page.url_as_file_safe_name))
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # Replace win32 path separator char '\' with '\\'.
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    js = _JS.format(outpath.replace('\\', '\\\\'))
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    tab.EvaluateJavaScript(js)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    results.Add('output_path', 'path', outpath)
34