1// Copyright 2013 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/feedback/system_logs/log_sources/memory_details_log_source.h" 6 7#include "chrome/browser/memory_details.h" 8#include "content/public/browser/browser_thread.h" 9 10namespace system_logs { 11 12// Reads Chrome memory usage. 13class SystemLogsMemoryHandler : public MemoryDetails { 14 public: 15 explicit SystemLogsMemoryHandler(const SysLogsSourceCallback& callback) 16 : callback_(callback) {} 17 18 // Sends the data to the callback. 19 // MemoryDetails override. 20 virtual void OnDetailsAvailable() OVERRIDE { 21 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 22 23 scoped_ptr<SystemLogsResponse> response(new SystemLogsResponse); 24 (*response)["mem_usage"] = ToLogString(); 25 callback_.Run(response.get()); 26 } 27 28 private: 29 virtual ~SystemLogsMemoryHandler() {} 30 SysLogsSourceCallback callback_; 31 32 DISALLOW_COPY_AND_ASSIGN(SystemLogsMemoryHandler); 33}; 34 35void MemoryDetailsLogSource::Fetch(const SysLogsSourceCallback& callback) { 36 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 37 DCHECK(!callback.is_null()); 38 39 scoped_refptr<SystemLogsMemoryHandler> 40 handler(new SystemLogsMemoryHandler(callback)); 41 // TODO(jamescook): Maybe we don't need to update histograms here? 42 handler->StartFetch(MemoryDetails::UPDATE_USER_METRICS); 43} 44 45} // namespace system_logs 46