blob: ccde029f4a12f8c2a34626dfd767a53f4238e65b [file] [log] [blame]
# Copyright 2017 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from core import perf_benchmark
from contrib.cluster_telemetry import ct_benchmarks_util
from contrib.cluster_telemetry import page_set
from contrib.cluster_telemetry import repaint_helpers
from contrib.cluster_telemetry import screenshot
class ScreenshotCT(perf_benchmark.PerfBenchmark):
"""Captures PNG screenshots of web pages for Cluster Telemetry. Screenshots
written to local file with path-safe urls of pages as filenames. Cluster
Telemetry is then used for aggregation and analysis."""
@classmethod
def Name(cls):
return 'screenshot_ct'
@classmethod
def AddBenchmarkCommandLineArgs(cls, parser):
ct_benchmarks_util.AddBenchmarkCommandLineArgs(parser)
parser.add_option('--png-outdir', type='string',
default=None,
help='Output directory for the PNG files')
parser.add_option('--wait-time', type='float', default=0,
help='Wait time before the benchmark is started')
parser.add_option('--dc-detect', action='store_true', dest='dc_detect',
default=False, help='Detects dynamic content by marking'
'pixels that were not consistent across multiple '
'screenshots with cyan')
parser.add_option('--dc-wait-time', type='float', default=1,
help='Wait time in between screenshots. Only applicable '
'if dc_detect flag is true.')
parser.add_option('--dc-extra-screenshots', type='int', default=1,
help='Number of extra screenshots taken to detect '
'dynamic content. Only applicable if dc_detect flag is '
'true.')
parser.add_option('--dc-threshold', type='float', default=0.5,
help='Maximum tolerable percentage of dynamic content '
'pixels. Raises an exception if percentage of dynamic '
'content is beyond this threshold. Only applicable if '
'dc_detect flag is true.')
@classmethod
def ProcessCommandLineArgs(cls, parser, args):
ct_benchmarks_util.ValidateCommandLineArgs(parser, args)
if not args.png_outdir:
parser.error('Please specify --png-outdir')
def CreatePageTest(self, options):
return screenshot.Screenshot(options.png_outdir, options.wait_time,
options.dc_detect, options.dc_wait_time, options.dc_extra_screenshots,
options.dc_threshold)
def CreateStorySet(self, options):
return page_set.CTPageSet(
options.urls_list, options.user_agent, options.archive_data_file,
run_page_interaction_callback=repaint_helpers.WaitThenRepaint)