Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(29)

Side by Side Diff: tools/perf/page_sets/system_health/multi_tab_stories.py

Issue 2706483003: Add Multi-tab System Health Story (Closed)
Patch Set: Refactoring Benchmark TabSwitching Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 # Copyright 2017 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 import json
6 import py_utils
7 import logging
8
9 from telemetry.value import histogram_util
10 from page_sets.system_health import system_health_story
11 from page_sets.system_health import platforms
12
13
14 class _MultiTabStory(system_health_story.SystemHealthStory):
15 ABSTRACT_STORY = True
16 def __init__(self, story_set, take_memory_measurement):
17 self.URL = self.URL_LIST[0]
18 super(_MultiTabStory, self).__init__(story_set, take_memory_measurement)
19 self._tabs = None
20 self._prev_histogram = None
21
22 @classmethod
23 def _GetTabSwitchHistogram(cls, tab_to_switch):
24 histogram_name = 'MPArch.RWH_TabSwitchPaintDuration'
25 histogram_type = histogram_util.BROWSER_HISTOGRAM
26 return histogram_util.GetHistogram(
27 histogram_type, histogram_name, tab_to_switch)
28
29 def _WaitTabSwitchComplete(self, tab_to_switch):
30 def _IsDone():
31 # pylint: disable=W0640
eakuefner 2017/03/01 16:52:13 nit: please write out the name of the rule you're
vovoy 2017/03/02 09:30:27 Removed this function in the next patch.
32 cur_histogram = self._GetTabSwitchHistogram(tab_to_switch)
33 diff_histogram = histogram_util.SubtractHistogram(
34 cur_histogram, self._prev_histogram)
35 # TODO(deanliao): Add SubtractHistogramRawValue to process histogram
36 # object instead of JSON string.
37 diff_histogram_count = json.loads(diff_histogram).get('count', 0)
38 return diff_histogram_count > 0
39 py_utils.WaitFor(_IsDone, 30)
40
41 # We need to get histogram again instead of getting cur_histogram as
42 # variables modified inside inner function cannot be retrieved. However,
43 # inner function can see external scope's variables.
44 self._prev_histogram = self._GetTabSwitchHistogram(tab_to_switch)
45
46 def RunNavigateSteps(self, action_runner):
47 super(_MultiTabStory, self).RunNavigateSteps(action_runner)
48
49 # create tabs
eakuefner 2017/03/01 16:52:13 nit: this comment seems unnecessary because it rep
vovoy 2017/03/02 09:30:27 Done.
50 browser = action_runner.tab.browser
51 self._tabs = [action_runner.tab]
52
53 for i in range(1, len(self.URL_LIST)):
54 new_tab = browser.tabs.New()
55 self._tabs.append(new_tab)
56 new_tab.action_runner.Navigate(self.URL_LIST[i])
57
58 for i in range(len(self.URL_LIST)):
59 try:
60 py_utils.WaitFor(self._tabs[i].HasReachedQuiescence, 15)
61 except py_utils.TimeoutException:
62 logging.warning('HasReachedQuiescence timeout, url[%d]: %s'
63 % (i, self.URL_LIST[i]))
64
65 def RunPageInteractions(self, action_runner):
66 # get initial histogram
67 self._prev_histogram = self._GetTabSwitchHistogram(self._tabs[-1])
68
69 # tab switching
70 for i in range(len(self._tabs)):
71 self._tabs[i].Activate()
72 self._WaitTabSwitchComplete(self._tabs[i])
73
74
75 class MultiTabTypical24Story(_MultiTabStory):
76 NAME = 'multitab:typical24:typical24'
77 URL_LIST = [
78 # Why: Alexa games #48
79 'http://www.nick.com/games',
80 # Why: Alexa sports #45
81 'http://www.rei.com/',
82 # Why: Alexa sports #50
83 'http://www.fifa.com/',
84 # Why: Alexa shopping #41
85 'http://www.gamestop.com/ps3',
86 # Why: Alexa news #55
87 ('http://www.economist.com/news/science-and-technology/21573529-small-'
88 'models-cosmic-phenomena-are-shedding-light-real-thing-how-build'),
89 # Why: Alexa news #67
90 'http://www.theonion.com',
91 'http://arstechnica.com/',
92 # Why: Alexa home #10
93 'http://allrecipes.com/Recipe/Pull-Apart-Hot-Cross-Buns/Detail.aspx',
94 'http://www.html5rocks.com/en/',
95 'http://www.mlb.com/',
96 'http://gawker.com/5939683/based-on-a-true-story-is-a-rotten-lie-i-hope-you- never-believe',
97 'http://www.imdb.com/title/tt0910970/',
98 'http://www.flickr.com/search/?q=monkeys&f=hp',
99 'http://money.cnn.com/',
100 'http://www.nationalgeographic.com/',
101 'http://premierleague.com',
102 'http://www.osubeavers.com/',
103 'http://walgreens.com',
104 'http://colorado.edu',
105 ('http://www.ticketmaster.com/JAY-Z-and-Justin-Timberlake-tickets/artist/'
106 '1837448?brand=none&tm_link=tm_homeA_rc_name2'),
107 # pylint: disable=line-too-long
108 'http://www.theverge.com/2013/3/5/4061684/inside-ted-the-smartest-bubble-in- the-world',
109 'http://www.airbnb.com/',
110 'http://www.ign.com/',
111 # Why: Alexa health #25
112 'http://www.fda.gov',
113 ]
114 SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
115
116 class MultiTabFiveBlankPagesStory(_MultiTabStory):
117 NAME = 'multitab:blanks:blanks'
118 URL_LIST = [
119 'about:blank',
120 'about:blank',
121 'about:blank',
122 'about:blank',
123 'about:blank',
124 ]
125 SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
126
127
128 class MultiTabTop9Story(_MultiTabStory):
129 NAME = 'multitab:top9:top9'
130 URL_LIST = [
131 'https://www.google.com/#hl=en&q=barack+obama',
132 'https://www.google.com/calendar/',
133 'http://www.youtube.com',
134 'https://www.facebook.com/barackobama',
135 'http://en.wikipedia.org/wiki/Wikipedia',
136 'http://www.amazon.com',
137 'http://www.yahoo.com/',
138 'http://www.bing.com/',
139 'http://www.ask.com/'
140 ]
141 SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
142
143
144 class MultiTabToughImageCasesStory(_MultiTabStory):
145 NAME = 'multitab:toughimage:toughimage'
146 URL_LIST = [
147 ('https://upload.wikimedia.org/wikipedia/commons/b/b3/'
148 'KC-130_performs_mid-air_refueling_over_Beaufort_150319-'
149 'M-ZZ999-306.jpg'),
150 ('http://upload.wikimedia.org/wikipedia/commons/c/cb/'
151 'General_history%2C_Alaska_Yukon_Pacific_Exposition%'
152 '2C_fully_illustrated_-_meet_me_in_Seattle_1909_-_Page_78.jpg')
153 ]
154 SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
155
156
157 class MultiTabToughEnergyCasesStory(_MultiTabStory):
158 NAME = 'multitab:toughenergy:toughenergy'
159 URL_LIST = [
160 'http://codepen.io/testificate364/full/nrbDc',
161 'http://codepen.io/testificate364/full/fhKCg',
162 'http://codepen.io/testificate364/full/paJhg',
163 'http://codepen.io/testificate364/full/yaosK',
164 'http://codepen.io/testificate364/full/DLbxg',
165 'http://codepen.io/testificate364/full/kFvpd',
166 'http://codepen.io/testificate364/full/lEhyw',
167 'http://codepen.io/testificate364/full/zhgBD',
168 'http://codepen.io/testificate364/full/jetyn',
169 'http://codepen.io/testificate364/full/Kvdxs',
170 'http://codepen.io/testificate364/full/lJAiH',
171 'http://codepen.io/testificate364/full/EFceH',
172 'http://codepen.io/testificate364/full/slBue',
173 'http://codepen.io/testificate364/full/HdIgr',
174 ]
175 SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698