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. 9int PowerSaveBlocker::blocker_count_ = 0; 10 11PowerSaveBlocker::PowerSaveBlocker(bool enable) : enabled_(false) { 12 if (enable) 13 Enable(); 14} 15 16PowerSaveBlocker::~PowerSaveBlocker(void) { 17 Disable(); 18} 19 20void PowerSaveBlocker::Enable() { 21 if (enabled_) 22 return; 23 24 enabled_ = true; 25 PostAdjustBlockCount(1); 26} 27 28void PowerSaveBlocker::Disable() { 29 if (!enabled_) 30 return; 31 32 enabled_ = false; 33 PostAdjustBlockCount(-1); 34} 35 36 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. 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