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

Unified Diff: chrome/browser/task_management/providers/arc/arc_process_task_provider.cc

Issue 2025593003: Show all system process in the task_manager. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Define system process. Refine code according to review suggestion. Created 4 years, 6 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/task_management/providers/arc/arc_process_task_provider.cc
diff --git a/chrome/browser/task_management/providers/arc/arc_process_task_provider.cc b/chrome/browser/task_management/providers/arc/arc_process_task_provider.cc
index e119ded47007ad5ff4b871e0cb04f383bb9eb215..bcce6040ca7545a809d009a141c70b356877e855 100644
--- a/chrome/browser/task_management/providers/arc/arc_process_task_provider.cc
+++ b/chrome/browser/task_management/providers/arc/arc_process_task_provider.cc
@@ -23,7 +23,8 @@ namespace task_management {
namespace {
-const int kUpdateProcessListDelaySeconds = 1;
+const int kUpdateAppProcessListDelaySeconds = 1;
+const int kUpdateSystemProcessListDelaySeconds = 3;
} // namespace
@@ -44,10 +45,9 @@ Task* ArcProcessTaskProvider::GetTaskOfUrlRequest(int origin_pid,
return nullptr;
}
-void ArcProcessTaskProvider::OnUpdateProcessList(
+void ArcProcessTaskProvider::UpdateProcessList(
+ std::map<base::ProcessId, std::unique_ptr<ArcProcessTask>>& pid_to_task,
const std::vector<ArcProcess>& processes) {
- TRACE_EVENT0("browser", "ArcProcessTaskProvider::OnUpdateProcessList");
-
if (!is_updating_)
return;
@@ -56,13 +56,13 @@ void ArcProcessTaskProvider::OnUpdateProcessList(
// ArcProcessTaskProvider.
set<ProcessId> nspid_to_remove;
- for (const auto& entry : nspid_to_task_)
+ for (const auto& entry : pid_to_task)
nspid_to_remove.insert(entry.first);
for (const auto& entry : processes) {
if (nspid_to_remove.erase(entry.nspid()) == 0) {
// New arc process.
- std::unique_ptr<ArcProcessTask>& task = nspid_to_task_[entry.nspid()];
+ std::unique_ptr<ArcProcessTask>& task = pid_to_task[entry.nspid()];
// After calling NotifyObserverTaskAdded(), the raw pointer of |task| is
// remebered somewhere else. One should not (implicitly) delete the
// referenced object before calling NotifyObserverTaskRemoved() first
@@ -75,7 +75,7 @@ void ArcProcessTaskProvider::OnUpdateProcessList(
NotifyObserverTaskAdded(task.get());
} else {
// Update process state of existing process.
- std::unique_ptr<ArcProcessTask>& task = nspid_to_task_[entry.nspid()];
+ std::unique_ptr<ArcProcessTask>& task = pid_to_task[entry.nspid()];
DCHECK(task.get());
task->SetProcessState(entry.process_state());
}
@@ -83,48 +83,88 @@ void ArcProcessTaskProvider::OnUpdateProcessList(
for (const auto& entry : nspid_to_remove) {
// Stale arc process.
- NotifyObserverTaskRemoved(nspid_to_task_[entry].get());
- nspid_to_task_.erase(entry);
+ NotifyObserverTaskRemoved(pid_to_task[entry].get());
+ pid_to_task.erase(entry);
}
- ScheduleNextRequest();
}
-void ArcProcessTaskProvider::RequestProcessList() {
+void ArcProcessTaskProvider::OnUpdateAppProcessList(
+ const std::vector<ArcProcess>& processes) {
+ TRACE_EVENT0("browser", "ArcProcessTaskProvider::OnUpdateAppProcessList");
+
+ UpdateProcessList(nspid_to_task_, processes);
+ ScheduleNextAppRequest();
+}
+
+void ArcProcessTaskProvider::OnUpdateSystemProcessList(
+ const std::vector<ArcProcess>& processes) {
+ TRACE_EVENT0("browser", "ArcProcessTaskProvider::OnUpdateSystemProcessList");
+
+ UpdateProcessList(pid_to_sys_task_, processes);
cylee1 2016/06/30 03:45:52 it's called pid_to_sys_task_ but its key is actual
Hsu-Cheng 2016/06/30 09:56:24 Done.
+ ScheduleNextSystemRequest();
+}
+
+void ArcProcessTaskProvider::RequestAppProcessList() {
arc::ArcProcessService* arc_process_service =
arc::ArcProcessService::Get();
- auto callback = base::Bind(&ArcProcessTaskProvider::OnUpdateProcessList,
+ auto callback = base::Bind(&ArcProcessTaskProvider::OnUpdateAppProcessList,
weak_ptr_factory_.GetWeakPtr());
if (!arc_process_service ||
- !arc_process_service->RequestProcessList(callback)) {
+ !arc_process_service->RequestAppProcessList(callback)) {
VLOG(2) << "ARC process instance is not ready.";
- // Update with the empty ARC process list.
- // Note that this can happen in the middle of the session if the user has
- // just opted out from ARC.
- callback.Run(std::vector<ArcProcess>());
}
}
+void ArcProcessTaskProvider::RequestSystemProcessList() {
+ arc::ArcProcessService* arc_process_service =
+ arc::ArcProcessService::Get();
+ auto callback = base::Bind(&ArcProcessTaskProvider::OnUpdateSystemProcessList,
+ weak_ptr_factory_.GetWeakPtr());
+ if (!arc_process_service) {
+ VLOG(2) << "ARC process instance is not ready.";
+ }
+ arc_process_service->RequestSystemProcessList(
+ base::Bind(&ArcProcessTaskProvider::OnUpdateSystemProcessList,
+ weak_ptr_factory_.GetWeakPtr()));
+ ScheduleNextSystemRequest();
+}
+
void ArcProcessTaskProvider::StartUpdating() {
is_updating_ = true;
- RequestProcessList();
+ RequestAppProcessList();
+ RequestSystemProcessList();
}
void ArcProcessTaskProvider::StopUpdating() {
is_updating_ = false;
nspid_to_task_.clear();
+ pid_to_sys_task_.clear();
+}
+
+void ArcProcessTaskProvider::ScheduleNextAppRequest() {
+ if (!is_updating_)
+ return;
+ // TODO(nya): Remove this timer once ARC starts to send us UpdateProcessList
+ // message when the process list changed. As of today, ARC does not send
+ // the process list unless we request it by RequestAppProcessList message.
+ base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
+ FROM_HERE,
+ base::Bind(&ArcProcessTaskProvider::RequestAppProcessList,
+ weak_ptr_factory_.GetWeakPtr()),
+ base::TimeDelta::FromSeconds(kUpdateAppProcessListDelaySeconds));
}
-void ArcProcessTaskProvider::ScheduleNextRequest() {
+void ArcProcessTaskProvider::ScheduleNextSystemRequest() {
if (!is_updating_)
return;
// TODO(nya): Remove this timer once ARC starts to send us UpdateProcessList
// message when the process list changed. As of today, ARC does not send
- // the process list unless we request it by RequestProcessList message.
+ // the process list unless we request it by RequestSystemProcessList message.
base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
FROM_HERE,
- base::Bind(&ArcProcessTaskProvider::RequestProcessList,
+ base::Bind(&ArcProcessTaskProvider::RequestSystemProcessList,
weak_ptr_factory_.GetWeakPtr()),
- base::TimeDelta::FromSeconds(kUpdateProcessListDelaySeconds));
+ base::TimeDelta::FromSeconds(kUpdateSystemProcessListDelaySeconds));
}
} // namespace task_management

Powered by Google App Engine
This is Rietveld 408576698