| 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_manager/sampling/task_group.h" | 5 #include "chrome/browser/task_manager/sampling/task_group.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> | 8 #include <limits> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 101 #if !defined(DISABLE_NACL) | 101 #if !defined(DISABLE_NACL) |
| 102 nacl_debug_stub_port_(nacl::kGdbDebugStubPortUnknown), | 102 nacl_debug_stub_port_(nacl::kGdbDebugStubPortUnknown), |
| 103 #endif // !defined(DISABLE_NACL) | 103 #endif // !defined(DISABLE_NACL) |
| 104 idle_wakeups_per_second_(-1), | 104 idle_wakeups_per_second_(-1), |
| 105 #if defined(OS_LINUX) | 105 #if defined(OS_LINUX) |
| 106 open_fd_count_(-1), | 106 open_fd_count_(-1), |
| 107 #endif // defined(OS_LINUX) | 107 #endif // defined(OS_LINUX) |
| 108 gpu_memory_has_duplicates_(false), | 108 gpu_memory_has_duplicates_(false), |
| 109 is_backgrounded_(false), | 109 is_backgrounded_(false), |
| 110 weak_ptr_factory_(this) { | 110 weak_ptr_factory_(this) { |
| 111 scoped_refptr<TaskGroupSampler> sampler( | 111 if (process_id_ != base::kNullProcessId) { |
| 112 new TaskGroupSampler(base::Process::Open(proc_id), | 112 worker_thread_sampler_ = base::MakeRefCounted<TaskGroupSampler>( |
| 113 blocking_pool_runner, | 113 base::Process::Open(process_id_), blocking_pool_runner, |
| 114 base::Bind(&TaskGroup::OnCpuRefreshDone, | 114 base::Bind(&TaskGroup::OnCpuRefreshDone, |
| 115 weak_ptr_factory_.GetWeakPtr()), | 115 weak_ptr_factory_.GetWeakPtr()), |
| 116 base::Bind(&TaskGroup::OnMemoryUsageRefreshDone, | 116 base::Bind(&TaskGroup::OnMemoryUsageRefreshDone, |
| 117 weak_ptr_factory_.GetWeakPtr()), | 117 weak_ptr_factory_.GetWeakPtr()), |
| 118 base::Bind(&TaskGroup::OnIdleWakeupsRefreshDone, | 118 base::Bind(&TaskGroup::OnIdleWakeupsRefreshDone, |
| 119 weak_ptr_factory_.GetWeakPtr()), | 119 weak_ptr_factory_.GetWeakPtr()), |
| 120 #if defined(OS_LINUX) | 120 #if defined(OS_LINUX) |
| 121 base::Bind(&TaskGroup::OnOpenFdCountRefreshDone, | 121 base::Bind(&TaskGroup::OnOpenFdCountRefreshDone, |
| 122 weak_ptr_factory_.GetWeakPtr()), | 122 weak_ptr_factory_.GetWeakPtr()), |
| 123 #endif // defined(OS_LINUX) | 123 #endif // defined(OS_LINUX) |
| 124 base::Bind(&TaskGroup::OnProcessPriorityDone, | 124 base::Bind(&TaskGroup::OnProcessPriorityDone, |
| 125 weak_ptr_factory_.GetWeakPtr()))); | 125 weak_ptr_factory_.GetWeakPtr())); |
| 126 worker_thread_sampler_.swap(sampler); | |
| 127 | 126 |
| 128 shared_sampler_->RegisterCallbacks( | 127 shared_sampler_->RegisterCallbacks( |
| 129 process_id_, base::Bind(&TaskGroup::OnIdleWakeupsRefreshDone, | 128 process_id_, |
| 130 weak_ptr_factory_.GetWeakPtr()), | 129 base::Bind(&TaskGroup::OnIdleWakeupsRefreshDone, |
| 131 base::Bind(&TaskGroup::OnPhysicalMemoryUsageRefreshDone, | 130 weak_ptr_factory_.GetWeakPtr()), |
| 132 weak_ptr_factory_.GetWeakPtr()), | 131 base::Bind(&TaskGroup::OnPhysicalMemoryUsageRefreshDone, |
| 133 base::Bind(&TaskGroup::OnStartTimeRefreshDone, | 132 weak_ptr_factory_.GetWeakPtr()), |
| 134 weak_ptr_factory_.GetWeakPtr()), | 133 base::Bind(&TaskGroup::OnStartTimeRefreshDone, |
| 135 base::Bind(&TaskGroup::OnCpuTimeRefreshDone, | 134 weak_ptr_factory_.GetWeakPtr()), |
| 136 weak_ptr_factory_.GetWeakPtr())); | 135 base::Bind(&TaskGroup::OnCpuTimeRefreshDone, |
| 136 weak_ptr_factory_.GetWeakPtr())); |
| 137 } |
| 137 } | 138 } |
| 138 | 139 |
| 139 TaskGroup::~TaskGroup() { | 140 TaskGroup::~TaskGroup() { |
| 140 shared_sampler_->UnregisterCallbacks(process_id_); | 141 shared_sampler_->UnregisterCallbacks(process_id_); |
| 141 } | 142 } |
| 142 | 143 |
| 143 void TaskGroup::AddTask(Task* task) { | 144 void TaskGroup::AddTask(Task* task) { |
| 144 DCHECK(task); | 145 DCHECK(task); |
| 145 tasks_.push_back(task); | 146 tasks_.push_back(task); |
| 146 } | 147 } |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 216 process_handle_); | 217 process_handle_); |
| 217 } | 218 } |
| 218 | 219 |
| 219 // The remaining resource refreshes are time consuming and cannot be done on | 220 // The remaining resource refreshes are time consuming and cannot be done on |
| 220 // the UI thread. Do them all on the worker thread using the TaskGroupSampler. | 221 // the UI thread. Do them all on the worker thread using the TaskGroupSampler. |
| 221 // 7- CPU usage. | 222 // 7- CPU usage. |
| 222 // 8- Memory usage. | 223 // 8- Memory usage. |
| 223 // 9- Idle Wakeups per second. | 224 // 9- Idle Wakeups per second. |
| 224 // 10- (Linux and ChromeOS only) The number of file descriptors current open. | 225 // 10- (Linux and ChromeOS only) The number of file descriptors current open. |
| 225 // 11- Process priority (foreground vs. background). | 226 // 11- Process priority (foreground vs. background). |
| 226 worker_thread_sampler_->Refresh(refresh_flags); | 227 if (worker_thread_sampler_) |
| 228 worker_thread_sampler_->Refresh(refresh_flags); |
| 227 } | 229 } |
| 228 | 230 |
| 229 Task* TaskGroup::GetTaskById(TaskId task_id) const { | 231 Task* TaskGroup::GetTaskById(TaskId task_id) const { |
| 230 for (Task* task : tasks_) { | 232 for (Task* task : tasks_) { |
| 231 if (task->task_id() == task_id) | 233 if (task->task_id() == task_id) |
| 232 return task; | 234 return task; |
| 233 } | 235 } |
| 234 NOTREACHED(); | 236 NOTREACHED(); |
| 235 return nullptr; | 237 return nullptr; |
| 236 } | 238 } |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 351 | 353 |
| 352 void TaskGroup::OnBackgroundRefreshTypeFinished(int64_t finished_refresh_type) { | 354 void TaskGroup::OnBackgroundRefreshTypeFinished(int64_t finished_refresh_type) { |
| 353 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 355 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 354 | 356 |
| 355 current_on_bg_done_flags_ |= finished_refresh_type; | 357 current_on_bg_done_flags_ |= finished_refresh_type; |
| 356 if (AreBackgroundCalculationsDone()) | 358 if (AreBackgroundCalculationsDone()) |
| 357 on_background_calculations_done_.Run(); | 359 on_background_calculations_done_.Run(); |
| 358 } | 360 } |
| 359 | 361 |
| 360 } // namespace task_manager | 362 } // namespace task_manager |
| OLD | NEW |