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

Side by Side Diff: chrome/browser/task_management/providers/child_process_task_provider.cc

Issue 1095183004: [chrome/browser/t*] favor DCHECK_CURRENTLY_ON for better logs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Adding files Created 5 years, 8 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
« no previous file with comments | « no previous file | chrome/browser/themes/browser_theme_pack.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/providers/child_process_task_provider.h " 5 #include "chrome/browser/task_management/providers/child_process_task_provider.h "
6 6
7 #include "base/process/process.h" 7 #include "base/process/process.h"
8 #include "base/stl_util.h" 8 #include "base/stl_util.h"
9 #include "chrome/browser/task_management/providers/child_process_task.h" 9 #include "chrome/browser/task_management/providers/child_process_task.h"
10 #include "content/public/browser/browser_child_process_host_iterator.h" 10 #include "content/public/browser/browser_child_process_host_iterator.h"
11 #include "content/public/browser/browser_thread.h" 11 #include "content/public/browser/browser_thread.h"
12 #include "content/public/browser/child_process_data.h" 12 #include "content/public/browser/child_process_data.h"
13 13
14 using content::BrowserChildProcessHostIterator; 14 using content::BrowserChildProcessHostIterator;
15 using content::BrowserThread; 15 using content::BrowserThread;
16 using content::ChildProcessData; 16 using content::ChildProcessData;
17 17
18 namespace task_management { 18 namespace task_management {
19 19
20 namespace { 20 namespace {
21 21
22 // Collects and returns the child processes data on the IO thread to get all the 22 // Collects and returns the child processes data on the IO thread to get all the
23 // pre-existing child process before we start observing 23 // pre-existing child process before we start observing
24 // |BrowserChildProcessObserver|. 24 // |BrowserChildProcessObserver|.
25 scoped_ptr<std::vector<ChildProcessData>> CollectChildProcessData() { 25 scoped_ptr<std::vector<ChildProcessData>> CollectChildProcessData() {
26 // The |BrowserChildProcessHostIterator| must only be used on the IO thread. 26 // The |BrowserChildProcessHostIterator| must only be used on the IO thread.
27 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 27 DCHECK_CURRENTLY_ON(BrowserThread::IO);
28 28
29 scoped_ptr<std::vector<ChildProcessData>> child_processes( 29 scoped_ptr<std::vector<ChildProcessData>> child_processes(
30 new std::vector<ChildProcessData>()); 30 new std::vector<ChildProcessData>());
31 for (BrowserChildProcessHostIterator itr; !itr.Done(); ++itr) { 31 for (BrowserChildProcessHostIterator itr; !itr.Done(); ++itr) {
32 const ChildProcessData& process_data = itr.GetData(); 32 const ChildProcessData& process_data = itr.GetData();
33 33
34 // Only add processes that have already started, i.e. with valid handles. 34 // Only add processes that have already started, i.e. with valid handles.
35 if (process_data.handle == base::kNullProcessHandle) 35 if (process_data.handle == base::kNullProcessHandle)
36 continue; 36 continue;
37 37
(...skipping 10 matching lines...) Expand all
48 tasks_by_pid_(), 48 tasks_by_pid_(),
49 weak_ptr_factory_(this) { 49 weak_ptr_factory_(this) {
50 } 50 }
51 51
52 ChildProcessTaskProvider::~ChildProcessTaskProvider() { 52 ChildProcessTaskProvider::~ChildProcessTaskProvider() {
53 } 53 }
54 54
55 Task* ChildProcessTaskProvider::GetTaskOfUrlRequest(int origin_pid, 55 Task* ChildProcessTaskProvider::GetTaskOfUrlRequest(int origin_pid,
56 int child_id, 56 int child_id,
57 int route_id) { 57 int route_id) {
58 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 58 DCHECK_CURRENTLY_ON(BrowserThread::UI);
59 auto itr = tasks_by_pid_.find(static_cast<base::ProcessId>(origin_pid)); 59 auto itr = tasks_by_pid_.find(static_cast<base::ProcessId>(origin_pid));
60 if (itr == tasks_by_pid_.end()) 60 if (itr == tasks_by_pid_.end())
61 return nullptr; 61 return nullptr;
62 62
63 return itr->second; 63 return itr->second;
64 } 64 }
65 65
66 void ChildProcessTaskProvider::BrowserChildProcessHostConnected( 66 void ChildProcessTaskProvider::BrowserChildProcessHostConnected(
67 const content::ChildProcessData& data) { 67 const content::ChildProcessData& data) {
68 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 68 DCHECK_CURRENTLY_ON(BrowserThread::UI);
69 if (data.handle == base::kNullProcessHandle) 69 if (data.handle == base::kNullProcessHandle)
70 return; 70 return;
71 71
72 CreateTask(data); 72 CreateTask(data);
73 } 73 }
74 74
75 void ChildProcessTaskProvider::BrowserChildProcessHostDisconnected( 75 void ChildProcessTaskProvider::BrowserChildProcessHostDisconnected(
76 const content::ChildProcessData& data) { 76 const content::ChildProcessData& data) {
77 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 77 DCHECK_CURRENTLY_ON(BrowserThread::UI);
78 DeleteTask(data.handle); 78 DeleteTask(data.handle);
79 } 79 }
80 80
81 void ChildProcessTaskProvider::StartUpdating() { 81 void ChildProcessTaskProvider::StartUpdating() {
82 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 82 DCHECK_CURRENTLY_ON(BrowserThread::UI);
83 DCHECK(tasks_by_handle_.empty()); 83 DCHECK(tasks_by_handle_.empty());
84 DCHECK(tasks_by_pid_.empty()); 84 DCHECK(tasks_by_pid_.empty());
85 85
86 // First, get the pre-existing child processes data. 86 // First, get the pre-existing child processes data.
87 BrowserThread::PostTaskAndReplyWithResult( 87 BrowserThread::PostTaskAndReplyWithResult(
88 BrowserThread::IO, 88 BrowserThread::IO,
89 FROM_HERE, 89 FROM_HERE,
90 base::Bind(&CollectChildProcessData), 90 base::Bind(&CollectChildProcessData),
91 base::Bind(&ChildProcessTaskProvider::ChildProcessDataCollected, 91 base::Bind(&ChildProcessTaskProvider::ChildProcessDataCollected,
92 weak_ptr_factory_.GetWeakPtr())); 92 weak_ptr_factory_.GetWeakPtr()));
93 } 93 }
94 94
95 void ChildProcessTaskProvider::StopUpdating() { 95 void ChildProcessTaskProvider::StopUpdating() {
96 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 96 DCHECK_CURRENTLY_ON(BrowserThread::UI);
97 97
98 // ChildProcessDataCollected() should never be called after this, and hence 98 // ChildProcessDataCollected() should never be called after this, and hence
99 // we must invalidate the weak pointers. 99 // we must invalidate the weak pointers.
100 weak_ptr_factory_.InvalidateWeakPtrs(); 100 weak_ptr_factory_.InvalidateWeakPtrs();
101 101
102 // First, stop observing. 102 // First, stop observing.
103 BrowserChildProcessObserver::Remove(this); 103 BrowserChildProcessObserver::Remove(this);
104 104
105 // Remember: You can't notify the observer of tasks removal here, 105 // Remember: You can't notify the observer of tasks removal here,
106 // StopUpdating() is called after the observer has been cleared. 106 // StopUpdating() is called after the observer has been cleared.
107 107
108 // Then delete all tasks (if any). 108 // Then delete all tasks (if any).
109 STLDeleteValues(&tasks_by_handle_); // This will clear |tasks_by_handle_|. 109 STLDeleteValues(&tasks_by_handle_); // This will clear |tasks_by_handle_|.
110 tasks_by_pid_.clear(); 110 tasks_by_pid_.clear();
111 } 111 }
112 112
113 void ChildProcessTaskProvider::ChildProcessDataCollected( 113 void ChildProcessTaskProvider::ChildProcessDataCollected(
114 scoped_ptr<const std::vector<content::ChildProcessData>> child_processes) { 114 scoped_ptr<const std::vector<content::ChildProcessData>> child_processes) {
115 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 115 DCHECK_CURRENTLY_ON(BrowserThread::UI);
116 116
117 for (auto& process_data : *child_processes) 117 for (auto& process_data : *child_processes)
118 CreateTask(process_data); 118 CreateTask(process_data);
119 119
120 // Now start observing. 120 // Now start observing.
121 BrowserChildProcessObserver::Add(this); 121 BrowserChildProcessObserver::Add(this);
122 } 122 }
123 123
124 void ChildProcessTaskProvider::CreateTask( 124 void ChildProcessTaskProvider::CreateTask(
125 const content::ChildProcessData& data) { 125 const content::ChildProcessData& data) {
(...skipping 29 matching lines...) Expand all
155 155
156 NotifyObserverTaskRemoved(task); 156 NotifyObserverTaskRemoved(task);
157 157
158 // Finally delete the task. 158 // Finally delete the task.
159 tasks_by_handle_.erase(itr); 159 tasks_by_handle_.erase(itr);
160 tasks_by_pid_.erase(task->process_id()); 160 tasks_by_pid_.erase(task->process_id());
161 delete task; 161 delete task;
162 } 162 }
163 163
164 } // namespace task_management 164 } // namespace task_management
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/themes/browser_theme_pack.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698