| # Copyright (c) 2013 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 logging, os |
| |
| from autotest_lib.client.cros import cros_ui_test |
| from autotest_lib.client.common_lib import error |
| |
| CGROUP_DIR = '/sys/fs/cgroup/cpu/chrome_renderers' |
| FG_CGROUP_DIR = os.path.join(CGROUP_DIR, 'foreground') |
| BG_CGROUP_DIR = os.path.join(CGROUP_DIR, 'background') |
| |
| class platform_ChromeCgroups(cros_ui_test.UITest): |
| version = 1 |
| |
| def _get_cgroup_tasks(self, cgroup_dir): |
| """ |
| Returns the set of tasks in a cgroup. |
| |
| @param cgroup_dir Directory containing the cgroup. |
| """ |
| task_path = os.path.join(cgroup_dir, 'tasks') |
| task_file = open(task_path) |
| if not task_file: |
| raise error.TestError('failed to open %s' % task_path) |
| tasks = set(line.rstrip() for line in task_file.readlines()) |
| task_file.close() |
| logging.info('tasks in cgroup %s: %s' % (cgroup_dir, ','.join(tasks))) |
| return tasks |
| |
| def run_once(self): |
| """ |
| Check that the chrome_renderers cgroups are created and that tasks |
| are placed in them. |
| """ |
| # Make sure the cgroup directories actually exist. |
| if not os.path.isdir(CGROUP_DIR): |
| raise error.TestFail('chrome_renderers cgroup does not exist') |
| if not os.path.isdir(FG_CGROUP_DIR): |
| raise error.TestFail('foreground cgroup does not exist') |
| if not os.path.isdir(BG_CGROUP_DIR): |
| raise error.TestFail('background cgroup does not exist') |
| |
| # Open up two tabs in the same window. One should be in the foreground |
| # while the other is in the background. |
| self.pyauto.NavigateToURL('http://www.google.com') |
| self.pyauto.AppendTab('http://www.youtube.com') |
| |
| # Make sure the foreground and background cgroups are non-empty. |
| if not self._get_cgroup_tasks(FG_CGROUP_DIR): |
| raise error.TestFail('no tasks in foreground cgroup') |
| if not self._get_cgroup_tasks(BG_CGROUP_DIR): |
| raise error.TestFail('no tasks in background cgroup') |