Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(236)

Side by Side Diff: chrome/browser/chromeos/power/freezer_cgroup_process_manager.cc

Issue 543303002: chromeos: power: Refactor RendererFreezer and add tests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix merge conflicts Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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.
4
5 #include "chrome/browser/chromeos/power/freezer_cgroup_process_manager.h"
6
7 #include <string>
8
9 #include "base/files/file_util.h"
10 #include "base/logging.h"
11
12 namespace chromeos {
13
14 namespace {
15 const char kFreezerStatePath[] =
16 "/sys/fs/cgroup/freezer/chrome_renderers/freezer.state";
17 const char kFreezeCommand[] = "FROZEN";
18 const char kThawCommand[] = "THAWED";
19
20 } // namespace
21
22 FreezerCgroupProcessManager::FreezerCgroupProcessManager()
23 : state_path_(base::FilePath(kFreezerStatePath)),
24 enabled_(base::PathIsWritable(state_path_)) {
25 if (!enabled_) {
26 LOG(WARNING) << "Cgroup freezer does not exist or is not writable. "
27 << "Unable to freeze renderer processes.";
28 }
29 }
30
31 FreezerCgroupProcessManager::~FreezerCgroupProcessManager() {
32 }
33
34 bool FreezerCgroupProcessManager::FreezeRenderers() {
35 if (!enabled_) {
36 LOG(ERROR) << "Attempting to freeze renderers when the freezer cgroup is "
37 << "not available.";
38 return false;
39 }
40
41 return WriteCommandToStateFile(kFreezeCommand);
42 }
43
44 bool FreezerCgroupProcessManager::ThawRenderers() {
45 if (!enabled_) {
46 LOG(ERROR) << "Attempting to thaw renderers when the freezer cgroup is not "
47 << "available.";
48 return false;
49 }
50
51 return WriteCommandToStateFile(kThawCommand);
52 }
53
54 bool FreezerCgroupProcessManager::CanFreezeRenderers() {
55 return enabled_;
56 }
57
58 bool FreezerCgroupProcessManager::WriteCommandToStateFile(
59 const std::string& command) {
60 int bytes = base::WriteFile(state_path_, command.c_str(), command.size());
61 if (bytes == -1) {
62 PLOG(ERROR) << "Writing " << command << " to " << state_path_.value()
63 << " failed";
64 return false;
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();
68 return false;
69 }
70 return true;
71 }
72
73 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698