# 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.

from core import perf_benchmark

from telemetry import benchmark
from telemetry.timeline import chrome_trace_category_filter
from telemetry.timeline import chrome_trace_config
from telemetry.web_perf import timeline_based_measurement

import page_sets


@benchmark.Info(emails=['ssid@chromium.org'])
class TracingWithBackgroundMemoryInfra(perf_benchmark.PerfBenchmark):
  """Measures the overhead of background memory-infra dumps"""
  page_set = page_sets.Top10PageSet

  def CreateCoreTimelineBasedMeasurementOptions(self):
    # Enable only memory-infra category with periodic background mode dumps
    # every 200 milliseconds.
    trace_memory = chrome_trace_category_filter.ChromeTraceCategoryFilter(
        filter_string='-*,blink.console,disabled-by-default-memory-infra')
    options = timeline_based_measurement.Options(overhead_level=trace_memory)
    memory_dump_config = chrome_trace_config.MemoryDumpConfig()
    memory_dump_config.AddTrigger('background', 200)
    options.config.chrome_trace_config.SetMemoryDumpConfig(memory_dump_config)
    options.SetTimelineBasedMetrics(['tracingMetric'])
    return options

  @classmethod
  def Name(cls):
    return 'tracing.tracing_with_background_memory_infra'
