1 // Copyright (c) 2009 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/power_save_blocker.h" 6 #include "content/browser/browser_thread.h" 7 8 // Accessed only from the UI thread. 9 int PowerSaveBlocker::blocker_count_ = 0; 10 PowerSaveBlocker(bool enable)11PowerSaveBlocker::PowerSaveBlocker(bool enable) : enabled_(false) { 12 if (enable) 13 Enable(); 14 } 15 ~PowerSaveBlocker(void)16PowerSaveBlocker::~PowerSaveBlocker(void) { 17 Disable(); 18 } 19 Enable()20void PowerSaveBlocker::Enable() { 21 if (enabled_) 22 return; 23 24 enabled_ = true; 25 PostAdjustBlockCount(1); 26 } 27 Disable()28void PowerSaveBlocker::Disable() { 29 if (!enabled_) 30 return; 31 32 enabled_ = false; 33 PostAdjustBlockCount(-1); 34 } 35 36 PostAdjustBlockCount(int delta)37void PowerSaveBlocker::PostAdjustBlockCount(int delta) { 38 BrowserThread::PostTask( 39 BrowserThread::UI, FROM_HERE, 40 NewRunnableFunction(&PowerSaveBlocker::AdjustBlockCount, delta)); 41 } 42 43 // Called only from UI thread. AdjustBlockCount(int delta)44void PowerSaveBlocker::AdjustBlockCount(int delta) { 45 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 46 47 bool was_blocking = (blocker_count_ != 0); 48 49 blocker_count_ += delta; 50 51 bool is_blocking = (blocker_count_ != 0); 52 53 DCHECK_GE(blocker_count_, 0); 54 55 if (is_blocking != was_blocking) 56 ApplyBlock(is_blocking); 57 } 58