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

Unified Diff: content/browser/power_save_blocker_common.cc

Issue 8251008: Add screen power save block level. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: build fix Created 9 years, 2 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: content/browser/power_save_blocker_common.cc
diff --git a/content/browser/power_save_blocker_common.cc b/content/browser/power_save_blocker_common.cc
index 53aecd5d80955d8ef1601f9eb2ccb68fb223a59f..68c69f26190227a3767e047a0e0f374a4827f7b8 100644
--- a/content/browser/power_save_blocker_common.cc
+++ b/content/browser/power_save_blocker_common.cc
@@ -1,58 +1,62 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/browser/power_save_blocker.h"
+#include "base/bind.h"
#include "content/browser/browser_thread.h"
// Accessed only from the UI thread.
-int PowerSaveBlocker::blocker_count_ = 0;
-
-PowerSaveBlocker::PowerSaveBlocker(bool enable) : enabled_(false) {
- if (enable)
- Enable();
+int PowerSaveBlocker::blocker_count_[kPowerSaveBlockPreventStateCount];
+
+PowerSaveBlocker::PowerSaveBlocker(PowerSaveBlockerType type) : type_(type) {
+ DCHECK_LT(kPowerSaveBlockPreventNone, type);
+ DCHECK_GT(kPowerSaveBlockPreventStateCount, type);
+ std::vector<int> change(kPowerSaveBlockPreventStateCount);
+ ++change[type_];
+ PostAdjustBlockCount(change);
}
PowerSaveBlocker::~PowerSaveBlocker(void) {
- Disable();
-}
-
-void PowerSaveBlocker::Enable() {
- if (enabled_)
- return;
-
- enabled_ = true;
- PostAdjustBlockCount(1);
-}
-
-void PowerSaveBlocker::Disable() {
- if (!enabled_)
- return;
-
- enabled_ = false;
- PostAdjustBlockCount(-1);
+ std::vector<int> change(kPowerSaveBlockPreventStateCount);
+ --change[type_];
+ PostAdjustBlockCount(change);
}
-
-void PowerSaveBlocker::PostAdjustBlockCount(int delta) {
+// static
+void PowerSaveBlocker::PostAdjustBlockCount(const std::vector<int>& deltas) {
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE,
- NewRunnableFunction(&PowerSaveBlocker::AdjustBlockCount, delta));
+ base::Bind(&PowerSaveBlocker::AdjustBlockCount, deltas));
}
// Called only from UI thread.
-void PowerSaveBlocker::AdjustBlockCount(int delta) {
+// static
+void PowerSaveBlocker::AdjustBlockCount(const std::vector<int>& deltas) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- bool was_blocking = (blocker_count_ != 0);
+ PowerSaveBlockerType old_block = HighestBlockType();
+
+ for (size_t i = 0; i < deltas.size(); ++i)
+ blocker_count_[i] += deltas[i];
+
+ PowerSaveBlockerType new_block = HighestBlockType();
- blocker_count_ += delta;
+ if (new_block != old_block)
+ ApplyBlock(new_block);
+}
- bool is_blocking = (blocker_count_ != 0);
+// Called only from UI thread.
+PowerSaveBlocker::PowerSaveBlockerType PowerSaveBlocker::HighestBlockType() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- DCHECK_GE(blocker_count_, 0);
+ for (PowerSaveBlockerType t = kPowerSaveBlockPreventDisplaySleep;
+ t >= kPowerSaveBlockPreventSystemSleep;
+ t = static_cast<PowerSaveBlockerType>(t - 1)) {
+ if (blocker_count_[t])
+ return t;
+ }
- if (is_blocking != was_blocking)
- ApplyBlock(is_blocking);
+ return kPowerSaveBlockPreventNone;
}

Powered by Google App Engine
This is Rietveld 408576698