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

Side by Side Diff: chrome/browser/task_management/providers/arc/arc_process_task_provider.cc

Issue 1534423002: Revert of arc-bridge: Move most methods to Mojo interfaces (Closed) Base URL: https://chromium.googlesource.com/a/chromium/src.git@master
Patch Set: Created 5 years 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/providers/arc/arc_process_task_provider .h" 5 #include "chrome/browser/task_management/providers/arc/arc_process_task_provider .h"
6 6
7 #include <queue> 7 #include <queue>
8 #include <set> 8 #include <set>
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 queue.push(child_pid); 74 queue.push(child_pid);
75 } 75 }
76 } 76 }
77 return nspid_to_pid; 77 return nspid_to_pid;
78 } 78 }
79 79
80 } // namespace 80 } // namespace
81 81
82 namespace task_management { 82 namespace task_management {
83 83
84 ArcProcessTaskProvider::ArcProcessTaskProvider() : weak_ptr_factory_(this) {} 84 ArcProcessTaskProvider::ArcProcessTaskProvider()
85 : weak_ptr_factory_(this) {
86 }
85 87
86 ArcProcessTaskProvider::~ArcProcessTaskProvider() {} 88 ArcProcessTaskProvider::~ArcProcessTaskProvider() {
89 }
87 90
88 Task* ArcProcessTaskProvider::GetTaskOfUrlRequest(int origin_pid, 91 Task* ArcProcessTaskProvider::GetTaskOfUrlRequest(int origin_pid,
89 int child_id, 92 int child_id,
90 int route_id) { 93 int route_id) {
91 // ARC tasks are not associated with any URL request. 94 // ARC tasks are not associated with any URL request.
92 return nullptr; 95 return nullptr;
93 } 96 }
94 97
95 void ArcProcessTaskProvider::OnUpdateProcessList( 98 void ArcProcessTaskProvider::OnUpdateProcessList(
96 mojo::Array<arc::RunningAppProcessInfoPtr> processes) { 99 const std::vector<arc::RunningAppProcessInfo>& processes) {
97 TRACE_EVENT0("browser", "ArcProcessTaskProvider::OnUpdateProcessList"); 100 TRACE_EVENT0("browser", "ArcProcessTaskProvider::OnUpdateProcessList");
98 101
99 // NB: |processes| can be already stale here because it is sent via IPC, and 102 // NB: |processes| can be already stale here because it is sent via IPC, and
100 // we can never avoid that. See also the comment at the declaration of 103 // we can never avoid that. See also the comment at the declaration of
101 // ArcProcessTaskProvider. 104 // ArcProcessTaskProvider.
102 105
103 std::vector<arc::RunningAppProcessInfo> added_processes; 106 std::vector<arc::RunningAppProcessInfo> added_processes;
104 std::set<base::ProcessId> removed_nspids; 107 std::set<base::ProcessId> removed_nspids;
105 for (const auto& entry : nspid_to_task_) 108 for (const auto& entry : nspid_to_task_)
106 removed_nspids.insert(entry.first); 109 removed_nspids.insert(entry.first);
107 for (size_t i = 0; i < processes.size(); ++i) { 110 for (const arc::RunningAppProcessInfo& process : processes) {
108 const arc::RunningAppProcessInfoPtr& process = processes[i]; 111 if (nspid_to_task_.count(process.pid))
109 if (nspid_to_task_.count(process->pid)) 112 removed_nspids.erase(process.pid);
110 removed_nspids.erase(process->pid);
111 else 113 else
112 added_processes.push_back(*process); 114 added_processes.push_back(process);
113 } 115 }
114 116
115 // Remove stale tasks. 117 // Remove stale tasks.
116 RemoveTasks(removed_nspids); 118 RemoveTasks(removed_nspids);
117 119
118 // Add new tasks. 120 // Add new tasks.
119 // Note: ComputeNspidToPidMap() is an expensive operation, so try to reduce 121 // Note: ComputeNspidToPidMap() is an expensive operation, so try to reduce
120 // the number of times it is called. 122 // the number of times it is called.
121 if (!added_processes.empty()) { 123 if (!added_processes.empty()) {
122 base::PostTaskAndReplyWithResult( 124 base::PostTaskAndReplyWithResult(
123 base::WorkerPool::GetTaskRunner(false /* task_is_slow */).get(), 125 base::WorkerPool::GetTaskRunner(false /* task_is_slow */).get(),
124 FROM_HERE, 126 FROM_HERE,
125 base::Bind(&ComputeNspidToPidMap), 127 base::Bind(&ComputeNspidToPidMap),
126 base::Bind(&ArcProcessTaskProvider::AddTasks, 128 base::Bind(&ArcProcessTaskProvider::AddTasks,
127 weak_ptr_factory_.GetWeakPtr(), 129 weak_ptr_factory_.GetWeakPtr(),
128 added_processes)); 130 added_processes));
129 } 131 }
130 } 132 }
131 133
132 void ArcProcessTaskProvider::RequestProcessList() { 134 void ArcProcessTaskProvider::RequestProcessList() {
133 arc::ProcessInstance* arc_process_instance = 135 arc::ArcBridgeService::Get()->RequestProcessList();
134 arc::ArcBridgeService::Get()->process_instance();
135 if (!arc_process_instance) {
136 VLOG(2) << "ARC process instance is not ready.";
137 return;
138 }
139 arc_process_instance->RequestProcessList(
140 base::Bind(&ArcProcessTaskProvider::OnUpdateProcessList,
141 weak_ptr_factory_.GetWeakPtr()));
142 } 136 }
143 137
144 void ArcProcessTaskProvider::RemoveTasks( 138 void ArcProcessTaskProvider::RemoveTasks(
145 const std::set<base::ProcessId>& removed_nspids) { 139 const std::set<base::ProcessId>& removed_nspids) {
146 for (base::ProcessId nspid : removed_nspids) { 140 for (base::ProcessId nspid : removed_nspids) {
147 NotifyObserverTaskRemoved(nspid_to_task_[nspid].get()); 141 NotifyObserverTaskRemoved(nspid_to_task_[nspid].get());
148 nspid_to_task_.erase(nspid); 142 nspid_to_task_.erase(nspid);
149 } 143 }
150 } 144 }
151 145
152 void ArcProcessTaskProvider::AddTasks( 146 void ArcProcessTaskProvider::AddTasks(
153 const std::vector<arc::RunningAppProcessInfo>& added_processes, 147 const std::vector<arc::RunningAppProcessInfo>& added_processes,
154 const std::map<base::ProcessId, base::ProcessId>& nspid_to_pid) { 148 const std::map<base::ProcessId, base::ProcessId>& nspid_to_pid) {
155 for (const arc::RunningAppProcessInfo& process : added_processes) { 149 for (const arc::RunningAppProcessInfo& process : added_processes) {
156 auto iter = nspid_to_pid.find(process.pid); 150 auto iter = nspid_to_pid.find(process.pid);
157 if (iter == nspid_to_pid.end()) { 151 if (iter == nspid_to_pid.end()) {
158 // The process may have exited just after the snapshot was generated. 152 // The process may have exited just after the snapshot was generated.
159 continue; 153 continue;
160 } 154 }
161 base::ProcessId pid = iter->second; 155 base::ProcessId pid = iter->second;
162 scoped_ptr<ArcProcessTask>& task = nspid_to_task_[process.pid]; 156 scoped_ptr<ArcProcessTask>& task = nspid_to_task_[process.pid];
163 task.reset(new ArcProcessTask(pid, process.pid, process.process_name)); 157 task.reset(new ArcProcessTask(pid, process.pid, process.process_name));
164 NotifyObserverTaskAdded(task.get()); 158 NotifyObserverTaskAdded(task.get());
165 } 159 }
166 } 160 }
167 161
168 void ArcProcessTaskProvider::StartUpdating() { 162 void ArcProcessTaskProvider::StartUpdating() {
163 arc::ArcBridgeService::Get()->AddProcessObserver(this);
169 RequestProcessList(); 164 RequestProcessList();
170 // TODO(nya): Remove this timer once ARC starts to send us UpdateProcessList 165 // TODO(nya): Remove this timer once ARC starts to send us UpdateProcessList
171 // message when the process list changed. As of today, ARC does not send 166 // message when the process list changed. As of today, ARC does not send
172 // the process list unless we request it by RequestProcessList message. 167 // the process list unless we request it by RequestProcessList message.
173 timer_.Start( 168 timer_.Start(
174 FROM_HERE, 169 FROM_HERE,
175 base::TimeDelta::FromSeconds(1), 170 base::TimeDelta::FromSeconds(1),
176 this, 171 this,
177 &ArcProcessTaskProvider::RequestProcessList); 172 &ArcProcessTaskProvider::RequestProcessList);
178 } 173 }
179 174
180 void ArcProcessTaskProvider::StopUpdating() { 175 void ArcProcessTaskProvider::StopUpdating() {
176 arc::ArcBridgeService::Get()->RemoveProcessObserver(this);
181 timer_.Stop(); 177 timer_.Stop();
182 nspid_to_task_.clear(); 178 nspid_to_task_.clear();
183 } 179 }
184 180
185 } // namespace task_management 181 } // namespace task_management
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698