146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)# Copyright 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) 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)from telemetry.page import page_test 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdochfrom telemetry.value import scalar 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 109ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)_JS = 'chrome.gpuBenchmarking.printToSkPicture("{0}");' 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 139ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class SkpicturePrinter(page_test.PageTest): 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) @classmethod 16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) def AddCommandLineArgs(cls, parser): 17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) parser.add_option('-s', '--skp-outdir', 18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) help='Output directory for the SKP files') 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) @classmethod 21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) def ProcessCommandLineArgs(cls, parser, args): 22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if not args.skp_outdir: 23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) parser.error('Please specify --skp-outdir') 24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cls._skp_outdir = args.skp_outdir 25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def CustomizeBrowserOptions(self, options): 2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) options.AppendExtraBrowserArgs(['--enable-gpu-benchmarking', 2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) '--no-sandbox', 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch '--enable-deferred-image-decoding']) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) def ValidateAndMeasurePage(self, page, tab, results): 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if tab.browser.platform.GetOSName() in ['android', 'chromeos']: 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) raise page_test.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')) 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch results.AddValue(scalar.ScalarValue( 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch results.current_page, 'saved_picture_count', 'count', len(pictures))) 44