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

Unified Diff: tools/perf/page_sets/tab_switching_cases.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
« no previous file with comments | « tools/perf/measurements/tab_switching_unittest.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/perf/page_sets/tab_switching_cases.py
diff --git a/tools/perf/page_sets/tab_switching_cases.py b/tools/perf/page_sets/tab_switching_cases.py
new file mode 100644
index 0000000000000000000000000000000000000000..ae85ef09b640132f0278c17702b5bf1553356d98
--- /dev/null
+++ b/tools/perf/page_sets/tab_switching_cases.py
@@ -0,0 +1,194 @@
+# Copyright 2014 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
+
+from telemetry.page import page as page_module
+from telemetry.page import shared_page_state
+from telemetry import story
+from telemetry.value import histogram_util
+
+
+class MultiTabStory(page_module.Page):
+ def __init__(self, page_set, urls_list):
+ super(MultiTabStory, self).__init__(url=urls_list[0], page_set=page_set,
+ credentials_path='data/credentials.json',
+ shared_page_state_class=shared_page_state.SharedDesktopPageState)
+ self._urls = urls_list
+ 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
+ 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 all tabs
+
+ browser = action_runner.tab.browser
+ # create tabs
+ self._tabs = [action_runner.tab]
+
+ for i in range(1, len(self._urls)):
+ new_tab = browser.tabs.New()
+ self._tabs.append(new_tab)
+ new_tab.action_runner.Navigate(self._urls[i])
+
+ for i in range(len(self._urls)):
+ py_utils.WaitFor(self._tabs[i].HasReachedQuiescence, 30)
+
+ 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 MultiTabTypical24StorySet(story.StorySet):
+ """ Pages designed to represent the median, not highly optimized web """
+ def __init__(self):
+ super(MultiTabTypical24StorySet, self).__init__(
+ archive_data_file='data/typical_25.json',
+ cloud_storage_bucket=story.PARTNER_BUCKET)
+
+ urls_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',
+ ]
+ self.AddStory(MultiTabStory(self, urls_list))
+
+
+class MultiTabFiveBlankPagesStorySet(story.StorySet):
+ def __init__(self):
+ super(MultiTabFiveBlankPagesStorySet, self).__init__()
+ # archive_data_file='data/typical_25.json',
+ # cloud_storage_bucket=story.PARTNER_BUCKET)
+
+ urls_list = [
+ 'file://blank_page/blank_page.html',
+ 'file://blank_page/blank_page.html',
+ 'file://blank_page/blank_page.html',
+ 'file://blank_page/blank_page.html',
+ 'file://blank_page/blank_page.html',
+ #'about:blank',
+ ]
+ self.AddStory(MultiTabStory(self, urls_list))
+
+
+class MultiTabTop10StorySet(story.StorySet):
+ def __init__(self):
+ super(MultiTabTop10StorySet, self).__init__(
+ archive_data_file='data/top_10.json',
+ cloud_storage_bucket=story.PARTNER_BUCKET)
+
+ urls_list = [
+ 'https://www.google.com/#hl=en&q=barack+obama',
+ #'https://mail.google.com/mail/',
+ '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/'
+ ]
+ self.AddStory(MultiTabStory(self, urls_list))
+
+
+class MultiTabToughImageCasesStorySet(story.StorySet):
+ def __init__(self):
+ super(MultiTabToughImageCasesStorySet, self).__init__()
+
+ urls_list = [
+ 'http://www.free-pictures-photos.com/aviation/airplane-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')
+ ]
+ self.AddStory(MultiTabStory(self, urls_list))
+
+
+class MultiTabToughEnergyCasesStorySet(story.StorySet):
+ def __init__(self):
+ super(MultiTabToughEnergyCasesStorySet, self).__init__(
+ archive_data_file='data/tough_energy_cases.json',
+ cloud_storage_bucket=story.PARTNER_BUCKET)
+
+ urls_list = [
+ 'http://codepen.io/testificate364/debug/nrbDc',
+ 'http://codepen.io/testificate364/debug/fhKCg',
+ 'http://codepen.io/testificate364/debug/paJhg',
+ 'http://codepen.io/testificate364/debug/yaosK',
+ 'http://codepen.io/testificate364/debug/DLbxg',
+ 'http://codepen.io/testificate364/debug/kFvpd',
+ 'http://codepen.io/testificate364/debug/lEhyw',
+ 'http://codepen.io/testificate364/debug/zhgBD',
+ 'http://codepen.io/testificate364/debug/jetyn',
+ 'http://codepen.io/testificate364/debug/Kvdxs',
+ 'http://codepen.io/testificate364/debug/lJAiH',
+ 'http://codepen.io/testificate364/debug/EFceH',
+ 'http://codepen.io/testificate364/debug/slBue',
+ 'http://codepen.io/testificate364/debug/HdIgr',
+ ]
+ self.AddStory(MultiTabStory(self, urls_list))
« no previous file with comments | « tools/perf/measurements/tab_switching_unittest.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698