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

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: cl lint 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/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..36d4806fe58b1e6d91b141022a0ac18460879b1b 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
@@ -11,6 +11,7 @@
#include <utility>
#include <vector>
+#include "base/callback.h"
#include "base/logging.h"
#include "base/process/process.h"
#include "base/threading/thread_task_runner_handle.h"
@@ -23,7 +24,8 @@ namespace task_management {
namespace {
-const int kUpdateProcessListDelaySeconds = 1;
+const int kUpdateAppProcessListDelaySeconds = 1;
+const int kUpdateSystemProcessListDelaySeconds = 3;
} // namespace
@@ -44,10 +46,9 @@ Task* ArcProcessTaskProvider::GetTaskOfUrlRequest(int origin_pid,
return nullptr;
}
-void ArcProcessTaskProvider::OnUpdateProcessList(
+void ArcProcessTaskProvider::UpdateProcessList(
+ ArcTaskMap* pid_to_task,
const std::vector<ArcProcess>& processes) {
- TRACE_EVENT0("browser", "ArcProcessTaskProvider::OnUpdateProcessList");
-
if (!is_updating_)
return;
@@ -56,13 +57,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 +76,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 +84,83 @@ 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) {
+ UpdateProcessList(&nspid_to_sys_task_, processes);
+ 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.";
+ ScheduleNextAppRequest();
+ return;
+ }
+}
+
+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.";
- // 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>());
+ ScheduleNextSystemRequest();
+ return;
}
+ arc_process_service->RequestSystemProcessList(callback);
}
void ArcProcessTaskProvider::StartUpdating() {
is_updating_ = true;
- RequestProcessList();
+ RequestAppProcessList();
+ RequestSystemProcessList();
}
void ArcProcessTaskProvider::StopUpdating() {
is_updating_ = false;
nspid_to_task_.clear();
+ nspid_to_sys_task_.clear();
}
-void ArcProcessTaskProvider::ScheduleNextRequest() {
+void ArcProcessTaskProvider::ScheduleNextRequest(const base::Closure& task,
+ const int delaySeconds) {
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 RequestAppProcessList message.
base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&ArcProcessTaskProvider::RequestProcessList,
+ FROM_HERE, task, base::TimeDelta::FromSeconds(delaySeconds));
+}
+
+void ArcProcessTaskProvider::ScheduleNextAppRequest() {
+ ScheduleNextRequest(base::Bind(&ArcProcessTaskProvider::RequestAppProcessList,
+ weak_ptr_factory_.GetWeakPtr()),
cylee1 2016/08/01 10:14:23 I still think you don't need weak_ptr here since S
Hsu-Cheng 2016/08/02 03:58:55 Done.
+ kUpdateAppProcessListDelaySeconds);
+}
+
+void ArcProcessTaskProvider::ScheduleNextSystemRequest() {
+ ScheduleNextRequest(
+ base::Bind(&ArcProcessTaskProvider::RequestSystemProcessList,
weak_ptr_factory_.GetWeakPtr()),
- base::TimeDelta::FromSeconds(kUpdateProcessListDelaySeconds));
+ kUpdateSystemProcessListDelaySeconds);
}
} // namespace task_management

Powered by Google App Engine
This is Rietveld 408576698