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 |