Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/process_resource_usage.h" | 5 #include "chrome/browser/process_resource_usage.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/location.h" | |
| 8 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/message_loop/message_loop_proxy.h" | |
| 9 | 11 |
| 10 ProcessResourceUsage::ProcessResourceUsage(ResourceUsageReporterPtr service) | 12 ProcessResourceUsage::ProcessResourceUsage(ResourceUsageReporterPtr service) |
| 11 : service_(service.Pass()), update_in_progress_(false) { | 13 : service_(service.Pass()), update_in_progress_(false) { |
| 14 service_.set_error_handler(this); | |
| 12 } | 15 } |
| 13 | 16 |
| 14 ProcessResourceUsage::~ProcessResourceUsage() { | 17 ProcessResourceUsage::~ProcessResourceUsage() { |
| 15 DCHECK(thread_checker_.CalledOnValidThread()); | 18 DCHECK(thread_checker_.CalledOnValidThread()); |
| 16 } | 19 } |
| 17 | 20 |
| 18 void ProcessResourceUsage::Refresh() { | 21 void ProcessResourceUsage::RunPendingRefreshCallbacks() { |
| 22 auto message_loop = base::MessageLoopProxy::current(); | |
| 23 for (const auto& callback : refresh_callbacks_) | |
| 24 message_loop->PostTask(FROM_HERE, callback); | |
| 25 refresh_callbacks_.clear(); | |
| 26 } | |
| 27 | |
| 28 void ProcessResourceUsage::Refresh(const base::Closure& callback) { | |
| 19 DCHECK(thread_checker_.CalledOnValidThread()); | 29 DCHECK(thread_checker_.CalledOnValidThread()); |
| 20 if (!update_in_progress_ && service_) { | 30 if (!service_ || service_.encountered_error()) { |
| 31 if (!callback.is_null()) | |
| 32 base::MessageLoopProxy::current()->PostTask(FROM_HERE, callback); | |
| 33 return; | |
| 34 } | |
| 35 | |
| 36 if (!callback.is_null()) | |
| 37 refresh_callbacks_.push_back(callback); | |
| 38 | |
| 39 if (!update_in_progress_) { | |
| 21 update_in_progress_ = true; | 40 update_in_progress_ = true; |
| 22 service_->GetUsageData(base::Bind(&ProcessResourceUsage::OnRefreshDone, | 41 service_->GetUsageData(base::Bind(&ProcessResourceUsage::OnRefreshDone, |
| 23 base::Unretained(this))); | 42 base::Unretained(this))); |
| 24 } | 43 } |
| 25 } | 44 } |
| 26 | 45 |
| 27 void ProcessResourceUsage::OnRefreshDone(ResourceUsageDataPtr data) { | 46 void ProcessResourceUsage::OnRefreshDone(ResourceUsageDataPtr data) { |
| 28 DCHECK(thread_checker_.CalledOnValidThread()); | 47 DCHECK(thread_checker_.CalledOnValidThread()); |
| 29 update_in_progress_ = false; | 48 update_in_progress_ = false; |
| 30 stats_ = data.Pass(); | 49 stats_ = data.Pass(); |
| 50 RunPendingRefreshCallbacks(); | |
| 51 } | |
| 52 | |
| 53 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
| |
| 54 DCHECK(thread_checker_.CalledOnValidThread()); | |
| 55 RunPendingRefreshCallbacks(); | |
| 31 } | 56 } |
| 32 | 57 |
| 33 bool ProcessResourceUsage::ReportsV8MemoryStats() const { | 58 bool ProcessResourceUsage::ReportsV8MemoryStats() const { |
| 34 DCHECK(thread_checker_.CalledOnValidThread()); | 59 DCHECK(thread_checker_.CalledOnValidThread()); |
| 35 if (stats_) | 60 if (stats_) |
| 36 return stats_->reports_v8_stats; | 61 return stats_->reports_v8_stats; |
| 37 return false; | 62 return false; |
| 38 } | 63 } |
| 39 | 64 |
| 40 size_t ProcessResourceUsage::GetV8MemoryAllocated() const { | 65 size_t ProcessResourceUsage::GetV8MemoryAllocated() const { |
| 41 DCHECK(thread_checker_.CalledOnValidThread()); | 66 DCHECK(thread_checker_.CalledOnValidThread()); |
| 42 if (stats_ && stats_->reports_v8_stats) | 67 if (stats_ && stats_->reports_v8_stats) |
| 43 return stats_->v8_bytes_allocated; | 68 return stats_->v8_bytes_allocated; |
| 44 return 0; | 69 return 0; |
| 45 } | 70 } |
| 46 | 71 |
| 47 size_t ProcessResourceUsage::GetV8MemoryUsed() const { | 72 size_t ProcessResourceUsage::GetV8MemoryUsed() const { |
| 48 DCHECK(thread_checker_.CalledOnValidThread()); | 73 DCHECK(thread_checker_.CalledOnValidThread()); |
| 49 if (stats_ && stats_->reports_v8_stats) | 74 if (stats_ && stats_->reports_v8_stats) |
| 50 return stats_->v8_bytes_used; | 75 return stats_->v8_bytes_used; |
| 51 return 0; | 76 return 0; |
| 52 } | 77 } |
| OLD | NEW |