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

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

Issue 2146273002: TaskManager: when shown or activated, select the last active tab. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@triple_click_tm
Patch Set: Fix compile. 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 "base/stl_util.h" 15 #include "base/stl_util.h"
16 #include "build/build_config.h" 16 #include "build/build_config.h"
17 #include "chrome/browser/task_management/providers/browser_process_task_provider .h" 17 #include "chrome/browser/task_management/providers/browser_process_task_provider .h"
18 #include "chrome/browser/task_management/providers/child_process_task_provider.h " 18 #include "chrome/browser/task_management/providers/child_process_task_provider.h "
19 #include "chrome/browser/task_management/providers/web_contents/web_contents_tas k_provider.h" 19 #include "chrome/browser/task_management/providers/web_contents/web_contents_tas k_provider.h"
20 #include "content/public/browser/browser_thread.h" 20 #include "content/public/browser/browser_thread.h"
21 #include "content/public/browser/gpu_data_manager.h" 21 #include "content/public/browser/gpu_data_manager.h"
22 #include "content/public/browser/render_frame_host.h"
23 #include "content/public/browser/render_process_host.h"
24 #include "content/public/browser/web_contents.h"
22 25
23 #if defined(OS_CHROMEOS) 26 #if defined(OS_CHROMEOS)
24 #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"
25 #include "components/arc/arc_bridge_service.h" 28 #include "components/arc/arc_bridge_service.h"
26 #endif // defined(OS_CHROMEOS) 29 #endif // defined(OS_CHROMEOS)
27 30
28 namespace task_management { 31 namespace task_management {
29 32
30 namespace { 33 namespace {
31 34
(...skipping 10 matching lines...) Expand all
42 } // namespace 45 } // namespace
43 46
44 TaskManagerImpl::TaskManagerImpl() 47 TaskManagerImpl::TaskManagerImpl()
45 : on_background_data_ready_callback_(base::Bind( 48 : on_background_data_ready_callback_(base::Bind(
46 &TaskManagerImpl::OnTaskGroupBackgroundCalculationsDone, 49 &TaskManagerImpl::OnTaskGroupBackgroundCalculationsDone,
47 base::Unretained(this))), 50 base::Unretained(this))),
48 blocking_pool_runner_(GetBlockingPoolRunner()), 51 blocking_pool_runner_(GetBlockingPoolRunner()),
49 is_running_(false) { 52 is_running_(false) {
50 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 53 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
51 54
52 task_providers_.push_back(new BrowserProcessTaskProvider()); 55 task_providers_.emplace_back(new BrowserProcessTaskProvider());
53 task_providers_.push_back(new ChildProcessTaskProvider()); 56 task_providers_.emplace_back(new ChildProcessTaskProvider());
54 task_providers_.push_back(new WebContentsTaskProvider()); 57 task_providers_.emplace_back(new WebContentsTaskProvider());
55 #if defined(OS_CHROMEOS) 58 #if defined(OS_CHROMEOS)
56 if (arc::ArcBridgeService::GetEnabled( 59 if (arc::ArcBridgeService::GetEnabled(
57 base::CommandLine::ForCurrentProcess())) { 60 base::CommandLine::ForCurrentProcess())) {
58 task_providers_.push_back(new ArcProcessTaskProvider()); 61 task_providers_.emplace_back(new ArcProcessTaskProvider());
59 } 62 }
60 #endif // defined(OS_CHROMEOS) 63 #endif // defined(OS_CHROMEOS)
61 64
62 content::GpuDataManager::GetInstance()->AddObserver(this); 65 content::GpuDataManager::GetInstance()->AddObserver(this);
63 } 66 }
64 67
65 TaskManagerImpl::~TaskManagerImpl() { 68 TaskManagerImpl::~TaskManagerImpl() {
66 content::GpuDataManager::GetInstance()->RemoveObserver(this); 69 content::GpuDataManager::GetInstance()->RemoveObserver(this);
67 70
68 STLDeleteValues(&task_groups_by_proc_id_); 71 STLDeleteValues(&task_groups_by_proc_id_);
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 for (Task* task : group->tasks()) 358 for (Task* task : group->tasks())
356 result.push_back(task->task_id()); 359 result.push_back(task->task_id());
357 } 360 }
358 return result; 361 return result;
359 } 362 }
360 363
361 size_t TaskManagerImpl::GetNumberOfTasksOnSameProcess(TaskId task_id) const { 364 size_t TaskManagerImpl::GetNumberOfTasksOnSameProcess(TaskId task_id) const {
362 return GetTaskGroupByTaskId(task_id)->num_tasks(); 365 return GetTaskGroupByTaskId(task_id)->num_tasks();
363 } 366 }
364 367
368 TaskId TaskManagerImpl::GetTaskIdForWebContents(
369 content::WebContents* web_contents) const {
370 if (!web_contents)
371 return -1;
372 content::RenderFrameHost* rfh = web_contents->GetMainFrame();
373 Task* task =
374 GetTaskByPidOrRoute(0, rfh->GetProcess()->GetID(), rfh->GetRoutingID());
375 if (!task)
376 return -1;
377 return task->task_id();
378 }
379
365 void TaskManagerImpl::TaskAdded(Task* task) { 380 void TaskManagerImpl::TaskAdded(Task* task) {
366 DCHECK(task); 381 DCHECK(task);
367 382
368 TaskGroup* task_group = nullptr; 383 TaskGroup* task_group = nullptr;
369 const base::ProcessId proc_id = task->process_id(); 384 const base::ProcessId proc_id = task->process_id();
370 const TaskId task_id = task->task_id(); 385 const TaskId task_id = task->task_id();
371 386
372 auto itr = task_groups_by_proc_id_.find(proc_id); 387 auto itr = task_groups_by_proc_id_.find(proc_id);
373 if (itr == task_groups_by_proc_id_.end()) { 388 if (itr == task_groups_by_proc_id_.end()) {
374 task_group = new TaskGroup(task->process_handle(), 389 task_group = new TaskGroup(task->process_handle(),
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
463 478
464 NotifyObserversOnRefresh(GetTaskIdsList()); 479 NotifyObserversOnRefresh(GetTaskIdsList());
465 } 480 }
466 481
467 void TaskManagerImpl::StartUpdating() { 482 void TaskManagerImpl::StartUpdating() {
468 if (is_running_) 483 if (is_running_)
469 return; 484 return;
470 485
471 is_running_ = true; 486 is_running_ = true;
472 487
473 for (auto* provider : task_providers_) 488 for (const auto& provider : task_providers_)
474 provider->SetObserver(this); 489 provider->SetObserver(this);
475 490
476 io_thread_helper_manager_.reset(new IoThreadHelperManager); 491 io_thread_helper_manager_.reset(new IoThreadHelperManager);
477 } 492 }
478 493
479 void TaskManagerImpl::StopUpdating() { 494 void TaskManagerImpl::StopUpdating() {
480 if (!is_running_) 495 if (!is_running_)
481 return; 496 return;
482 497
483 is_running_ = false; 498 is_running_ = false;
484 499
485 io_thread_helper_manager_.reset(); 500 io_thread_helper_manager_.reset();
486 501
487 for (auto* provider : task_providers_) 502 for (const auto& provider : task_providers_)
488 provider->ClearObserver(); 503 provider->ClearObserver();
489 504
490 STLDeleteValues(&task_groups_by_proc_id_); 505 STLDeleteValues(&task_groups_by_proc_id_);
491 task_groups_by_task_id_.clear(); 506 task_groups_by_task_id_.clear();
492 sorted_task_ids_.clear(); 507 sorted_task_ids_.clear();
493 } 508 }
494 509
510 Task* TaskManagerImpl::GetTaskByPidOrRoute(int origin_pid,
511 int child_id,
512 int route_id) const {
513 for (const auto& task_provider : task_providers_) {
514 Task* task =
515 task_provider->GetTaskOfUrlRequest(origin_pid, child_id, route_id);
516 if (task)
517 return task;
518 }
519 return nullptr;
520 }
521
495 bool TaskManagerImpl::UpdateTasksWithBytesRead(const BytesReadParam& param) { 522 bool TaskManagerImpl::UpdateTasksWithBytesRead(const BytesReadParam& param) {
496 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 523 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
497 524
498 for (auto* task_provider : task_providers_) { 525 Task* task =
499 Task* task = task_provider->GetTaskOfUrlRequest(param.origin_pid, 526 GetTaskByPidOrRoute(param.origin_pid, param.child_id, param.route_id);
500 param.child_id, 527 if (task) {
501 param.route_id); 528 task->OnNetworkBytesRead(param.byte_count);
502 if (task) { 529 return true;
503 task->OnNetworkBytesRead(param.byte_count);
504 return true;
505 }
506 } 530 }
507 531
508 // Couldn't match the bytes to any existing task. 532 // Couldn't match the bytes to any existing task.
509 return false; 533 return false;
510 } 534 }
511 535
512 TaskGroup* TaskManagerImpl::GetTaskGroupByTaskId(TaskId task_id) const { 536 TaskGroup* TaskManagerImpl::GetTaskGroupByTaskId(TaskId task_id) const {
513 auto it = task_groups_by_task_id_.find(task_id); 537 auto it = task_groups_by_task_id_.find(task_id);
514 DCHECK(it != task_groups_by_task_id_.end()); 538 DCHECK(it != task_groups_by_task_id_.end());
515 return it->second; 539 return it->second;
(...skipping 11 matching lines...) Expand all
527 groups_itr.second->AreBackgroundCalculationsDone(); 551 groups_itr.second->AreBackgroundCalculationsDone();
528 } 552 }
529 if (are_all_processes_data_ready) { 553 if (are_all_processes_data_ready) {
530 NotifyObserversOnRefreshWithBackgroundCalculations(GetTaskIdsList()); 554 NotifyObserversOnRefreshWithBackgroundCalculations(GetTaskIdsList());
531 for (const auto& groups_itr : task_groups_by_proc_id_) 555 for (const auto& groups_itr : task_groups_by_proc_id_)
532 groups_itr.second->ClearCurrentBackgroundCalculationsFlags(); 556 groups_itr.second->ClearCurrentBackgroundCalculationsFlags();
533 } 557 }
534 } 558 }
535 559
536 } // namespace task_management 560 } // namespace task_management
OLDNEW
« no previous file with comments | « chrome/browser/task_management/sampling/task_manager_impl.h ('k') | chrome/browser/task_management/task_manager_interface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698