Chromium Code Reviews| Index: chrome/browser/task_management/sampling/task_manager_impl.cc |
| diff --git a/chrome/browser/task_management/sampling/task_manager_impl.cc b/chrome/browser/task_management/sampling/task_manager_impl.cc |
| index 7fee4a5bcc3ee688e6b93b4c54f1a871fb6c44ef..d4200ee32308caee8f5d85426ba6bf9dbbddbf26 100644 |
| --- a/chrome/browser/task_management/sampling/task_manager_impl.cc |
| +++ b/chrome/browser/task_management/sampling/task_manager_impl.cc |
| @@ -38,7 +38,10 @@ base::LazyInstance<TaskManagerImpl> lazy_task_manager_instance = |
| } // namespace |
| TaskManagerImpl::TaskManagerImpl() |
| - : blocking_pool_runner_(GetBlockingPoolRunner()), |
| + : on_background_data_ready_callback_(base::Bind( |
| + &TaskManagerImpl::OnTaskGroupBackgroundCalculationsDone, |
| + base::Unretained(this))), |
| + blocking_pool_runner_(GetBlockingPoolRunner()), |
| is_running_(false) { |
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| @@ -179,6 +182,20 @@ Task::Type TaskManagerImpl::GetType(TaskId task_id) const { |
| return GetTaskByTaskId(task_id)->GetType(); |
| } |
| +int TaskManagerImpl::GetTabId(TaskId task_id) const { |
| + return GetTaskByTaskId(task_id)->GetTabId(); |
| +} |
| + |
| +int TaskManagerImpl::GetChildProcessUniqueId(TaskId task_id) const { |
| + return GetTaskByTaskId(task_id)->GetChildProcessUniqueID(); |
| +} |
| + |
| +void TaskManagerImpl::GetTerminationStatus(TaskId task_id, |
| + base::TerminationStatus* out_status, |
| + int* out_error_code) const { |
| + GetTaskByTaskId(task_id)->GetTerminationStatus(out_status, out_error_code); |
| +} |
| + |
| int64_t TaskManagerImpl::GetNetworkUsage(TaskId task_id) const { |
| return GetTaskByTaskId(task_id)->network_usage(); |
| } |
| @@ -240,6 +257,16 @@ const TaskIdList& TaskManagerImpl::GetTaskIdsList() const { |
| return sorted_task_ids_; |
| } |
| +TaskIdList TaskManagerImpl::GetIdsOfTasksSharingSameProcess( |
| + TaskId task_id) const { |
| + DCHECK(is_running_) << "Task manager is not running. You must observe the " |
| + "task manager for it to start running"; |
| + |
| + TaskIdList result; |
| + GetTaskGroupByTaskId(task_id)->AppendSortedTaskIds(&result); |
| + return result; |
| +} |
| + |
| size_t TaskManagerImpl::GetNumberOfTasksOnSameProcess(TaskId task_id) const { |
| return GetTaskGroupByTaskId(task_id)->num_tasks(); |
| } |
| @@ -255,6 +282,7 @@ void TaskManagerImpl::TaskAdded(Task* task) { |
| if (itr == task_groups_by_proc_id_.end()) { |
| task_group = new TaskGroup(task->process_handle(), |
| proc_id, |
| + on_background_data_ready_callback_, |
| blocking_pool_runner_); |
| task_groups_by_proc_id_[proc_id] = task_group; |
| } else { |
| @@ -296,6 +324,11 @@ void TaskManagerImpl::TaskRemoved(Task* task) { |
| } |
| } |
| +void TaskManagerImpl::TaskUnresponsive(Task* task) { |
| + DCHECK(task); |
| + NotifyObserversOnTaskUnresponsive(task->task_id()); |
| +} |
| + |
| void TaskManagerImpl::OnVideoMemoryUsageStatsUpdate( |
| const content::GPUVideoMemoryUsageStats& gpu_memory_stats) { |
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| @@ -395,4 +428,18 @@ Task* TaskManagerImpl::GetTaskByTaskId(TaskId task_id) const { |
| return GetTaskGroupByTaskId(task_id)->GetTaskById(task_id); |
| } |
| +void TaskManagerImpl::OnTaskGroupBackgroundCalculationsDone() { |
| + // TODO(afakhry): There should be a better way for doing this! |
| + bool are_all_processes_data_ready = true; |
| + for (auto& groups_itr : task_groups_by_proc_id_) { |
| + are_all_processes_data_ready &= |
| + groups_itr.second->AreBackgroundCalculationsDone(); |
| + } |
| + if (are_all_processes_data_ready) { |
| + NotifyObserversOnRefreshWithBackgroundCalculations(GetTaskIdsList()); |
| + for (auto& groups_itr : task_groups_by_proc_id_) |
| + groups_itr.second->ClearCurrentBackgroundCalculationsFlags(); |
|
ncarter (slow)
2016/02/19 18:19:03
Ah okay, this was the part I missed. I think this
|
| + } |
| +} |
| + |
| } // namespace task_management |