Home | History | Annotate | Download | only in measurements
      1 # Copyright 2013 The Chromium Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 """Multi tab memory test.
      6 
      7 This test is a multi tab test, but we're interested in measurements for
      8 the entire test rather than each single page.
      9 """
     10 
     11 import logging
     12 
     13 from telemetry.value import histogram_util
     14 from telemetry.page import page_test
     15 
     16 
     17 class MemoryPressure(page_test.PageTest):
     18   def __init__(self, *args, **kwargs):
     19     super(MemoryPressure, self).__init__(*args, **kwargs)
     20     # _first_tab is used to access histograms
     21     self._is_first_page = True
     22     self._tab_count = 0
     23 
     24   # Allow histogram collection
     25   def CustomizeBrowserOptions(self, options):
     26     histogram_util.CustomizeBrowserOptions(options)
     27 
     28   # Open a new tab at each page
     29   def TabForPage(self, page, browser):
     30     return browser.tabs.New()
     31 
     32   def GetTabsHistogramCounts(self, tab):
     33     histogram_type = histogram_util.BROWSER_HISTOGRAM
     34     discard_count = histogram_util.GetHistogramCount(
     35       histogram_type, "Tabs.Discard.DiscardCount", tab)
     36     kill_count = histogram_util.GetHistogramCount(
     37       histogram_type, "Tabs.SadTab.KillCreated", tab)
     38     return (discard_count, kill_count)
     39 
     40   def ValidateAndMeasurePage(self, page, tab, results):
     41     # After navigating to each page, check if it triggered tab discards or
     42     # kills.
     43     (discard_count, kill_count) = self.GetTabsHistogramCounts(tab)
     44 
     45     # Sanity check for first page
     46     if self._is_first_page:
     47       self._is_first_page = False
     48       assert discard_count == 0 and kill_count == 0
     49 
     50     self._tab_count += 1
     51     # End the test at the first kill or discard.
     52     if kill_count > 0 or discard_count > 0:
     53       logging.info("test ending at tab %d, discards = %d, kills = %d" %
     54         (self._tab_count, discard_count, kill_count))
     55       self.RequestExit()
     56