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

Unified Diff: chrome/browser/chromeos/arc/arc_process_service.h

Issue 2025593003: Show all system process in the task_manager. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Move two functions to anonymous namespace. Created 4 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/arc/arc_process_service.h
diff --git a/chrome/browser/chromeos/arc/arc_process_service.h b/chrome/browser/chromeos/arc/arc_process_service.h
index 32f14863ffb3bc42c4e16b4200de0951a9a3175e..94d1555e55847bef80691e6da301ab6ea5033e41 100644
--- a/chrome/browser/chromeos/arc/arc_process_service.h
+++ b/chrome/browser/chromeos/arc/arc_process_service.h
@@ -9,10 +9,11 @@
#include <vector>
#include "base/callback.h"
+#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/memory/weak_ptr.h"
-#include "base/threading/sequenced_worker_pool.h"
-#include "base/threading/thread_checker.h"
+#include "base/process/process_iterator.h"
+#include "base/single_thread_task_runner.h"
#include "chrome/browser/chromeos/arc/arc_process.h"
#include "components/arc/arc_bridge_service.h"
#include "components/arc/arc_service.h"
@@ -22,19 +23,26 @@ namespace arc {
// A single global entry to get a list of ARC processes.
//
-// Call RequestProcessList() on the main UI thread to get a list of all ARC
-// processes. It returns vector<arc::ArcProcess>, which includes pid <-> nspid
-// mapping.
+// Call RequestAppProcessList() / RequestSystemProcessList() on the main UI
+// thread to get a list of all ARC app / system processes. It returns
+// vector<arc::ArcProcess>, which includes pid <-> nspid mapping.
// Example:
// void OnUpdateProcessList(const vector<arc::ArcProcess>&) {...}
//
// arc::ArcProcessService* arc_process_service =
// arc::ArcProcessService::Get();
// if (!arc_process_service ||
-// !arc_process_service->RequestProcessList(
+// !arc_process_service->RequestAppProcessList(
// base::Bind(&OnUpdateProcessList)) {
// LOG(ERROR) << "ARC process instance not ready.";
// }
+//
+// [System Process]
+// The system process here is defined by the scope. If the process is produced
+// under system_server in Android, we regard it as one of Android app process.
+// Otherwise, the processes that are introduced by init would then be regarded
+// as System Process. RequestAppProcessList() is responsible for app processes
+// while RequestSystemProcessList() is responsible for System Processes.
class ArcProcessService
: public ArcService,
public InstanceHolder<mojom::ProcessInstance>::Observer {
@@ -53,38 +61,49 @@ class ArcProcessService
// Returns true if ARC IPC is ready for process list request,
// otherwise false.
- bool RequestProcessList(RequestProcessListCallback callback);
+ bool RequestAppProcessList(RequestProcessListCallback callback);
+ void RequestSystemProcessList(RequestProcessListCallback callback);
private:
+ using PidMap = std::map<base::ProcessId, base::ProcessId>;
+
+ class NSPidToPidMap : public PidMap,
Luis Héctor Chávez 2016/07/15 16:19:42 Favor composition over inheritance. std::map also
cylee1 2016/07/15 23:17:03 agree
Hsu-Cheng 2016/07/27 08:07:59 Done.
+ public base::RefCountedThreadSafe<NSPidToPidMap> {
+ private:
+ friend class base::RefCountedThreadSafe<NSPidToPidMap>;
+
+ virtual ~NSPidToPidMap();
+
+ DISALLOW_COPY_AND_ASSIGN(NSPidToPidMap);
+ };
+
void Reset();
void OnReceiveProcessList(
const RequestProcessListCallback& callback,
- mojo::Array<arc::mojom::RunningAppProcessInfoPtr> mojo_processes);
+ mojo::Array<arc::mojom::RunningAppProcessInfoPtr> instance_processes);
- void CallbackRelay(
- const RequestProcessListCallback& callback,
- const std::vector<ArcProcess>* ret_processes);
+ static std::vector<ArcProcess> UpdateAndReturnProcessList(
Luis Héctor Chávez 2016/07/15 16:19:42 prefer having private static methods as standalone
Hsu-Cheng 2016/07/27 08:07:59 Done.
+ scoped_refptr<NSPidToPidMap> pid_map,
+ mojo::Array<arc::mojom::RunningAppProcessInfoPtr> processes);
- void UpdateAndReturnProcessList(
- const std::vector<arc::mojom::RunningAppProcessInfoPtr>* raw_processes,
- std::vector<ArcProcess>* ret_processes);
+ static std::vector<ArcProcess> FilterProcessList(
+ NSPidToPidMap& pid_map,
+ mojo::Array<arc::mojom::RunningAppProcessInfoPtr> processes);
- void PopulateProcessList(
- const std::vector<arc::mojom::RunningAppProcessInfoPtr>* raw_processes,
- std::vector<ArcProcess>* ret_processes);
+ // Computes and updates the map from PID in ARC namespace to PID in system
+ // namespace.
+ static void UpdateNspidToPidMap(NSPidToPidMap& pid_map);
- void UpdateNspidToPidMap();
+ // There are some expensive tasks such as traverse whole process tree that
+ // we can't do it on the UI thread. Thus we need a task runner to handle such
+ // heavy tasks.
+ scoped_refptr<base::SingleThreadTaskRunner> heavy_task_runner_;
// Keep a cache pid mapping of all arc processes so to minimize the number of
// nspid lookup from /proc/<PID>/status.
// To play safe, always modify |nspid_to_pid_| on the worker thread.
- std::map<base::ProcessId, base::ProcessId> nspid_to_pid_;
-
- scoped_refptr<base::SequencedWorkerPool> worker_pool_;
-
- // To ensure internal state changes are done on the same worker thread.
- base::ThreadChecker thread_checker_;
+ scoped_refptr<NSPidToPidMap> nspid_to_pid_;
// Always keep this the last member of this class to make sure it's the
// first thing to be destructed.
« no previous file with comments | « no previous file | chrome/browser/chromeos/arc/arc_process_service.cc » ('j') | chrome/browser/chromeos/arc/arc_process_service.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698