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

Unified Diff: chrome/browser/chromeos/power/renderer_freezer.cc

Issue 543303002: chromeos: power: Refactor RendererFreezer and add tests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments. 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/power/renderer_freezer.cc
diff --git a/chrome/browser/chromeos/power/renderer_freezer.cc b/chrome/browser/chromeos/power/renderer_freezer.cc
index 6116f51df273e7324c4690538cfb90c3addb8d44..edc8e40a275716c43dfbcb092129b5ad79f3500d 100644
--- a/chrome/browser/chromeos/power/renderer_freezer.cc
+++ b/chrome/browser/chromeos/power/renderer_freezer.cc
@@ -4,23 +4,29 @@
#include "chrome/browser/chromeos/power/renderer_freezer.h"
-#include <cstring> // needed for strlen()
-
#include "base/bind.h"
-#include "base/files/file_util.h"
#include "base/logging.h"
#include "base/message_loop/message_loop.h"
#include "chromeos/dbus/dbus_thread_manager.h"
namespace chromeos {
-namespace {
-const char kFreezerStatePath[] =
- "/sys/fs/cgroup/freezer/chrome_renderers/freezer.state";
-const char kFreezeCommand[] = "FROZEN";
-const char kThawCommand[] = "THAWED";
+RendererFreezer::RendererFreezer(scoped_ptr<RendererFreezer::Delegate> delegate)
+ : frozen_(false),
+ delegate_(delegate.Pass()),
+ weak_factory_(this) {
+ if (delegate_->CanFreezeRenderers()) {
+ DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(this);
+ } else {
+ LOG(WARNING) << "Cgroup freezer does not exist or is not writable. "
+ << "Processes will not be frozen during suspend.";
+ }
+}
-} // namespace
+RendererFreezer::~RendererFreezer() {
+ if (delegate_->CanFreezeRenderers())
+ DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(this);
+}
void RendererFreezer::SuspendImminent() {
suspend_readiness_callback_ = DBusThreadManager::Get()
@@ -37,8 +43,7 @@ void RendererFreezer::SuspendDone(const base::TimeDelta& sleep_duration) {
if (!frozen_)
return;
- if (base::WriteFile(state_path_, kThawCommand, strlen(kThawCommand)) !=
- static_cast<int>(strlen(kThawCommand))) {
+ if (!delegate_->ThawRenderers()) {
// We failed to write the thaw command and the renderers are still frozen.
// We are in big trouble because none of the tabs will be responsive so
// let's crash the browser instead.
@@ -49,35 +54,14 @@ void RendererFreezer::SuspendDone(const base::TimeDelta& sleep_duration) {
}
void RendererFreezer::OnReadyToSuspend() {
- if (base::WriteFile(state_path_, kFreezeCommand, strlen(kFreezeCommand)) !=
- static_cast<int>(strlen(kFreezeCommand))) {
+ if (!delegate_->FreezeRenderers())
PLOG(WARNING) << "Unable to freeze processes in the cgroup freezer.";
- } else {
+ else
frozen_ = true;
- }
DCHECK(!suspend_readiness_callback_.is_null());
suspend_readiness_callback_.Run();
suspend_readiness_callback_.Reset();
}
-RendererFreezer::RendererFreezer()
- : state_path_(base::FilePath(kFreezerStatePath)),
- enabled_(base::PathExists(state_path_) &&
- base::PathIsWritable(state_path_)),
- frozen_(false),
- weak_factory_(this) {
- if (enabled_) {
- DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(this);
- } else {
- LOG(WARNING) << "Cgroup freezer does not exist or is not writable. "
- << "Processes will not be frozen during suspend.";
- }
-}
-
-RendererFreezer::~RendererFreezer() {
- if (enabled_)
- DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(this);
-}
-
} // namespace chromeos

Powered by Google App Engine
This is Rietveld 408576698