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

Side by Side Diff: tools/perf/measurements/loading_profile.py

Issue 19857003: [Telemetry] Add a profiler based loading measurement. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 5 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 # Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 import os
6 import tempfile
7
8 from telemetry.core import util
9 from telemetry.core.platform.profiler import perf_profiler
10 from telemetry.page import page_measurement
11
12 class LoadingProfile(page_measurement.PageMeasurement):
13 def __init__(self):
14 super(LoadingProfile, self).__init__(discard_first_result=True)
15
16 @property
17 def results_are_the_same_on_every_page(self):
18 return False
19
20 def AddCommandLineOptions(self, parser):
21 # In order to change the default of an option, we must remove and re-add it.
22 page_repeat_option = parser.get_option('--page-repeat')
23 page_repeat_option.default = 2
24 parser.remove_option('--page-repeat')
25 parser.add_option(page_repeat_option)
26
27 def CustomizeBrowserOptions(self, options):
28 options.AppendExtraBrowserArg('--no-sandbox')
29
30 def WillNavigateToPage(self, page, tab):
31 tab.browser.StartProfiling(perf_profiler.PerfProfiler.name(),
32 os.path.join(tempfile.mkdtemp(),
33 page.url_as_file_safe_name))
34
35 def MeasurePage(self, page, tab, results):
36 # In current telemetry tests, all tests wait for DocumentComplete state,
37 # but we need to wait for the load event.
38 def IsLoaded():
39 return bool(tab.EvaluateJavaScript('performance.timing.loadEventStart'))
40 util.WaitFor(IsLoaded, 300)
41
42 profile_files = tab.browser.StopProfiling()
43
44 load_timings = tab.EvaluateJavaScript('window.performance.timing')
45 load_time_ms = (
46 float(load_timings['loadEventStart']) -
47 load_timings['navigationStart'])
48 dom_content_loaded_time_ms = (
49 float(load_timings['domContentLoadedEventStart']) -
50 load_timings['navigationStart'])
51 results.Add('load_time', 'ms', load_time_ms)
52 results.Add('dom_content_loaded_time', 'ms',
53 dom_content_loaded_time_ms)
54
55 profile_file = None
56 for profile_file in profile_files:
57 if 'renderer' in profile_file:
58 break
59
60 for function, period in perf_profiler.PerfProfiler.GetTopSamples(
61 profile_file, 10).iteritems():
62 results.Add(function.replace('.', '_'), 'period', period)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698