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.
5 """Multi tab memory test.
7 This test is a multi tab test, but we're interested in measurements for
8 the entire test rather than each single page.
13 from telemetry
.value
import histogram_util
14 from telemetry
.page
import page_test
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
24 # Allow histogram collection
25 def CustomizeBrowserOptions(self
, options
):
26 histogram_util
.CustomizeBrowserOptions(options
)
28 # Open a new tab at each page
29 def TabForPage(self
, page
, browser
):
30 return browser
.tabs
.New()
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
)
40 def ValidateAndMeasurePage(self
, page
, tab
, results
):
41 # After navigating to each page, check if it triggered tab discards or
43 (discard_count
, kill_count
) = self
.GetTabsHistogramCounts(tab
)
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
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
))