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