Index: chrome/browser/process_resource_usage.cc |
diff --git a/chrome/browser/process_resource_usage.cc b/chrome/browser/process_resource_usage.cc |
index f892ade2f1f2a42d4093c2dba2de2c6058b8c2d3..3eee701f179ada640c28a75dc76052b17677712b 100644 |
--- a/chrome/browser/process_resource_usage.cc |
+++ b/chrome/browser/process_resource_usage.cc |
@@ -5,19 +5,38 @@ |
#include "chrome/browser/process_resource_usage.h" |
#include "base/bind.h" |
+#include "base/location.h" |
#include "base/logging.h" |
+#include "base/message_loop/message_loop_proxy.h" |
ProcessResourceUsage::ProcessResourceUsage(ResourceUsageReporterPtr service) |
: service_(service.Pass()), update_in_progress_(false) { |
+ service_.set_error_handler(this); |
} |
ProcessResourceUsage::~ProcessResourceUsage() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
} |
-void ProcessResourceUsage::Refresh() { |
+void ProcessResourceUsage::RunPendingRefreshCallbacks() { |
+ auto message_loop = base::MessageLoopProxy::current(); |
+ for (const auto& callback : refresh_callbacks_) |
+ message_loop->PostTask(FROM_HERE, callback); |
+ refresh_callbacks_.clear(); |
+} |
+ |
+void ProcessResourceUsage::Refresh(const base::Closure& callback) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
- if (!update_in_progress_ && service_) { |
+ if (!service_ || service_.encountered_error()) { |
+ if (!callback.is_null()) |
+ base::MessageLoopProxy::current()->PostTask(FROM_HERE, callback); |
+ return; |
+ } |
+ |
+ if (!callback.is_null()) |
+ refresh_callbacks_.push_back(callback); |
+ |
+ if (!update_in_progress_) { |
update_in_progress_ = true; |
service_->GetUsageData(base::Bind(&ProcessResourceUsage::OnRefreshDone, |
base::Unretained(this))); |
@@ -28,6 +47,12 @@ void ProcessResourceUsage::OnRefreshDone(ResourceUsageDataPtr data) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
update_in_progress_ = false; |
stats_ = data.Pass(); |
+ RunPendingRefreshCallbacks(); |
+} |
+ |
+void ProcessResourceUsage::OnConnectionError() { |
ncarter (slow)
2015/05/14 06:28:12
Does it make sense to zero the |stats_| when the c
Anand Mistry (off Chromium)
2015/05/14 07:30:41
I honestly have no idea. Maybe we want to keep the
ncarter (slow)
2015/05/14 13:59:58
You can leave it as is. The task manager removes r
|
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ RunPendingRefreshCallbacks(); |
} |
bool ProcessResourceUsage::ReportsV8MemoryStats() const { |