1a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "chrome/browser/extensions/api/system_memory/memory_info_provider.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/sys_info.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions {
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11a3f7b4e666c476898878fa745f637129375cd889Ben Murdochusing api::system_memory::MemoryInfo;
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Static member intialization.
14bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochbase::LazyInstance<scoped_refptr<MemoryInfoProvider> >
15bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch    MemoryInfoProvider::provider_ = LAZY_INSTANCE_INITIALIZER;
167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MemoryInfoProvider::MemoryInfoProvider() {}
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MemoryInfoProvider::~MemoryInfoProvider() {}
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochconst MemoryInfo& MemoryInfoProvider::memory_info() const {
227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  return info_;
237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
25bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochvoid MemoryInfoProvider::InitializeForTesting(
26bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch    scoped_refptr<MemoryInfoProvider> provider) {
27bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  DCHECK(provider.get() != NULL);
28bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  provider_.Get() = provider;
29bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch}
30bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochbool MemoryInfoProvider::QueryInfo() {
327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  info_.capacity = static_cast<double>(base::SysInfo::AmountOfPhysicalMemory());
337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  info_.available_capacity =
34bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch      static_cast<double>(base::SysInfo::AmountOfAvailablePhysicalMemory());
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MemoryInfoProvider* MemoryInfoProvider::Get() {
40bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  if (provider_.Get().get() == NULL)
41bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch    provider_.Get() = new MemoryInfoProvider();
42bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  return provider_.Get();
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace extensions
46