| Index: tools/perf/measurements/loading_profile.py
|
| diff --git a/tools/perf/measurements/loading_profile.py b/tools/perf/measurements/loading_profile.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..405ee81e2d0d1c057ef0dadbd084e07ca225d4df
|
| --- /dev/null
|
| +++ b/tools/perf/measurements/loading_profile.py
|
| @@ -0,0 +1,62 @@
|
| +# Copyright (c) 2013 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 os
|
| +import tempfile
|
| +
|
| +from telemetry.core import util
|
| +from telemetry.core.platform.profiler import perf_profiler
|
| +from telemetry.page import page_measurement
|
| +
|
| +class LoadingProfile(page_measurement.PageMeasurement):
|
| + def __init__(self):
|
| + super(LoadingProfile, self).__init__(discard_first_result=True)
|
| +
|
| + @property
|
| + def results_are_the_same_on_every_page(self):
|
| + return False
|
| +
|
| + def AddCommandLineOptions(self, parser):
|
| + # In order to change the default of an option, we must remove and re-add it.
|
| + page_repeat_option = parser.get_option('--page-repeat')
|
| + page_repeat_option.default = 2
|
| + parser.remove_option('--page-repeat')
|
| + parser.add_option(page_repeat_option)
|
| +
|
| + def CustomizeBrowserOptions(self, options):
|
| + options.AppendExtraBrowserArg('--no-sandbox')
|
| +
|
| + def WillNavigateToPage(self, page, tab):
|
| + tab.browser.StartProfiling(perf_profiler.PerfProfiler.name(),
|
| + os.path.join(tempfile.mkdtemp(),
|
| + page.url_as_file_safe_name))
|
| +
|
| + def MeasurePage(self, page, tab, results):
|
| + # In current telemetry tests, all tests wait for DocumentComplete state,
|
| + # but we need to wait for the load event.
|
| + def IsLoaded():
|
| + return bool(tab.EvaluateJavaScript('performance.timing.loadEventStart'))
|
| + util.WaitFor(IsLoaded, 300)
|
| +
|
| + profile_files = tab.browser.StopProfiling()
|
| +
|
| + load_timings = tab.EvaluateJavaScript('window.performance.timing')
|
| + load_time_ms = (
|
| + float(load_timings['loadEventStart']) -
|
| + load_timings['navigationStart'])
|
| + dom_content_loaded_time_ms = (
|
| + float(load_timings['domContentLoadedEventStart']) -
|
| + load_timings['navigationStart'])
|
| + results.Add('load_time', 'ms', load_time_ms)
|
| + results.Add('dom_content_loaded_time', 'ms',
|
| + dom_content_loaded_time_ms)
|
| +
|
| + profile_file = None
|
| + for profile_file in profile_files:
|
| + if 'renderer' in profile_file:
|
| + break
|
| +
|
| + for function, period in perf_profiler.PerfProfiler.GetTopSamples(
|
| + profile_file, 10).iteritems():
|
| + results.Add(function.replace('.', '_'), 'period', period)
|
|
|