text: # Copyright 2013 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.
  
  """Multi tab memory test.
  
  This test is a multi tab test, but we're interested in measurements for
  the entire test rather than each single page.
  """
  
  
  from metrics import memory
  from telemetry.page import page_measurement
  
  class MemoryMultiTab(page_measurement.PageMeasurement):
    def __init__(self, *args, **kwargs):
      super(MemoryMultiTab, self).__init__(*args, **kwargs)
      self._memory_metric = None
      # _first_tab is used to make memory measurements
      self._first_tab = None
  
    def DidStartBrowser(self, browser):
      self._memory_metric = memory.MemoryMetric(browser)
  
    def CustomizeBrowserOptions(self, options):
      memory.MemoryMetric.CustomizeBrowserOptions(options)
      # Since this is a memory benchmark, we want to sample memory histograms at
      # a high frequency.
      options.AppendExtraBrowserArgs('--memory-metrics')
  
    def TabForPage(self, page, browser):
      return browser.tabs.New()
  
    def DidNavigateToPage(self, page, tab):
      # Start measurement on the first tab.
      if not self._first_tab:
        self._memory_metric.Start(page, tab)
        self._first_tab = tab
  
    def MeasurePage(self, page, tab, results):
      # Finalize measurement on the last tab.
      if len(tab.browser.tabs) == len(page.page_set.pages):
        self._memory_metric.Stop(page, self._first_tab)
        self._memory_metric.AddResults(self._first_tab, results)
  