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

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

Issue 2871303004: Rename TaskRunner::RunsTasksOnCurrentThread() in //chrome (Closed)
Patch Set: fixed build error Created 3 years, 7 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
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/power/freezer_cgroup_process_manager.h" 5 #include "chrome/browser/chromeos/power/freezer_cgroup_process_manager.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 19 matching lines...) Expand all
30 30
31 class FreezerCgroupProcessManager::FileWorker { 31 class FreezerCgroupProcessManager::FileWorker {
32 public: 32 public:
33 // Called on UI thread. 33 // Called on UI thread.
34 explicit FileWorker(scoped_refptr<base::SequencedTaskRunner> file_thread) 34 explicit FileWorker(scoped_refptr<base::SequencedTaskRunner> file_thread)
35 : ui_thread_(content::BrowserThread::GetTaskRunnerForThread( 35 : ui_thread_(content::BrowserThread::GetTaskRunnerForThread(
36 content::BrowserThread::UI)), 36 content::BrowserThread::UI)),
37 file_thread_(file_thread), 37 file_thread_(file_thread),
38 enabled_(false), 38 enabled_(false),
39 froze_successfully_(false) { 39 froze_successfully_(false) {
40 DCHECK(ui_thread_->RunsTasksOnCurrentThread()); 40 DCHECK(ui_thread_->RunsTasksInCurrentSequence());
41 } 41 }
42 42
43 // Called on FILE thread. 43 // Called on FILE thread.
44 virtual ~FileWorker() { DCHECK(file_thread_->RunsTasksOnCurrentThread()); } 44 virtual ~FileWorker() { DCHECK(file_thread_->RunsTasksInCurrentSequence()); }
45 45
46 void Start() { 46 void Start() {
47 DCHECK(file_thread_->RunsTasksOnCurrentThread()); 47 DCHECK(file_thread_->RunsTasksInCurrentSequence());
48 48
49 default_control_path_ = base::FilePath(kFreezerPath).Append(kCgroupProcs); 49 default_control_path_ = base::FilePath(kFreezerPath).Append(kCgroupProcs);
50 to_be_frozen_control_path_ = base::FilePath(kFreezerPath) 50 to_be_frozen_control_path_ = base::FilePath(kFreezerPath)
51 .AppendASCII(kToBeFrozen) 51 .AppendASCII(kToBeFrozen)
52 .AppendASCII(kCgroupProcs); 52 .AppendASCII(kCgroupProcs);
53 to_be_frozen_state_path_ = base::FilePath(kFreezerPath) 53 to_be_frozen_state_path_ = base::FilePath(kFreezerPath)
54 .AppendASCII(kToBeFrozen) 54 .AppendASCII(kToBeFrozen)
55 .AppendASCII(kFreezerState); 55 .AppendASCII(kFreezerState);
56 enabled_ = base::PathIsWritable(default_control_path_) && 56 enabled_ = base::PathIsWritable(default_control_path_) &&
57 base::PathIsWritable(to_be_frozen_control_path_) && 57 base::PathIsWritable(to_be_frozen_control_path_) &&
58 base::PathIsWritable(to_be_frozen_state_path_); 58 base::PathIsWritable(to_be_frozen_state_path_);
59 59
60 if (!enabled_) { 60 if (!enabled_) {
61 LOG(WARNING) << "Cgroup freezer does not exist or is not writable. " 61 LOG(WARNING) << "Cgroup freezer does not exist or is not writable. "
62 << "Unable to freeze renderer processes."; 62 << "Unable to freeze renderer processes.";
63 } 63 }
64 } 64 }
65 65
66 void SetShouldFreezeRenderer(base::ProcessHandle handle, bool frozen) { 66 void SetShouldFreezeRenderer(base::ProcessHandle handle, bool frozen) {
67 DCHECK(file_thread_->RunsTasksOnCurrentThread()); 67 DCHECK(file_thread_->RunsTasksInCurrentSequence());
68 68
69 WriteCommandToFile(base::IntToString(handle), 69 WriteCommandToFile(base::IntToString(handle),
70 frozen ? to_be_frozen_control_path_ 70 frozen ? to_be_frozen_control_path_
71 : default_control_path_); 71 : default_control_path_);
72 } 72 }
73 73
74 void FreezeRenderers() { 74 void FreezeRenderers() {
75 DCHECK(file_thread_->RunsTasksOnCurrentThread()); 75 DCHECK(file_thread_->RunsTasksInCurrentSequence());
76 76
77 if (!enabled_) { 77 if (!enabled_) {
78 LOG(ERROR) << "Attempting to freeze renderers when the freezer cgroup is " 78 LOG(ERROR) << "Attempting to freeze renderers when the freezer cgroup is "
79 << "not available."; 79 << "not available.";
80 return; 80 return;
81 } 81 }
82 82
83 froze_successfully_ = 83 froze_successfully_ =
84 WriteCommandToFile(kFreezeCommand, to_be_frozen_state_path_); 84 WriteCommandToFile(kFreezeCommand, to_be_frozen_state_path_);
85 } 85 }
86 86
87 void ThawRenderers(ResultCallback callback) { 87 void ThawRenderers(ResultCallback callback) {
88 DCHECK(file_thread_->RunsTasksOnCurrentThread()); 88 DCHECK(file_thread_->RunsTasksInCurrentSequence());
89 89
90 if (!enabled_) { 90 if (!enabled_) {
91 LOG(ERROR) << "Attempting to thaw renderers when the freezer cgroup is " 91 LOG(ERROR) << "Attempting to thaw renderers when the freezer cgroup is "
92 << "not available."; 92 << "not available.";
93 return; 93 return;
94 } 94 }
95 95
96 bool result = WriteCommandToFile(kThawCommand, to_be_frozen_state_path_); 96 bool result = WriteCommandToFile(kThawCommand, to_be_frozen_state_path_);
97 97
98 // TODO(derat): For now, lie and report success if thawing failed but 98 // TODO(derat): For now, lie and report success if thawing failed but
99 // freezing also failed previously. Remove after weird EBADF and ENOENT 99 // freezing also failed previously. Remove after weird EBADF and ENOENT
100 // problems tracked at http://crbug.com/661310 are fixed. 100 // problems tracked at http://crbug.com/661310 are fixed.
101 if (!result && !froze_successfully_) 101 if (!result && !froze_successfully_)
102 result = true; 102 result = true;
103 103
104 ui_thread_->PostTask(FROM_HERE, base::Bind(callback, result)); 104 ui_thread_->PostTask(FROM_HERE, base::Bind(callback, result));
105 } 105 }
106 106
107 void CheckCanFreezeRenderers(ResultCallback callback) { 107 void CheckCanFreezeRenderers(ResultCallback callback) {
108 DCHECK(file_thread_->RunsTasksOnCurrentThread()); 108 DCHECK(file_thread_->RunsTasksInCurrentSequence());
109 109
110 ui_thread_->PostTask(FROM_HERE, base::Bind(callback, enabled_)); 110 ui_thread_->PostTask(FROM_HERE, base::Bind(callback, enabled_));
111 } 111 }
112 112
113 private: 113 private:
114 bool WriteCommandToFile(const std::string& command, 114 bool WriteCommandToFile(const std::string& command,
115 const base::FilePath& file) { 115 const base::FilePath& file) {
116 int bytes = base::WriteFile(file, command.c_str(), command.size()); 116 int bytes = base::WriteFile(file, command.c_str(), command.size());
117 if (bytes == -1) { 117 if (bytes == -1) {
118 PLOG(ERROR) << "Writing " << command << " to " << file.value() 118 PLOG(ERROR) << "Writing " << command << " to " << file.value()
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 182
183 void FreezerCgroupProcessManager::CheckCanFreezeRenderers( 183 void FreezerCgroupProcessManager::CheckCanFreezeRenderers(
184 ResultCallback callback) { 184 ResultCallback callback) {
185 file_thread_->PostTask(FROM_HERE, 185 file_thread_->PostTask(FROM_HERE,
186 base::Bind(&FileWorker::CheckCanFreezeRenderers, 186 base::Bind(&FileWorker::CheckCanFreezeRenderers,
187 base::Unretained(file_worker_.get()), 187 base::Unretained(file_worker_.get()),
188 callback)); 188 callback));
189 } 189 }
190 190
191 } // namespace chromeos 191 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698