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/task_management/sampling/task_group_sampler.h" | 5 #include "chrome/browser/task_management/sampling/task_group_sampler.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 115 | 115 |
| 116 double TaskGroupSampler::RefreshCpuUsage() { | 116 double TaskGroupSampler::RefreshCpuUsage() { |
| 117 DCHECK(worker_pool_sequenced_checker_.CalledOnValidSequencedThread()); | 117 DCHECK(worker_pool_sequenced_checker_.CalledOnValidSequencedThread()); |
| 118 | 118 |
| 119 return process_metrics_->GetCPUUsage(); | 119 return process_metrics_->GetCPUUsage(); |
| 120 } | 120 } |
| 121 | 121 |
| 122 MemoryUsageStats TaskGroupSampler::RefreshMemoryUsage() { | 122 MemoryUsageStats TaskGroupSampler::RefreshMemoryUsage() { |
| 123 DCHECK(worker_pool_sequenced_checker_.CalledOnValidSequencedThread()); | 123 DCHECK(worker_pool_sequenced_checker_.CalledOnValidSequencedThread()); |
| 124 | 124 |
| 125 // TODO(afakhry): Integrate Bruce's CL for faster retrieval of physical memory | |
| 126 // on Windows here. | |
|
ncarter (slow)
2016/05/19 22:30:36
Did we ever do this?
afakhry
2016/05/20 00:34:35
We haven't. One reason was that Bruce's approach d
| |
| 127 | |
| 128 MemoryUsageStats memory_usage; | 125 MemoryUsageStats memory_usage; |
| 126 #if defined(OS_MACOSX) | |
| 127 if (process_metrics_->GetMemoryBytes(&memory_usage.private_bytes, | |
| 128 &memory_usage.shared_bytes)) { | |
| 129 memory_usage.physical_bytes = memory_usage.private_bytes; | |
| 130 } | |
| 131 #else | |
| 129 // Refreshing the physical/private/shared memory at one shot. | 132 // Refreshing the physical/private/shared memory at one shot. |
| 130 base::WorkingSetKBytes ws_usage; | 133 base::WorkingSetKBytes ws_usage; |
| 131 if (process_metrics_->GetWorkingSetKBytes(&ws_usage)) { | 134 if (process_metrics_->GetWorkingSetKBytes(&ws_usage)) { |
| 132 memory_usage.private_bytes = static_cast<int64_t>(ws_usage.priv * 1024); | 135 memory_usage.private_bytes = static_cast<int64_t>(ws_usage.priv * 1024); |
| 133 memory_usage.shared_bytes = static_cast<int64_t>(ws_usage.shared * 1024); | 136 memory_usage.shared_bytes = static_cast<int64_t>(ws_usage.shared * 1024); |
| 134 #if defined(OS_LINUX) | 137 #if defined(OS_LINUX) |
| 135 // On Linux private memory is also resident. Just use it. | 138 // On Linux private memory is also resident. Just use it. |
| 136 memory_usage.physical_bytes = memory_usage.private_bytes; | 139 memory_usage.physical_bytes = memory_usage.private_bytes; |
| 137 #else | 140 #else |
| 138 // Memory = working_set.private which is working set minus shareable. This | 141 // Memory = working_set.private which is working set minus shareable. This |
| 139 // avoids the unpredictable counting that occurs when calculating memory as | 142 // avoids the unpredictable counting that occurs when calculating memory as |
| 140 // working set minus shared (renderer code counted when one tab is open and | 143 // working set minus shared (renderer code counted when one tab is open and |
| 141 // not counted when two or more are open) and it is much more efficient to | 144 // not counted when two or more are open) and it is much more efficient to |
| 142 // calculate on Windows. | 145 // calculate on Windows. |
| 143 memory_usage.physical_bytes = | 146 memory_usage.physical_bytes = |
| 144 static_cast<int64_t>(process_metrics_->GetWorkingSetSize()); | 147 static_cast<int64_t>(process_metrics_->GetWorkingSetSize()); |
| 145 memory_usage.physical_bytes -= | 148 memory_usage.physical_bytes -= |
| 146 static_cast<int64_t>(ws_usage.shareable * 1024); | 149 static_cast<int64_t>(ws_usage.shareable * 1024); |
| 147 #endif | 150 #endif // defined(OS_LINUX) |
| 151 | |
| 148 #if defined(OS_CHROMEOS) | 152 #if defined(OS_CHROMEOS) |
| 149 memory_usage.swapped_bytes = ws_usage.swapped * 1024; | 153 memory_usage.swapped_bytes = ws_usage.swapped * 1024; |
| 150 #endif | 154 #endif // defined(OS_CHROMEOS) |
| 151 } | 155 } |
| 156 #endif // defined(OS_MACOSX) | |
| 152 | 157 |
| 153 return memory_usage; | 158 return memory_usage; |
| 154 } | 159 } |
| 155 | 160 |
| 156 int TaskGroupSampler::RefreshIdleWakeupsPerSecond() { | 161 int TaskGroupSampler::RefreshIdleWakeupsPerSecond() { |
| 157 DCHECK(worker_pool_sequenced_checker_.CalledOnValidSequencedThread()); | 162 DCHECK(worker_pool_sequenced_checker_.CalledOnValidSequencedThread()); |
| 158 | 163 |
| 159 return process_metrics_->GetIdleWakeupsPerSecond(); | 164 return process_metrics_->GetIdleWakeupsPerSecond(); |
| 160 } | 165 } |
| 161 | 166 |
| 162 #if defined(OS_LINUX) | 167 #if defined(OS_LINUX) |
| 163 int TaskGroupSampler::RefreshOpenFdCount() { | 168 int TaskGroupSampler::RefreshOpenFdCount() { |
| 164 DCHECK(worker_pool_sequenced_checker_.CalledOnValidSequencedThread()); | 169 DCHECK(worker_pool_sequenced_checker_.CalledOnValidSequencedThread()); |
| 165 | 170 |
| 166 return process_metrics_->GetOpenFdCount(); | 171 return process_metrics_->GetOpenFdCount(); |
| 167 } | 172 } |
| 168 #endif // defined(OS_LINUX) | 173 #endif // defined(OS_LINUX) |
| 169 | 174 |
| 170 bool TaskGroupSampler::RefreshProcessPriority() { | 175 bool TaskGroupSampler::RefreshProcessPriority() { |
| 171 DCHECK(worker_pool_sequenced_checker_.CalledOnValidSequencedThread()); | 176 DCHECK(worker_pool_sequenced_checker_.CalledOnValidSequencedThread()); |
| 172 | 177 |
| 173 return process_.IsProcessBackgrounded(); | 178 return process_.IsProcessBackgrounded(); |
| 174 } | 179 } |
| 175 | 180 |
| 176 } // namespace task_management | 181 } // namespace task_management |
| OLD | NEW |