Chromium Code Reviews| 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 |