| Index: tools/perf/benchmarks/v8_browsing.py
|
| diff --git a/tools/perf/benchmarks/v8_browsing.py b/tools/perf/benchmarks/v8_browsing.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9d2152fa9a36b160886ff9c3884c3a83a03987d6
|
| --- /dev/null
|
| +++ b/tools/perf/benchmarks/v8_browsing.py
|
| @@ -0,0 +1,93 @@
|
| +# Copyright 2016 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.
|
| +
|
| +import re
|
| +
|
| +from core import perf_benchmark
|
| +from telemetry.timeline import chrome_trace_config
|
| +from telemetry.timeline import chrome_trace_category_filter
|
| +from telemetry.web_perf import timeline_based_measurement
|
| +import page_sets
|
| +
|
| +
|
| +# See tr.v.Numeric.getSummarizedScalarNumericsWithNames()
|
| +# https://github.com/catapult-project/catapult/blob/master/tracing/tracing/value/numeric.html#L323
|
| +_IGNORED_MEMORY_STATS_RE = re.compile(r'_(std|count|min|sum|pct_\d{4}(_\d+)?)$')
|
| +
|
| +# Track only the high-level GC stats to reduce the data load on dashboard.
|
| +_IGNORED_V8_STATS_RE = re.compile(
|
| + r'_(idle_deadline_overrun|percentage_idle|outside_idle)')
|
| +_V8_GC_HIGH_LEVEL_STATS_RE = re.compile(r'^v8-gc-('
|
| + r'full-mark-compactor_|'
|
| + r'incremental-finalize_|'
|
| + r'incremental-step_|'
|
| + r'latency-mark-compactor_|'
|
| + r'memory-mark-compactor_|'
|
| + r'scavenger_|'
|
| + r'total_)')
|
| +
|
| +
|
| +class _V8BrowsingBenchmark(perf_benchmark.PerfBenchmark):
|
| + """Base class for V8 browsing benchmarks.
|
| + This benchmark measures memory usage with periodic memory dumps and v8 times.
|
| + See browsing_stories._BrowsingStory for workload description.
|
| + """
|
| +
|
| + def CreateTimelineBasedMeasurementOptions(self):
|
| + categories = [
|
| + # Disable all categories by default.
|
| + '-*',
|
| + # Memory categories.
|
| + 'disabled-by-default-memory-infra',
|
| + # V8 categories.
|
| + 'blink.console',
|
| + 'disabled-by-default-v8.gc',
|
| + 'renderer.scheduler',
|
| + 'v8',
|
| + 'webkit.console',
|
| + ]
|
| + options = timeline_based_measurement.Options(
|
| + chrome_trace_category_filter.ChromeTraceCategoryFilter(
|
| + ','.join(categories)))
|
| + options.config.enable_android_graphics_memtrack = True
|
| + # Trigger periodic light memory dumps every 1000 ms.
|
| + memory_dump_config = chrome_trace_config.MemoryDumpConfig()
|
| + memory_dump_config.AddTrigger('light', 1000)
|
| + options.config.chrome_trace_config.SetMemoryDumpConfig(memory_dump_config)
|
| + options.SetTimelineBasedMetrics(['v8AndMemoryMetrics'])
|
| + return options
|
| +
|
| + @classmethod
|
| + def Name(cls):
|
| + return 'v8.browsing_%s' % cls.page_set.PLATFORM
|
| +
|
| + @classmethod
|
| + def ValueCanBeAddedPredicate(cls, value, is_first_result):
|
| + # TODO(crbug.com/610962): Remove this stopgap when the perf dashboard
|
| + # is able to cope with the data load generated by TBMv2 metrics.
|
| + if 'memory:chrome' in value.name:
|
| + return ('renderer_processes' in value.name and
|
| + not _IGNORED_MEMORY_STATS_RE.search(value.name))
|
| + return (_V8_GC_HIGH_LEVEL_STATS_RE.search(value.name) and
|
| + not _IGNORED_V8_STATS_RE.search(value.name))
|
| +
|
| + @classmethod
|
| + def ShouldTearDownStateAfterEachStoryRun(cls):
|
| + return True
|
| +
|
| +
|
| +class V8DesktopBrowsingBenchmark(_V8BrowsingBenchmark):
|
| + page_set = page_sets.DesktopBrowsingSystemHealthStorySet
|
| +
|
| + @classmethod
|
| + def ShouldDisable(cls, possible_browser):
|
| + return possible_browser.platform.GetDeviceTypeName() != 'Desktop'
|
| +
|
| +
|
| +class V8MobileBrowsingBenchmark(_V8BrowsingBenchmark):
|
| + page_set = page_sets.MobileBrowsingSystemHealthStorySet
|
| +
|
| + @classmethod
|
| + def ShouldDisable(cls, possible_browser):
|
| + return possible_browser.platform.GetDeviceTypeName() == 'Desktop'
|
|
|