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