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

Side by Side Diff: content/browser/power_save_blocker_common.cc

Issue 10542089: Power save blocker: switch to new implementation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 6 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 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 "content/browser/power_save_blocker.h"
6
7 #include "base/bind.h"
8 #include "content/public/browser/browser_thread.h"
9
10 using content::BrowserThread;
11
12 // Accessed only from the UI thread.
13 int PowerSaveBlocker::blocker_count_[kPowerSaveBlockPreventStateCount];
14
15 PowerSaveBlocker::PowerSaveBlocker(PowerSaveBlockerType type) : type_(type) {
16 DCHECK_LT(kPowerSaveBlockPreventNone, type);
17 DCHECK_GT(kPowerSaveBlockPreventStateCount, type);
18 std::vector<int> change(kPowerSaveBlockPreventStateCount);
19 ++change[type_];
20 PostAdjustBlockCount(change);
21 }
22
23 PowerSaveBlocker::~PowerSaveBlocker(void) {
24 std::vector<int> change(kPowerSaveBlockPreventStateCount);
25 --change[type_];
26 PostAdjustBlockCount(change);
27 }
28
29 // static
30 void PowerSaveBlocker::PostAdjustBlockCount(const std::vector<int>& deltas) {
31 BrowserThread::PostTask(
32 BrowserThread::UI, FROM_HERE,
33 base::Bind(&PowerSaveBlocker::AdjustBlockCount, deltas));
34 }
35
36 // Called only from UI thread.
37 // static
38 void PowerSaveBlocker::AdjustBlockCount(const std::vector<int>& deltas) {
39 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
40
41 PowerSaveBlockerType old_block = HighestBlockType();
42
43 for (size_t i = 0; i < deltas.size(); ++i)
44 blocker_count_[i] += deltas[i];
45
46 PowerSaveBlockerType new_block = HighestBlockType();
47
48 if (new_block != old_block)
49 ApplyBlock(new_block);
50 }
51
52 // Called only from UI thread.
53 PowerSaveBlocker::PowerSaveBlockerType PowerSaveBlocker::HighestBlockType() {
54 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
55
56 for (PowerSaveBlockerType t = kPowerSaveBlockPreventDisplaySleep;
57 t >= kPowerSaveBlockPreventSystemSleep;
58 t = static_cast<PowerSaveBlockerType>(t - 1)) {
59 if (blocker_count_[t])
60 return t;
61 }
62
63 return kPowerSaveBlockPreventNone;
64 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698