Index: base/system_monitor/system_monitor_win.cc |
=================================================================== |
--- base/system_monitor/system_monitor_win.cc (revision 137975) |
+++ base/system_monitor/system_monitor_win.cc (working copy) |
@@ -1,111 +1,9 @@ |
-// Copyright (c) 2012 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 "base/system_monitor/system_monitor.h" |
-#include "base/utf_string_conversions.h" |
-#include "base/win/windows_version.h" |
-namespace { |
- |
-// Maps a request's reason to the handle and requests count. |
-typedef std::map<std::string, std::pair<HANDLE, int> > HandleMap; |
- |
-#if _WIN32_WINNT <= _WIN32_WINNT_WIN7 |
-POWER_REQUEST_TYPE PowerRequestExecutionRequired = |
- static_cast<POWER_REQUEST_TYPE>(PowerRequestAwayModeRequired + 1); |
-#endif |
- |
-POWER_REQUEST_TYPE PowerRequestTestRequired = |
- static_cast<POWER_REQUEST_TYPE>(PowerRequestExecutionRequired + 10); |
- |
-POWER_REQUEST_TYPE PowerRequirementToType( |
- base::SystemMonitor::PowerRequirement requirement) { |
- switch (requirement) { |
- case base::SystemMonitor::DISPLAY_REQUIRED: |
- return PowerRequestDisplayRequired; |
- case base::SystemMonitor::SYSTEM_REQUIRED: |
- return PowerRequestSystemRequired; |
- case base::SystemMonitor::CPU_REQUIRED: |
- return PowerRequestExecutionRequired; |
- case base::SystemMonitor::TEST_REQUIRED: |
- return PowerRequestTestRequired; |
- } |
- NOTREACHED(); |
- return PowerRequestTestRequired; |
-} |
- |
-HANDLE CreatePowerRequest(POWER_REQUEST_TYPE type, const std::string& reason) { |
- typedef HANDLE (WINAPI* PowerCreateRequestPtr)(PREASON_CONTEXT); |
- typedef BOOL (WINAPI* PowerSetRequestPtr)(HANDLE, POWER_REQUEST_TYPE); |
- |
- if (type == PowerRequestTestRequired) |
- return NULL; |
- |
- if (type == PowerRequestExecutionRequired && |
- base::win::GetVersion() < base::win::VERSION_WIN8) { |
- return INVALID_HANDLE_VALUE; |
- } |
- |
- static PowerCreateRequestPtr PowerCreateRequestFn = NULL; |
- static PowerSetRequestPtr PowerSetRequestFn = NULL; |
- |
- if (!PowerCreateRequestFn || !PowerSetRequestFn) { |
- HMODULE module = GetModuleHandle(L"kernel32.dll"); |
- PowerCreateRequestFn = reinterpret_cast<PowerCreateRequestPtr>( |
- GetProcAddress(module, "PowerCreateRequest")); |
- PowerSetRequestFn = reinterpret_cast<PowerSetRequestPtr>( |
- GetProcAddress(module, "PowerSetRequest")); |
- |
- if (!PowerCreateRequestFn || !PowerSetRequestFn) |
- return INVALID_HANDLE_VALUE; |
- } |
- string16 wide_reason = ASCIIToUTF16(reason); |
- REASON_CONTEXT context = {0}; |
- context.Version = POWER_REQUEST_CONTEXT_VERSION; |
- context.Flags = POWER_REQUEST_CONTEXT_SIMPLE_STRING; |
- context.Reason.SimpleReasonString = const_cast<wchar_t*>(wide_reason.c_str()); |
- |
- base::win::ScopedHandle handle(PowerCreateRequestFn(&context)); |
- if (!handle.IsValid()) |
- return INVALID_HANDLE_VALUE; |
- |
- if (PowerSetRequestFn(handle, type)) |
- return handle.Take(); |
- |
- // Something went wrong. |
- return INVALID_HANDLE_VALUE; |
-} |
- |
-// Takes ownership of the |handle|. |
-void DeletePowerRequest(POWER_REQUEST_TYPE type, HANDLE handle) { |
- if (type == PowerRequestTestRequired) |
- return; |
- |
- base::win::ScopedHandle request_handle(handle); |
- if (!request_handle.IsValid()) |
- return; |
- |
- if (type == PowerRequestExecutionRequired && |
- base::win::GetVersion() < base::win::VERSION_WIN8) { |
- return; |
- } |
- |
- typedef BOOL (WINAPI* PowerClearRequestPtr)(HANDLE, POWER_REQUEST_TYPE); |
- HMODULE module = GetModuleHandle(L"kernel32.dll"); |
- PowerClearRequestPtr PowerClearRequestFn = |
- reinterpret_cast<PowerClearRequestPtr>( |
- GetProcAddress(module, "PowerClearRequest")); |
- |
- if (!PowerClearRequestFn) |
- return; |
- |
- BOOL success = PowerClearRequest(request_handle, type); |
- DCHECK(success); |
-} |
- |
-} // namespace. |
- |
namespace base { |
void SystemMonitor::ProcessWmPowerBroadcastMessage(int event_id) { |
@@ -138,50 +36,6 @@ |
ProcessPowerMessage(power_event); |
} |
-void SystemMonitor::BeginPowerRequirement(PowerRequirement requirement, |
- const std::string& reason) { |
- thread_checker_.CalledOnValidThread(); |
- |
- HandleMap::iterator i = handles_.find(reason); |
- if (i != handles_.end()) { |
- // This is not the first request, just increase the requests count. |
- i->second.second++; |
- DCHECK_GT(i->second.second, 1); |
- return; |
- } |
- |
- HANDLE handle = CreatePowerRequest(PowerRequirementToType(requirement), |
- reason); |
- |
- if (handle != INVALID_HANDLE_VALUE) |
- handles_[reason] = std::pair<HANDLE, int>(handle, 1); |
-} |
- |
-void SystemMonitor::EndPowerRequirement(PowerRequirement requirement, |
- const std::string& reason) { |
- thread_checker_.CalledOnValidThread(); |
- |
- HandleMap::iterator i = handles_.find(reason); |
- if (i == handles_.end()) { |
- NOTREACHED(); |
- return; |
- } |
- |
- // Decrease the requests count and see if this the last request. |
- i->second.second--; |
- DCHECK_GE(i->second.second, 0); |
- |
- if (i->second.second) |
- return; |
- |
- DeletePowerRequest(PowerRequirementToType(requirement), i->second.first); |
- handles_.erase(i); |
-} |
- |
-size_t SystemMonitor::GetPowerRequirementsCountForTest() const { |
- return handles_.size(); |
-} |
- |
// Function to query the system to see if it is currently running on |
// battery power. Returns true if running on battery. |
bool SystemMonitor::IsBatteryPower() { |