| # Copyright (c) 2012 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. |
| |
| """ |
| This is a profiler class for copying Profile-Guided-Optimization (PGO) data |
| files back to the host. When Chrome is built with -fprofile-generate, it dumps |
| its PGO data in a directory that this test copies back to test.profdir. |
| |
| The PGO data is found where the build happens in the chroot, which is hardcoded |
| as the source_dir below. |
| """ |
| |
| import logging |
| import os |
| import shutil |
| import tarfile |
| |
| from autotest_lib.client.bin import profiler |
| from autotest_lib.client.common_lib import error |
| from autotest_lib.client.cros import cros_ui |
| |
| |
| class pgo(profiler.profiler): |
| """The pgo profiler collects PGO data for Chrome.""" |
| version = 1 |
| |
| def initialize(self, source_dir='/tmp/pgo/chrome'): |
| self._source_dir = source_dir |
| |
| |
| def start(self, test): |
| # Remove the .gcda files first. |
| if os.path.exists(self._source_dir): |
| shutil.rmtree(self._source_dir) |
| |
| |
| def stop(self, test): |
| if not cros_ui.stop_and_wait_for_chrome_to_exit(timeout_secs=40): |
| raise error.TestError('Could not stop Chrome') |
| if os.path.isdir(self._source_dir): |
| tar = tarfile.open(name=os.path.join(test.profdir, 'pgo.tar.bz2'), |
| mode='w:bz2') |
| tar.add(self._source_dir, arcname='chrome', recursive=True) |
| tar.close() |
| versionfile = '/opt/google/chrome/profilelocation' |
| if os.path.isfile(versionfile): |
| shutil.copyfile(versionfile, |
| os.path.join(test.profdir, 'profiledestination')) |
| else: |
| logging.error('PGO dir: %s not found', self._source_dir) |
| cros_ui.start(wait_for_login_prompt=False) |