skpicture_printer.py revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
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.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)import glob
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import os
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)from telemetry.page import page_measurement
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
99ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)_JS = 'chrome.gpuBenchmarking.printToSkPicture("{0}");'
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
129ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
139ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochclass SkpicturePrinter(page_measurement.PageMeasurement):
14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  @classmethod
15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  def AddCommandLineArgs(cls, parser):
16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    parser.add_option('-s', '--skp-outdir',
17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                      help='Output directory for the SKP files')
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  @classmethod
20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  def ProcessCommandLineArgs(cls, parser, args):
21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    if not args.skp_outdir:
22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      parser.error('Please specify --skp-outdir')
23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    cls._skp_outdir = args.skp_outdir
24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def CustomizeBrowserOptions(self, options):
2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    options.AppendExtraBrowserArgs(['--enable-gpu-benchmarking',
2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                    '--no-sandbox',
2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                    '--enable-deferred-image-decoding',
2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                    '--force-compositing-mode'])
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def MeasurePage(self, page, tab, results):
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    if tab.browser.platform.GetOSName() in ['android', 'chromeos']:
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      raise page_measurement.MeasurementFailure(
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          'SkPicture printing not supported on this platform')
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # Replace win32 path separator char '\' with '\\'.
37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    outpath = os.path.abspath(
38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        os.path.join(self._skp_outdir, page.file_safe_name))
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    js = _JS.format(outpath.replace('\\', '\\\\'))
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    tab.EvaluateJavaScript(js)
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    pictures = glob.glob(os.path.join(outpath, '*.skp'))
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    results.Add('saved_picture_count', 'count', len(pictures))
43