Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(330)

Side by Side Diff: chrome/browser/task_management/sampling/task_manager_impl.cc

Issue 2178733002: Task manager should support Idle Wakeups on Windows (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed build error on win_clang Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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_manager_impl.h" 5 #include "chrome/browser/task_management/sampling/task_manager_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 #include <unordered_map> 9 #include <unordered_map>
10 #include <unordered_set> 10 #include <unordered_set>
11 #include <vector> 11 #include <vector>
12 12
13 #include "base/command_line.h" 13 #include "base/command_line.h"
14 #include "base/containers/adapters.h" 14 #include "base/containers/adapters.h"
15 #include "build/build_config.h" 15 #include "build/build_config.h"
16 #include "chrome/browser/task_management/providers/browser_process_task_provider .h" 16 #include "chrome/browser/task_management/providers/browser_process_task_provider .h"
17 #include "chrome/browser/task_management/providers/child_process_task_provider.h " 17 #include "chrome/browser/task_management/providers/child_process_task_provider.h "
18 #include "chrome/browser/task_management/providers/web_contents/web_contents_tas k_provider.h" 18 #include "chrome/browser/task_management/providers/web_contents/web_contents_tas k_provider.h"
19 #include "chrome/browser/task_management/sampling/shared_sampler.h"
19 #include "content/public/browser/browser_thread.h" 20 #include "content/public/browser/browser_thread.h"
20 #include "content/public/browser/gpu_data_manager.h" 21 #include "content/public/browser/gpu_data_manager.h"
21 #include "content/public/browser/render_frame_host.h" 22 #include "content/public/browser/render_frame_host.h"
22 #include "content/public/browser/render_process_host.h" 23 #include "content/public/browser/render_process_host.h"
23 #include "content/public/browser/web_contents.h" 24 #include "content/public/browser/web_contents.h"
24 25
25 #if defined(OS_CHROMEOS) 26 #if defined(OS_CHROMEOS)
26 #include "chrome/browser/task_management/providers/arc/arc_process_task_provider .h" 27 #include "chrome/browser/task_management/providers/arc/arc_process_task_provider .h"
27 #include "components/arc/arc_bridge_service.h" 28 #include "components/arc/arc_bridge_service.h"
28 #endif // defined(OS_CHROMEOS) 29 #endif // defined(OS_CHROMEOS)
29 30
30 namespace task_management { 31 namespace task_management {
31 32
32 namespace { 33 namespace {
33 34
34 scoped_refptr<base::SequencedTaskRunner> GetBlockingPoolRunner() { 35 scoped_refptr<base::SequencedTaskRunner> GetBlockingPoolRunner() {
35 base::SequencedWorkerPool* blocking_pool = 36 base::SequencedWorkerPool* blocking_pool =
36 content::BrowserThread::GetBlockingPool(); 37 content::BrowserThread::GetBlockingPool();
37 return blocking_pool->GetSequencedTaskRunner( 38 return blocking_pool->GetSequencedTaskRunner(
38 blocking_pool->GetSequenceToken()); 39 blocking_pool->GetSequenceToken());
39 } 40 }
40 41
41 base::LazyInstance<TaskManagerImpl> lazy_task_manager_instance = 42 base::LazyInstance<TaskManagerImpl> lazy_task_manager_instance =
42 LAZY_INSTANCE_INITIALIZER; 43 LAZY_INSTANCE_INITIALIZER;
43 44
44 } // namespace 45 } // namespace
45 46
46 TaskManagerImpl::TaskManagerImpl() 47 TaskManagerImpl::TaskManagerImpl()
47 : on_background_data_ready_callback_(base::Bind( 48 : on_background_data_ready_callback_(
48 &TaskManagerImpl::OnTaskGroupBackgroundCalculationsDone, 49 base::Bind(&TaskManagerImpl::OnTaskGroupBackgroundCalculationsDone,
49 base::Unretained(this))), 50 base::Unretained(this))),
50 blocking_pool_runner_(GetBlockingPoolRunner()), 51 blocking_pool_runner_(GetBlockingPoolRunner()),
52 shared_sampler_(new SharedSampler(blocking_pool_runner_)),
51 is_running_(false) { 53 is_running_(false) {
52 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 54 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
53 55
54 task_providers_.emplace_back(new BrowserProcessTaskProvider()); 56 task_providers_.emplace_back(new BrowserProcessTaskProvider());
55 task_providers_.emplace_back(new ChildProcessTaskProvider()); 57 task_providers_.emplace_back(new ChildProcessTaskProvider());
56 task_providers_.emplace_back(new WebContentsTaskProvider()); 58 task_providers_.emplace_back(new WebContentsTaskProvider());
57 #if defined(OS_CHROMEOS) 59 #if defined(OS_CHROMEOS)
58 if (arc::ArcBridgeService::GetEnabled( 60 if (arc::ArcBridgeService::GetEnabled(
59 base::CommandLine::ForCurrentProcess())) { 61 base::CommandLine::ForCurrentProcess())) {
60 task_providers_.emplace_back(new ArcProcessTaskProvider()); 62 task_providers_.emplace_back(new ArcProcessTaskProvider());
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 void TaskManagerImpl::TaskAdded(Task* task) { 379 void TaskManagerImpl::TaskAdded(Task* task) {
378 DCHECK(task); 380 DCHECK(task);
379 381
380 const base::ProcessId proc_id = task->process_id(); 382 const base::ProcessId proc_id = task->process_id();
381 const TaskId task_id = task->task_id(); 383 const TaskId task_id = task->task_id();
382 384
383 std::unique_ptr<TaskGroup>& task_group = task_groups_by_proc_id_[proc_id]; 385 std::unique_ptr<TaskGroup>& task_group = task_groups_by_proc_id_[proc_id];
384 if (!task_group) 386 if (!task_group)
385 task_group.reset(new TaskGroup(task->process_handle(), proc_id, 387 task_group.reset(new TaskGroup(task->process_handle(), proc_id,
386 on_background_data_ready_callback_, 388 on_background_data_ready_callback_,
387 blocking_pool_runner_)); 389 shared_sampler_, blocking_pool_runner_));
388 390
389 task_group->AddTask(task); 391 task_group->AddTask(task);
390 392
391 task_groups_by_task_id_[task_id] = task_group.get(); 393 task_groups_by_task_id_[task_id] = task_group.get();
392 394
393 // Invalidate the cached sorted IDs by clearing the list. 395 // Invalidate the cached sorted IDs by clearing the list.
394 sorted_task_ids_.clear(); 396 sorted_task_ids_.clear();
395 397
396 NotifyObserversOnTaskAdded(task_id); 398 NotifyObserversOnTaskAdded(task_id);
397 } 399 }
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
538 groups_itr.second->AreBackgroundCalculationsDone(); 540 groups_itr.second->AreBackgroundCalculationsDone();
539 } 541 }
540 if (are_all_processes_data_ready) { 542 if (are_all_processes_data_ready) {
541 NotifyObserversOnRefreshWithBackgroundCalculations(GetTaskIdsList()); 543 NotifyObserversOnRefreshWithBackgroundCalculations(GetTaskIdsList());
542 for (const auto& groups_itr : task_groups_by_proc_id_) 544 for (const auto& groups_itr : task_groups_by_proc_id_)
543 groups_itr.second->ClearCurrentBackgroundCalculationsFlags(); 545 groups_itr.second->ClearCurrentBackgroundCalculationsFlags();
544 } 546 }
545 } 547 }
546 548
547 } // namespace task_management 549 } // namespace task_management
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698