blob: 744bc28c96d948e6e76bb7f1935c6e5e308cd150 [file] [log] [blame]
# Copyright 2014 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.
from telemetry.internal.platform.profiler import profiler_finder
class ProfilingControllerBackend(object):
def __init__(self, platform_backend, browser_backend):
self._platform_backend = platform_backend
self._browser_backend = browser_backend
self._active_profilers = []
self._profilers_states = {}
def Start(self, profiler_name, base_output_file):
"""Starts profiling using |profiler_name|. Results are saved to
|base_output_file|.<process_name>."""
assert not self._active_profilers, 'Already profiling. Must stop first.'
profiler_class = profiler_finder.FindProfiler(profiler_name)
if not profiler_class.is_supported(self._browser_backend.browser_type):
raise Exception('The %s profiler is not '
'supported on this platform.' % profiler_name)
if not profiler_class in self._profilers_states:
self._profilers_states[profiler_class] = {}
self._active_profilers.append(
profiler_class(self._browser_backend, self._platform_backend,
base_output_file, self._profilers_states[profiler_class]))
def Stop(self):
"""Stops all active profilers and saves their results.
Returns:
A list of filenames produced by the profiler.
"""
output_files = []
for profiler in self._active_profilers:
output_files.extend(profiler.CollectProfile())
self._active_profilers = []
return output_files
def WillCloseBrowser(self):
for profiler_class in self._profilers_states:
profiler_class.WillCloseBrowser(
self._browser_backend, self._platform_backend)