1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/chromeos/power/freezer_cgroup_process_manager.h"
9 #include "base/files/file_util.h"
10 #include "base/logging.h"
15 const char kFreezerStatePath[] =
16 "/sys/fs/cgroup/freezer/chrome_renderers/freezer.state";
17 const char kFreezeCommand[] = "FROZEN";
18 const char kThawCommand[] = "THAWED";
22 FreezerCgroupProcessManager::FreezerCgroupProcessManager()
23 : state_path_(base::FilePath(kFreezerStatePath)),
24 enabled_(base::PathIsWritable(state_path_)) {
26 LOG(WARNING) << "Cgroup freezer does not exist or is not writable. "
27 << "Unable to freeze renderer processes.";
31 FreezerCgroupProcessManager::~FreezerCgroupProcessManager() {
34 bool FreezerCgroupProcessManager::FreezeRenderers() {
36 LOG(ERROR) << "Attempting to freeze renderers when the freezer cgroup is "
41 return WriteCommandToStateFile(kFreezeCommand);
44 bool FreezerCgroupProcessManager::ThawRenderers() {
46 LOG(ERROR) << "Attempting to thaw renderers when the freezer cgroup is not "
51 return WriteCommandToStateFile(kThawCommand);
54 bool FreezerCgroupProcessManager::CanFreezeRenderers() {
58 bool FreezerCgroupProcessManager::WriteCommandToStateFile(
59 const std::string& command) {
60 int bytes = base::WriteFile(state_path_, command.c_str(), command.size());
62 PLOG(ERROR) << "Writing " << command << " to " << state_path_.value()
65 } else if (bytes != static_cast<int>(command.size())) {
66 LOG(ERROR) << "Only wrote " << bytes << " byte(s) when writing "
67 << command << " to " << state_path_.value();
73 } // namespace chromeos