chromium/tools/perf/contrib/cluster_telemetry/leak_detection_ct.py

# Copyright 2017 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import py_utils
from contrib.leak_detection import leak_detection as ld

from contrib.cluster_telemetry import ct_benchmarks_util
from contrib.cluster_telemetry import page_set

# pylint: disable=protected-access
class LeakDetectionClusterTelemetry(ld._LeakDetectionBase):

  options = {'upload_results': True}

  @classmethod
  def AddBenchmarkCommandLineArgs(cls, parser):
    super(LeakDetectionClusterTelemetry,
          cls).AddBenchmarkCommandLineArgs(parser)
    ct_benchmarks_util.AddBenchmarkCommandLineArgs(parser)

  def CreateStorySet(self, options):
    def RunNavigateSteps(self, action_runner):
        action_runner.Navigate('about:blank')
        action_runner.PrepareForLeakDetection()
        action_runner.MeasureMemory(True)
        action_runner.Navigate(self.url)
        try:
          py_utils.WaitFor(action_runner.tab.HasReachedQuiescence, timeout=30)
        except py_utils.TimeoutException:
          # Conduct leak detection whether or not loading has finished
          pass
        action_runner.Navigate('about:blank')
        action_runner.PrepareForLeakDetection()
        action_runner.MeasureMemory(True)
    return page_set.CTPageSet(
      options.urls_list, options.user_agent, options.archive_data_file,
      run_navigate_steps_callback=RunNavigateSteps)

  @classmethod
  def Name(cls):
    return 'leak_detection.cluster_telemetry'