# Copyright (c) 2011 The Chromium OS 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, signal, subprocess
from autotest_lib.client.bin import profiler, os_dep
from autotest_lib.client.common_lib import error
class custom_perf(profiler.profiler):
"""
This is a profiler class for the perf profiler in ChromeOS. It differs from
cros_perf in that you can completely customize what arguments you send in to
perf.
"""
version = 1
def initialize(self, perf_options=''):
# The two supported options for profile_type are 'record' and 'stat'.
self.perf_options = perf_options
self.perf_bin = os_dep.command('perf')
def start(self, test):
outfile = os.path.join(test.profdir, 'perf.out')
cmd = ('cd %s; exec %s %s > %s 2>&1' %
(test.profdir, self.perf_bin, self.perf_options, outfile))
self._process = subprocess.Popen(cmd, shell=True,
stderr=subprocess.STDOUT)
def stop(self, test):
ret_code = self._process.poll()
if ret_code is not None:
raise error.AutotestError('perf terminated early with return code: '
'%d. Please check your logs.' % ret_code)
os.killpg(os.getpgid(self._process.pid), signal.SIGINT)
self._process.wait()