1a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 2a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch// found in the LICENSE file. 4a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#ifndef EXTENSIONS_BROWSER_API_SYSTEM_MEMORY_MEMORY_INFO_PROVIDER_H_ 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define EXTENSIONS_BROWSER_API_SYSTEM_MEMORY_MEMORY_INFO_PROVIDER_H_ 7a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 8bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "base/lazy_instance.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/api/system_info/system_info_provider.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/common/api/system_memory.h" 11a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 12a3f7b4e666c476898878fa745f637129375cd889Ben Murdochnamespace extensions { 13a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 14bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochclass MemoryInfoProvider : public SystemInfoProvider { 15a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch public: 16a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch static MemoryInfoProvider* Get(); 17a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const core_api::system_memory::MemoryInfo& memory_info() const { 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return info_; 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 21a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 22bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch static void InitializeForTesting(scoped_refptr<MemoryInfoProvider> provider); 23bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 24a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch private: 25a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch friend class MockMemoryInfoProviderImpl; 26a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 27a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch MemoryInfoProvider(); 28a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch virtual ~MemoryInfoProvider(); 29a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 30bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // Overriden from SystemInfoProvider. 31bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch virtual bool QueryInfo() OVERRIDE; 32bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 33bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // The last information filled up by QueryInfo and is accessed on multiple 34bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // threads, but the whole class is being guarded by SystemInfoProvider base 35bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // class. 36bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // 37bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // |info_| is accessed on the UI thread while |is_waiting_for_completion_| is 38bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // false and on the sequenced worker pool while |is_waiting_for_completion_| 39bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // is true. 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci core_api::system_memory::MemoryInfo info_; 41bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 42bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch static base::LazyInstance<scoped_refptr<MemoryInfoProvider> > provider_; 43bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 44a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch DISALLOW_COPY_AND_ASSIGN(MemoryInfoProvider); 45a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch}; 46a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 47a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch} // namespace extensions 48a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif // EXTENSIONS_BROWSER_API_SYSTEM_MEMORY_MEMORY_INFO_PROVIDER_H_ 50