OLD | NEW |
---|---|
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 // The main point of this class is to cache ARC proc nspid<->pid mapping | 5 // The main point of this class is to cache ARC proc nspid<->pid mapping |
6 // globally. Since the calculation is costly, a dedicated worker thread is | 6 // globally. Since the calculation is costly, a dedicated worker thread is |
7 // used. All read/write of its internal data structure (i.e., the mapping) | 7 // used. All read/write of its internal data structure (i.e., the mapping) |
8 // should be on this thread. | 8 // should be on this thread. |
9 | 9 |
10 #include "chrome/browser/chromeos/arc/process/arc_process_service.h" | 10 #include "chrome/browser/chromeos/arc/process/arc_process_service.h" |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
220 g_arc_process_service = nullptr; | 220 g_arc_process_service = nullptr; |
221 arc_bridge_service()->process()->RemoveObserver(this); | 221 arc_bridge_service()->process()->RemoveObserver(this); |
222 } | 222 } |
223 | 223 |
224 // static | 224 // static |
225 ArcProcessService* ArcProcessService::Get() { | 225 ArcProcessService* ArcProcessService::Get() { |
226 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 226 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
227 return g_arc_process_service; | 227 return g_arc_process_service; |
228 } | 228 } |
229 | 229 |
230 void ArcProcessService::OnInstanceReady() { | |
231 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | |
232 GetTaskRunner()->PostTask(FROM_HERE, base::Bind(&Reset, nspid_to_pid_)); | |
233 } | |
234 | |
235 void ArcProcessService::RequestSystemProcessList( | 230 void ArcProcessService::RequestSystemProcessList( |
236 RequestProcessListCallback callback) { | 231 RequestProcessListCallback callback) { |
237 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 232 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
238 | 233 |
239 base::PostTaskAndReplyWithResult(GetTaskRunner().get(), FROM_HERE, | 234 base::PostTaskAndReplyWithResult(GetTaskRunner().get(), FROM_HERE, |
240 base::Bind(&GetArcSystemProcessList), | 235 base::Bind(&GetArcSystemProcessList), |
241 callback); | 236 callback); |
242 } | 237 } |
243 | 238 |
244 bool ArcProcessService::RequestAppProcessList( | 239 bool ArcProcessService::RequestAppProcessList( |
245 RequestProcessListCallback callback) { | 240 RequestProcessListCallback callback) { |
246 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 241 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
247 | 242 |
243 // Since several services call this class to get information about the ARC | |
244 // process list, it can produce a lot of logspam when the board is ARC-ready | |
245 // but the user has not opted into ARC. This redundant check avoids that | |
246 // logspam. | |
247 if (!instance_ready_) | |
248 return false; | |
Yusuke Sato
2016/11/30 23:29:39
I think this would also remove legit logs when the
Luis Héctor Chávez
2016/11/30 23:45:08
ArcBridgeService::GetEnabled() unfortunately does
Yusuke Sato
2016/11/30 23:59:30
The DCHECK in ~ObserverList<> is actually an optio
Yusuke Sato
2016/12/01 02:29:21
Chatted with Luis offline. Let's keep the member v
| |
249 | |
248 mojom::ProcessInstance* process_instance = | 250 mojom::ProcessInstance* process_instance = |
249 arc_bridge_service()->process()->GetInstanceForMethod( | 251 arc_bridge_service()->process()->GetInstanceForMethod( |
250 "RequestProcessList"); | 252 "RequestProcessList"); |
251 if (!process_instance) { | 253 if (!process_instance) |
252 return false; | 254 return false; |
253 } | 255 |
254 process_instance->RequestProcessList( | 256 process_instance->RequestProcessList( |
255 base::Bind(&ArcProcessService::OnReceiveProcessList, | 257 base::Bind(&ArcProcessService::OnReceiveProcessList, |
256 weak_ptr_factory_.GetWeakPtr(), callback)); | 258 weak_ptr_factory_.GetWeakPtr(), callback)); |
257 return true; | 259 return true; |
258 } | 260 } |
259 | 261 |
260 void ArcProcessService::OnReceiveProcessList( | 262 void ArcProcessService::OnReceiveProcessList( |
261 const RequestProcessListCallback& callback, | 263 const RequestProcessListCallback& callback, |
262 std::vector<mojom::RunningAppProcessInfoPtr> instance_processes) { | 264 std::vector<mojom::RunningAppProcessInfoPtr> instance_processes) { |
263 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 265 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
264 | 266 |
265 base::PostTaskAndReplyWithResult( | 267 base::PostTaskAndReplyWithResult( |
266 GetTaskRunner().get(), FROM_HERE, | 268 GetTaskRunner().get(), FROM_HERE, |
267 base::Bind(&UpdateAndReturnProcessList, nspid_to_pid_, | 269 base::Bind(&UpdateAndReturnProcessList, nspid_to_pid_, |
268 base::Passed(&instance_processes)), | 270 base::Passed(&instance_processes)), |
269 callback); | 271 callback); |
270 } | 272 } |
271 | 273 |
272 scoped_refptr<base::SingleThreadTaskRunner> ArcProcessService::GetTaskRunner() { | 274 scoped_refptr<base::SingleThreadTaskRunner> ArcProcessService::GetTaskRunner() { |
273 return heavy_task_thread_.task_runner(); | 275 return heavy_task_thread_.task_runner(); |
274 } | 276 } |
275 | 277 |
278 void ArcProcessService::OnInstanceReady() { | |
279 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | |
280 GetTaskRunner()->PostTask(FROM_HERE, base::Bind(&Reset, nspid_to_pid_)); | |
281 instance_ready_ = true; | |
282 } | |
283 | |
284 void ArcProcessService::OnInstanceClosed() { | |
285 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | |
286 instance_ready_ = false; | |
287 } | |
288 | |
276 inline ArcProcessService::NSPidToPidMap::NSPidToPidMap() {} | 289 inline ArcProcessService::NSPidToPidMap::NSPidToPidMap() {} |
277 | 290 |
278 inline ArcProcessService::NSPidToPidMap::~NSPidToPidMap() {} | 291 inline ArcProcessService::NSPidToPidMap::~NSPidToPidMap() {} |
279 | 292 |
280 } // namespace arc | 293 } // namespace arc |
OLD | NEW |