small_profile_creator.py revision d0247b1b59f9c528cb6df88b4f2b9afaf80d181e
190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)# Copyright (c) 2013 The Chromium Authors. All rights reserved.
290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)# found in the LICENSE file.
490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)import os
690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
7424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)from telemetry.core import util
890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)from telemetry.page import page_set
9d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)from telemetry.page import page_runner
10424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)from telemetry.page import profile_creator
1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class SmallProfileCreator(profile_creator.ProfileCreator):
1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  """
1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  Runs a browser through a series of operations to fill in a small test profile.
1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  """
1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
17424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  def __init__(self):
18424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    super(SmallProfileCreator, self).__init__()
19424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    top_25 = os.path.join(util.GetBaseDir(), 'page_sets', 'top_25.json')
20424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    self._page_set = page_set.PageSet.FromFile(top_25)
21424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
22d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    # Open all links in the same tab save for the last N_NUM_TABS links which
23d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    # are each opened in a new tab.
24d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    self._NUM_TABS = 5
25d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
26d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  def CanRunForPage(self, page):
27d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    idx = page.page_set.pages.index(page)
28d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    return idx <= (len(page.page_set.pages) - self._NUM_TABS)
29d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
30d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  def DidNavigateToPage(self, page, tab):
31d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    num_pages_in_pageset = len(page.page_set.pages)
32d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    last_tab_loaded_automatically = num_pages_in_pageset - self._NUM_TABS
33d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    page_index = page.page_set.pages.index(page)
34d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    if (page_index == last_tab_loaded_automatically):
35d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      for i in xrange(last_tab_loaded_automatically + 1, num_pages_in_pageset):
36d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        # Load the last _NUM_TABS pages, each in a new tab.
37d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        t = tab.browser.tabs.New()
38d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
39d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        page_state = page_runner.PageState()
40d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        page_state.PreparePage(page.page_set.pages[i], t)
41d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        page_state.ImplicitPageNavigation(page.page_set.pages[i], t)
42d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
43d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        t.WaitForDocumentReadyStateToBeInteractiveOrBetter()
44d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
45d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
46424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  def MeasurePage(self, _, tab, results):
4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    # Can't use WaitForDocumentReadyStateToBeComplete() here due to
4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    # crbug.com/280750 .
4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    tab.WaitForDocumentReadyStateToBeInteractiveOrBetter()
50