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

Unified 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, 10 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 side-by-side diff with in-line comments
Download patch
Index: tools/perf/page_sets/system_health/multi_tab_stories.py
diff --git a/tools/perf/page_sets/system_health/multi_tab_stories.py b/tools/perf/page_sets/system_health/multi_tab_stories.py
new file mode 100644
index 0000000000000000000000000000000000000000..21cc4498ad5ae635c999c8fc847e4e05dcfcd16b
--- /dev/null
+++ b/tools/perf/page_sets/system_health/multi_tab_stories.py
@@ -0,0 +1,175 @@
+# Copyright 2017 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.
+
+import json
+import py_utils
+import logging
+
+from telemetry.value import histogram_util
+from page_sets.system_health import system_health_story
+from page_sets.system_health import platforms
+
+
+class _MultiTabStory(system_health_story.SystemHealthStory):
+ ABSTRACT_STORY = True
+ def __init__(self, story_set, take_memory_measurement):
+ self.URL = self.URL_LIST[0]
+ super(_MultiTabStory, self).__init__(story_set, take_memory_measurement)
+ self._tabs = None
+ self._prev_histogram = None
+
+ @classmethod
+ def _GetTabSwitchHistogram(cls, tab_to_switch):
+ histogram_name = 'MPArch.RWH_TabSwitchPaintDuration'
+ histogram_type = histogram_util.BROWSER_HISTOGRAM
+ return histogram_util.GetHistogram(
+ histogram_type, histogram_name, tab_to_switch)
+
+ def _WaitTabSwitchComplete(self, tab_to_switch):
+ def _IsDone():
+ # 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.
+ cur_histogram = self._GetTabSwitchHistogram(tab_to_switch)
+ diff_histogram = histogram_util.SubtractHistogram(
+ cur_histogram, self._prev_histogram)
+ # TODO(deanliao): Add SubtractHistogramRawValue to process histogram
+ # object instead of JSON string.
+ diff_histogram_count = json.loads(diff_histogram).get('count', 0)
+ return diff_histogram_count > 0
+ py_utils.WaitFor(_IsDone, 30)
+
+ # We need to get histogram again instead of getting cur_histogram as
+ # variables modified inside inner function cannot be retrieved. However,
+ # inner function can see external scope's variables.
+ self._prev_histogram = self._GetTabSwitchHistogram(tab_to_switch)
+
+ def RunNavigateSteps(self, action_runner):
+ super(_MultiTabStory, self).RunNavigateSteps(action_runner)
+
+ # 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.
+ browser = action_runner.tab.browser
+ self._tabs = [action_runner.tab]
+
+ for i in range(1, len(self.URL_LIST)):
+ new_tab = browser.tabs.New()
+ self._tabs.append(new_tab)
+ new_tab.action_runner.Navigate(self.URL_LIST[i])
+
+ for i in range(len(self.URL_LIST)):
+ try:
+ py_utils.WaitFor(self._tabs[i].HasReachedQuiescence, 15)
+ except py_utils.TimeoutException:
+ logging.warning('HasReachedQuiescence timeout, url[%d]: %s'
+ % (i, self.URL_LIST[i]))
+
+ def RunPageInteractions(self, action_runner):
+ # get initial histogram
+ self._prev_histogram = self._GetTabSwitchHistogram(self._tabs[-1])
+
+ # tab switching
+ for i in range(len(self._tabs)):
+ self._tabs[i].Activate()
+ self._WaitTabSwitchComplete(self._tabs[i])
+
+
+class MultiTabTypical24Story(_MultiTabStory):
+ NAME = 'multitab:typical24:typical24'
+ URL_LIST = [
+ # Why: Alexa games #48
+ 'http://www.nick.com/games',
+ # Why: Alexa sports #45
+ 'http://www.rei.com/',
+ # Why: Alexa sports #50
+ 'http://www.fifa.com/',
+ # Why: Alexa shopping #41
+ 'http://www.gamestop.com/ps3',
+ # Why: Alexa news #55
+ ('http://www.economist.com/news/science-and-technology/21573529-small-'
+ 'models-cosmic-phenomena-are-shedding-light-real-thing-how-build'),
+ # Why: Alexa news #67
+ 'http://www.theonion.com',
+ 'http://arstechnica.com/',
+ # Why: Alexa home #10
+ 'http://allrecipes.com/Recipe/Pull-Apart-Hot-Cross-Buns/Detail.aspx',
+ 'http://www.html5rocks.com/en/',
+ 'http://www.mlb.com/',
+ 'http://gawker.com/5939683/based-on-a-true-story-is-a-rotten-lie-i-hope-you-never-believe',
+ 'http://www.imdb.com/title/tt0910970/',
+ 'http://www.flickr.com/search/?q=monkeys&f=hp',
+ 'http://money.cnn.com/',
+ 'http://www.nationalgeographic.com/',
+ 'http://premierleague.com',
+ 'http://www.osubeavers.com/',
+ 'http://walgreens.com',
+ 'http://colorado.edu',
+ ('http://www.ticketmaster.com/JAY-Z-and-Justin-Timberlake-tickets/artist/'
+ '1837448?brand=none&tm_link=tm_homeA_rc_name2'),
+ # pylint: disable=line-too-long
+ 'http://www.theverge.com/2013/3/5/4061684/inside-ted-the-smartest-bubble-in-the-world',
+ 'http://www.airbnb.com/',
+ 'http://www.ign.com/',
+ # Why: Alexa health #25
+ 'http://www.fda.gov',
+ ]
+ SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
+
+class MultiTabFiveBlankPagesStory(_MultiTabStory):
+ NAME = 'multitab:blanks:blanks'
+ URL_LIST = [
+ 'about:blank',
+ 'about:blank',
+ 'about:blank',
+ 'about:blank',
+ 'about:blank',
+ ]
+ SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
+
+
+class MultiTabTop9Story(_MultiTabStory):
+ NAME = 'multitab:top9:top9'
+ URL_LIST = [
+ 'https://www.google.com/#hl=en&q=barack+obama',
+ 'https://www.google.com/calendar/',
+ 'http://www.youtube.com',
+ 'https://www.facebook.com/barackobama',
+ 'http://en.wikipedia.org/wiki/Wikipedia',
+ 'http://www.amazon.com',
+ 'http://www.yahoo.com/',
+ 'http://www.bing.com/',
+ 'http://www.ask.com/'
+ ]
+ SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
+
+
+class MultiTabToughImageCasesStory(_MultiTabStory):
+ NAME = 'multitab:toughimage:toughimage'
+ URL_LIST = [
+ ('https://upload.wikimedia.org/wikipedia/commons/b/b3/'
+ 'KC-130_performs_mid-air_refueling_over_Beaufort_150319-'
+ 'M-ZZ999-306.jpg'),
+ ('http://upload.wikimedia.org/wikipedia/commons/c/cb/'
+ 'General_history%2C_Alaska_Yukon_Pacific_Exposition%'
+ '2C_fully_illustrated_-_meet_me_in_Seattle_1909_-_Page_78.jpg')
+ ]
+ SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
+
+
+class MultiTabToughEnergyCasesStory(_MultiTabStory):
+ NAME = 'multitab:toughenergy:toughenergy'
+ URL_LIST = [
+ 'http://codepen.io/testificate364/full/nrbDc',
+ 'http://codepen.io/testificate364/full/fhKCg',
+ 'http://codepen.io/testificate364/full/paJhg',
+ 'http://codepen.io/testificate364/full/yaosK',
+ 'http://codepen.io/testificate364/full/DLbxg',
+ 'http://codepen.io/testificate364/full/kFvpd',
+ 'http://codepen.io/testificate364/full/lEhyw',
+ 'http://codepen.io/testificate364/full/zhgBD',
+ 'http://codepen.io/testificate364/full/jetyn',
+ 'http://codepen.io/testificate364/full/Kvdxs',
+ 'http://codepen.io/testificate364/full/lJAiH',
+ 'http://codepen.io/testificate364/full/EFceH',
+ 'http://codepen.io/testificate364/full/slBue',
+ 'http://codepen.io/testificate364/full/HdIgr',
+ ]
+ SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY

Powered by Google App Engine
This is Rietveld 408576698