chromium/tools/perf/contrib/leak_detection/page_sets.py

# Copyright 2017 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import py_utils
from telemetry import story as story_module
from telemetry.page import page as page_module
from telemetry.page import shared_page_state

class LeakDetectionSharedState(shared_page_state.SharedDesktopPageState):
  def ShouldReuseBrowserForAllStoryRuns(self):
    return True


class LeakDetectionPage(page_module.Page):
  def __init__(self, url, page_set, name=''):
    super(LeakDetectionPage, self).__init__(
      url=url, page_set=page_set, name=name,
      shared_page_state_class=LeakDetectionSharedState)

  def RunNavigateSteps(self, action_runner):
    tabs = action_runner.tab.browser.tabs
    new_tab = tabs.New()
    new_tab.action_runner.Navigate('about:blank')
    new_tab.action_runner.PrepareForLeakDetection()
    new_tab.action_runner.MeasureMemory()
    new_tab.action_runner.Navigate(self.url)
    self._WaitForPageLoadToComplete(new_tab.action_runner)
    new_tab.action_runner.Navigate('about:blank')
    new_tab.action_runner.PrepareForLeakDetection()
    new_tab.action_runner.MeasureMemory()
    new_tab.Close()

  def _WaitForPageLoadToComplete(self, action_runner):
    py_utils.WaitFor(action_runner.tab.HasReachedQuiescence, timeout=30)


# Some websites have a script that loads resources continuously, in which cases
# HasReachedQuiescence would not be reached. This class waits for document ready
# state to be complete to avoid timeout for those pages.
class ResourceLoadingLeakDetectionPage(LeakDetectionPage):
  def _WaitForPageLoadToComplete(self, action_runner):
    action_runner.tab.WaitForDocumentReadyStateToBeComplete()


class LeakDetectionStorySet(story_module.StorySet):
  def __init__(self):
    super(LeakDetectionStorySet, self).__init__(
      archive_data_file='data/leak_detection.json',
      cloud_storage_bucket=story_module.PARTNER_BUCKET)
    urls_list = [
        # Alexa top websites
        'https://www.google.com',
        'https://www.youtube.com',
        'https://www.facebook.com',
        'https://www.baidu.com',
        'https://www.wikipedia.org',
        'https://world.taobao.com/',
        'https://www.tmall.com/',
        'http://www.amazon.com',
        'http://www.twitter.com',
        'https://www.instagram.com/',
        'http://www.jd.com/',
        'https://vk.com/',
        'https://outlook.live.com',
        'https://www.reddit.com/',
        'https://weibo.com/',
        'https://www.sina.com.cn/',
        'https://www.360.cn/',
        'https://yandex.ru/',
        'https://www.blogger.com/',
        'https://www.netflix.com/',
        'https://www.pornhub.com/',
        'https://www.linkedin.com/',
        'https://www.yahoo.co.jp/',
        'https://www.csdn.net/',
        'https://www.alipay.com/',
        'https://www.twitch.tv/',
        # TODO(keishi): Memory dump fails flakily crbug.com/963273
        #'https://www.ebay.com/',
        # TODO(keishi): Memory dump fails flakily crbug.com/963273
        #'https://www.microsoft.com/',
        # TODO(keishi): Memory dump fails flakily crbug.com/963273
        #'https://www.xvideos.com/',
        'https://mail.ru/',
        'https://www.bing.com/',
        'http://www.wikia.com/',
        'https://www.office.com/',
        'https://www.imdb.com/',
        'https://www.aliexpress.com/',
        'https://www.msn.com/',
        'https://news.google.com/',
        'https://www.theguardian.com/',
        'https://www.indiatimes.com/',
        # TODO(keishi): Memory dump fails flakily crbug.com/963273
        #'http://www.foxnews.com/',
        'https://weather.com/',
        'https://www.shutterstock.com/',
        'https://docs.google.com/',
        'https://wordpress.com/',
        # TODO(yuzus): This test crashes.
        # 'https://www.apple.com/',
        'https://play.google.com/store',
        'https://www.dropbox.com/',
        'https://soundcloud.com/',
        'https://vimeo.com/',
        'https://www.slideshare.net/',
        'https://www.mediafire.com/',
        'https://www.etsy.com/',
        'https://www.ikea.com/',
        'https://www.bestbuy.com/',
        'https://www.homedepot.com/',
        # TODO(keishi): Memory dump fails flakily crbug.com/963273
        #'https://www.target.com/',
        'https://www.booking.com/',
        'https://www.tripadvisor.com/',
        'https://9gag.com/',
        'https://www.expedia.com/',
        'https://www.roblox.com/',
        'https://www.gamespot.com/',
        'https://www.blizzard.com',
        # TODO(keishi): Memory dump fails flakily crbug.com/963273
        #'https://ign.com/',
        'https://www.yelp.com/',
        # Times out waiting for HasReachedQuiescence - crbug.com/927427
        # 'https://gizmodo.com/',
        'https://www.gsmarena.com/',
        'https://www.theverge.com/',
        'https://www.nlm.nih.gov/',
        'https://archive.org/',
        'https://www.udemy.com/',
        'https://answers.yahoo.com/',
        # TODO(crbug.com/41471571): Memory dump fails flakily.
        # 'https://www.goodreads.com/',
        'https://www.cricbuzz.com/',
        'http://www.goal.com/',
        'http://siteadvisor.com/',
        'https://www.patreon.com/',
        'https://www.jw.org/',
        'http://europa.eu/',
        'https://translate.google.com/',
        'https://www.epicgames.com/',
        'http://www.reverso.net/',
        'https://play.na.leagueoflegends.com/',
        'https://www.thesaurus.com/',
        'https://www.weebly.com/',
        'https://www.deviantart.com/',
        'https://www.scribd.com/',
        'https://www.hulu.com/',
        'https://www.xfinity.com/',
        # India Alexa top websites
        'https://porn555.com/',
        'https://www.onlinesbi.com/',
        'https://www.flipkart.com/',
        'https://www.hotstar.com/',
        'https://www.incometaxindiaefiling.gov.in/',
        'https://stackoverflow.com/',
        # TODO(crbug.com/40099304) Memory dump fails flakily.
        # 'https://www.irctc.co.in/nget/',
        'https://www.hdfcbank.com/',
        'https://www.whatsapp.com/',
        'https://uidai.gov.in/',
        'https://billdesk.com/',
        'https://www.icicibank.com/',
        # US Alexa top websites
        'https://imgur.com/',
        'https://www.craigslist.org/',
        'https://www.chase.com/',
        # TODO(crbug.com/41419049): tumblr started timing out due to a catapult
        # roll. See https://crbug.com/892352
        # 'https://www.tumblr.com/',
        'https://www.paypal.com/',
        # TODO(yuzus): espn.com is flaky. https://crbug.com/959796
        #'http://www.espn.com/',
        'https://edition.cnn.com/',
        'https://www.pinterest.com/',
        # TODO(keishi): Memory dump fails flakily crbug.com/963273
        #'https://www.nytimes.com/',
        'https://github.com/',
        'https://www.salesforce.com/',
        # Japan Alexa top websites
        'https://www.rakuten.co.jp/',
        'http://www.nicovideo.jp/',
        'https://fc2.com/',
        'https://ameblo.jp/',
        'http://kakaku.com/',
        'https://www.goo.ne.jp/',
        'https://www.pixiv.net/',
        # websites which were found to be leaking in the past
        'https://www.prezi.com',
        # TODO(keishi): Memory dump fails flakily crbug.com/963273
        #'http://www.time.com',
        'http://www.cheapoair.com',
        'http://www.onlinedown.net',
        'http://www.dailypost.ng',
        'http://www.aljazeera.net',
        'http://www.googleapps.com',
        'http://www.airbnb.ch',
        'http://www.livedoor.jp',
        'http://www.blu-ray.com',
        # TODO(crbug.com/40623301): Test times out.
        # 'http://www.block.io',
        'http://www.hockeybuzz.com',
        'http://www.silverpop.com',
        'http://www.ansa.it',
        'http://www.gulfair.com',
        'http://www.nusatrip.com',
        'http://www.samsung-fun.ru',
        'http://www.opentable.com',
        'http://www.magnetmail.net',
        'http://zzz.com.ua',
        'http://a-rakumo.appspot.com',
        'http://www.sakurafile.com',
        'http://www.psiexams.com',
        'http://www.contentful.com',
        'http://www.estibot.com',
        'http://www.mbs.de',
        'http://www.zhengjie.com',
        'http://www.sjp.pl',
        'http://www.mastodon.social',
        'http://www.horairetrain.net',
        'http://www.torrentzeu.to',
        'http://www.inbank.it',
        'http://www.gradpoint.com',
        'http://www.mail.bg',
        'http://www.aaannunci.it',
        'http://www.leandomainsearch.com',
        'http://www.wpjam.com',
        'http://www.nigma.ru',
        'http://www.do-search.com',
        'http://www.omniboxes.com',
        'http://whu.edu.cn',
        'http://support.wordpress.com',
        'http://www.webwebweb.com',
        'http://www.sick.com',
        'http://www.iowacconline.com',
        'http://hdu.edu.cn',
        'http://www.register.com',
        'http://www.careesma.in',
        'http://www.bestdic.ir',
        'http://www.privacyassistant.net',
        'http://www.sklavenzentrale.com',
        'http://www.podbay.fm',
        'http://www.coco.fr',
        'http://www.skipaas.com',
        'http://www.chatword.org',
        'http://www.ezcardinfo.com',
        'http://www.daydao.com',
        'http://www.expediapartnercentral.com',
        'http://www.22find.com',
        'http://www.e-shop.gr',
        'http://www.indeed.com',
        'http://www.highwaybus.com',
        'http://www.pingpang.info',
        'http://www.besgold.com',
        'http://www.arabam.com',
        'http://makfax.com.mk',
        'http://game.co.za',
        'http://www.savaari.com',
        'http://www.railsguides.jp',
    ]
    resource_loading_urls_list = [
      'https://www.hotels.com/',
      'https://www.livejournal.com/',
      # TODO(keishi): Memory dump fails flakily crbug.com/963273
      #'https://www.yahoo.com',
      'http://www.quora.com',
      'https://www.macys.com',
      'http://infomoney.com.br',
      'http://www.listindiario.com',
      'https://www.engadget.com/',
      'https://www.sohu.com/',
      'http://www.qq.com',
      'http://www.benzworld.org',
      'http://www.520mojing.com',
    ]
    for url in urls_list:
      self.AddStory(LeakDetectionPage(url, self, url))
    for url in resource_loading_urls_list:
      self.AddStory(ResourceLoadingLeakDetectionPage(url, self, url))