19ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 29ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 39ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch// found in the LICENSE file. 4bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 59ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#ifndef CHROME_BROWSER_EXTENSIONS_API_SYSTEM_CPU_CPU_INFO_PROVIDER_H_ 69ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#define CHROME_BROWSER_EXTENSIONS_API_SYSTEM_CPU_CPU_INFO_PROVIDER_H_ 79ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 8bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "base/lazy_instance.h" 99ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/extensions/api/system_info/system_info_provider.h" 109ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/common/extensions/api/system_cpu.h" 119ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 129ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochnamespace extensions { 139ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 14bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochclass CpuInfoProvider : public SystemInfoProvider { 159ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch public: 169ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // Return the single shared instance of CpuInfoProvider. 179ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch static CpuInfoProvider* Get(); 189ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 199ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch const api::system_cpu::CpuInfo& cpu_info() const; 209ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 21bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch static void InitializeForTesting(scoped_refptr<CpuInfoProvider> provider); 22bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 239ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch private: 249ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch friend class MockCpuInfoProviderImpl; 259ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 269ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch CpuInfoProvider(); 279ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch virtual ~CpuInfoProvider(); 28bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 29bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // Overriden from SystemInfoProvider. 30bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch virtual bool QueryInfo() OVERRIDE; 31bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 32bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // The last information filled up by QueryInfo and is accessed on multiple 33bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // threads, but the whole class is being guarded by SystemInfoProvider base 34bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // class. 35bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // 36bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // |info_| is accessed on the UI thread while |is_waiting_for_completion_| is 37bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // false and on the sequenced worker pool while |is_waiting_for_completion_| 38bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // is true. 39bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch api::system_cpu::CpuInfo info_; 40bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 41bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch static base::LazyInstance<scoped_refptr<CpuInfoProvider> > provider_; 42bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 43bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch DISALLOW_COPY_AND_ASSIGN(CpuInfoProvider); 449ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch}; 459ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 469ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch} // namespace extensions 479ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 489ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#endif // CHROME_BROWSER_EXTENSIONS_API_SYSTEM_CPU_CPU_INFO_PROVIDER_H_ 49