Commit c585d41a authored by Chris Morin's avatar Chris Morin Committed by Commit Bot

arc: have Chromium use new ArcProcessService API

This new API is needed to support Android P. It's different in that it
has new process state values.

Bug: b:78125315
Test: Ensure oom scores are set properly for android apps
Change-Id: Idffe90f18e7feef2bd97ec58baf934ea3f304336
Reviewed-on: https://chromium-review.googlesource.com/1093890
Commit-Queue: Christopher Morin <cmtm@google.com>
Reviewed-by: default avatarFrançois Doray <fdoray@chromium.org>
Reviewed-by: default avatarYusuke Sato <yusukes@chromium.org>
Reviewed-by: default avatarLuis Hector Chavez <lhchavez@chromium.org>
Reviewed-by: default avatarAhmed Fakhry <afakhry@chromium.org>
Cr-Commit-Position: refs/heads/master@{#566311}
parent 5371b4ba
......@@ -16,7 +16,7 @@ constexpr char kCloudDpcrocessName[] =
ArcProcess::ArcProcess(base::ProcessId nspid,
base::ProcessId pid,
const std::string& process_name,
mojom::ProcessStateDeprecated process_state,
mojom::ProcessState process_state,
bool is_focused,
int64_t last_activity_time)
: nspid_(nspid),
......@@ -40,8 +40,7 @@ ArcProcess::ArcProcess(ArcProcess&& other) = default;
ArcProcess& ArcProcess::operator=(ArcProcess&& other) = default;
bool ArcProcess::IsImportant() const {
return process_state() <=
mojom::ProcessStateDeprecated::IMPORTANT_FOREGROUND ||
return process_state() <= mojom::ProcessState::IMPORTANT_FOREGROUND ||
IsArcProtected();
}
......@@ -49,7 +48,7 @@ bool ArcProcess::IsKernelKillable() const {
// Protect PERSISTENT, PERSISTENT_UI, our HOME and custom set of ARC processes
// since they should never be killed even by the kernel. Returning false for
// them allows their OOM adjustment scores to remain negative.
return process_state() > arc::mojom::ProcessStateDeprecated::PERSISTENT_UI &&
return process_state() > arc::mojom::ProcessState::PERSISTENT_UI &&
!IsArcProtected();
}
......
......@@ -21,7 +21,7 @@ class ArcProcess {
ArcProcess(base::ProcessId nspid,
base::ProcessId pid,
const std::string& process_name,
mojom::ProcessStateDeprecated process_state,
mojom::ProcessState process_state,
bool is_focused,
int64_t last_activity_time);
~ArcProcess();
......@@ -35,13 +35,13 @@ class ArcProcess {
base::ProcessId nspid() const { return nspid_; }
base::ProcessId pid() const { return pid_; }
const std::string& process_name() const { return process_name_; }
mojom::ProcessStateDeprecated process_state() const { return process_state_; }
mojom::ProcessState process_state() const { return process_state_; }
bool is_focused() const { return is_focused_; }
int64_t last_activity_time() const { return last_activity_time_; }
std::vector<std::string>& packages() { return packages_; }
const std::vector<std::string>& packages() const { return packages_; }
void set_process_state(mojom::ProcessStateDeprecated process_state) {
void set_process_state(mojom::ProcessState process_state) {
process_state_ = process_state;
}
......@@ -63,7 +63,7 @@ class ArcProcess {
base::ProcessId nspid_;
base::ProcessId pid_;
std::string process_name_;
mojom::ProcessStateDeprecated process_state_;
mojom::ProcessState process_state_;
// If the Android app is the focused window.
bool is_focused_;
// A monotonic timer recording the last time this process was active.
......
......@@ -86,8 +86,8 @@ std::vector<ArcProcess> GetArcSystemProcessList() {
const std::string& process_name = entry.cmd_line_args()[0];
// The is_focused and last_activity_time is not needed thus mocked
ret_processes.emplace_back(child_nspid, child_pid, process_name,
mojom::ProcessStateDeprecated::PERSISTENT,
kNotFocused, kNoActivityTimeInfo);
mojom::ProcessState::PERSISTENT, kNotFocused,
kNoActivityTimeInfo);
}
}
}
......@@ -142,7 +142,7 @@ void UpdateNspidToPidMap(
std::vector<ArcProcess> FilterProcessList(
const ArcProcessService::NSPidToPidMap& pid_map,
std::vector<mojom::RunningAppProcessInfoDeprecatedPtr> processes) {
std::vector<mojom::RunningAppProcessInfoPtr> processes) {
std::vector<ArcProcess> ret_processes;
for (const auto& entry : processes) {
const auto it = pid_map.find(entry->pid);
......@@ -169,7 +169,7 @@ std::vector<ArcProcess> FilterProcessList(
std::vector<ArcProcess> UpdateAndReturnProcessList(
scoped_refptr<ArcProcessService::NSPidToPidMap> nspid_map,
std::vector<mojom::RunningAppProcessInfoDeprecatedPtr> processes) {
std::vector<mojom::RunningAppProcessInfoPtr> processes) {
ArcProcessService::NSPidToPidMap& pid_map = *nspid_map;
// Cleanup dead pids in the cache |pid_map|.
std::unordered_set<ProcessId> nspid_to_remove;
......@@ -279,11 +279,11 @@ bool ArcProcessService::RequestAppProcessList(
return false;
mojom::ProcessInstance* process_instance = ARC_GET_INSTANCE_FOR_METHOD(
arc_bridge_service_->process(), RequestProcessListDeprecated);
arc_bridge_service_->process(), RequestProcessList);
if (!process_instance)
return false;
process_instance->RequestProcessListDeprecated(
process_instance->RequestProcessList(
base::BindOnce(&ArcProcessService::OnReceiveProcessList,
weak_ptr_factory_.GetWeakPtr(), callback));
return true;
......@@ -291,7 +291,7 @@ bool ArcProcessService::RequestAppProcessList(
void ArcProcessService::OnReceiveProcessList(
const RequestProcessListCallback& callback,
std::vector<mojom::RunningAppProcessInfoDeprecatedPtr> processes) {
std::vector<mojom::RunningAppProcessInfoPtr> processes) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
base::PostTaskAndReplyWithResult(
......
......@@ -104,7 +104,7 @@ class ArcProcessService : public KeyedService,
private:
void OnReceiveProcessList(
const RequestProcessListCallback& callback,
std::vector<mojom::RunningAppProcessInfoDeprecatedPtr> processes);
std::vector<mojom::RunningAppProcessInfoPtr> processes);
// ConnectionObserver<mojom::ProcessInstance> overrides.
void OnConnectionReady() override;
......
......@@ -36,17 +36,13 @@ constexpr bool kNotFocused = false;
TEST_F(TabManagerDelegateTest, CandidatesSorted) {
std::vector<arc::ArcProcess> arc_processes;
arc_processes.emplace_back(1, 10, "focused",
arc::mojom::ProcessStateDeprecated::TOP,
arc_processes.emplace_back(1, 10, "focused", arc::mojom::ProcessState::TOP,
kIsFocused, 100);
arc_processes.emplace_back(2, 20, "visible1",
arc::mojom::ProcessStateDeprecated::TOP,
arc_processes.emplace_back(2, 20, "visible1", arc::mojom::ProcessState::TOP,
kNotFocused, 200);
arc_processes.emplace_back(3, 30, "service",
arc::mojom::ProcessStateDeprecated::SERVICE,
kNotFocused, 500);
arc_processes.emplace_back(4, 40, "visible2",
arc::mojom::ProcessStateDeprecated::TOP,
arc_processes.emplace_back(
3, 30, "service", arc::mojom::ProcessState::SERVICE, kNotFocused, 500);
arc_processes.emplace_back(4, 40, "visible2", arc::mojom::ProcessState::TOP,
kNotFocused, 150);
TestLifecycleUnit focused_lifecycle_unit(base::TimeTicks::Max());
......@@ -91,8 +87,7 @@ TEST_F(TabManagerDelegateTest, CandidatesSorted) {
// Test that Chrome treats the former as a more important process.
TEST_F(TabManagerDelegateTest, CandidatesSortedWithFocusedAppAndTab) {
std::vector<arc::ArcProcess> arc_processes;
arc_processes.emplace_back(1, 10, "focused",
arc::mojom::ProcessStateDeprecated::TOP,
arc_processes.emplace_back(1, 10, "focused", arc::mojom::ProcessState::TOP,
kIsFocused, 100);
TestLifecycleUnit focused_lifecycle_unit(base::TimeTicks::Max());
......@@ -202,23 +197,19 @@ TEST_F(TabManagerDelegateTest, SetOomScoreAdj) {
MockTabManagerDelegate tab_manager_delegate;
std::vector<arc::ArcProcess> arc_processes;
arc_processes.emplace_back(1, 10, "focused",
arc::mojom::ProcessStateDeprecated::TOP,
arc_processes.emplace_back(1, 10, "focused", arc::mojom::ProcessState::TOP,
kIsFocused, 100);
arc_processes.emplace_back(2, 20, "visible1",
arc::mojom::ProcessStateDeprecated::TOP,
arc_processes.emplace_back(2, 20, "visible1", arc::mojom::ProcessState::TOP,
kNotFocused, 200);
arc_processes.emplace_back(3, 30, "service",
arc::mojom::ProcessStateDeprecated::SERVICE,
kNotFocused, 500);
arc_processes.emplace_back(4, 40, "visible2",
arc::mojom::ProcessStateDeprecated::TOP,
arc_processes.emplace_back(
3, 30, "service", arc::mojom::ProcessState::SERVICE, kNotFocused, 500);
arc_processes.emplace_back(4, 40, "visible2", arc::mojom::ProcessState::TOP,
kNotFocused, 150);
arc_processes.emplace_back(5, 50, "persistent",
arc::mojom::ProcessStateDeprecated::PERSISTENT,
kNotFocused, 600);
arc::mojom::ProcessState::PERSISTENT, kNotFocused,
600);
arc_processes.emplace_back(6, 60, "persistent_ui",
arc::mojom::ProcessStateDeprecated::PERSISTENT_UI,
arc::mojom::ProcessState::PERSISTENT_UI,
kNotFocused, 700);
TestLifecycleUnit tab1(base::TimeTicks() + base::TimeDelta::FromSeconds(3),
......@@ -330,9 +321,8 @@ TEST_F(TabManagerDelegateTest, DoNotKillRecentlyKilledArcProcesses) {
tab_manager_delegate.set_always_return_true_from_is_recently_killed(true);
std::vector<arc::ArcProcess> arc_processes;
arc_processes.emplace_back(1, 10, "service",
arc::mojom::ProcessStateDeprecated::SERVICE,
kNotFocused, 500);
arc_processes.emplace_back(
1, 10, "service", arc::mojom::ProcessState::SERVICE, kNotFocused, 500);
memory_stat->SetTargetMemoryToFreeKB(250000);
memory_stat->SetProcessPss(30, 10000);
......@@ -351,26 +341,21 @@ TEST_F(TabManagerDelegateTest, KillMultipleProcesses) {
MockTabManagerDelegate tab_manager_delegate(memory_stat);
std::vector<arc::ArcProcess> arc_processes;
arc_processes.emplace_back(1, 10, "focused",
arc::mojom::ProcessStateDeprecated::TOP,
arc_processes.emplace_back(1, 10, "focused", arc::mojom::ProcessState::TOP,
kIsFocused, 100);
arc_processes.emplace_back(2, 20, "visible1",
arc::mojom::ProcessStateDeprecated::TOP,
arc_processes.emplace_back(2, 20, "visible1", arc::mojom::ProcessState::TOP,
kNotFocused, 200);
arc_processes.emplace_back(3, 30, "service",
arc::mojom::ProcessStateDeprecated::SERVICE,
kNotFocused, 500);
arc_processes.emplace_back(
4, 40, "visible2",
arc::mojom::ProcessStateDeprecated::IMPORTANT_FOREGROUND, kNotFocused,
150);
arc_processes.emplace_back(
5, 50, "not-visible",
arc::mojom::ProcessStateDeprecated::IMPORTANT_BACKGROUND, kNotFocused,
300);
3, 30, "service", arc::mojom::ProcessState::SERVICE, kNotFocused, 500);
arc_processes.emplace_back(4, 40, "visible2",
arc::mojom::ProcessState::IMPORTANT_FOREGROUND,
kNotFocused, 150);
arc_processes.emplace_back(5, 50, "not-visible",
arc::mojom::ProcessState::IMPORTANT_BACKGROUND,
kNotFocused, 300);
arc_processes.emplace_back(6, 60, "persistent",
arc::mojom::ProcessStateDeprecated::PERSISTENT,
kNotFocused, 400);
arc::mojom::ProcessState::PERSISTENT, kNotFocused,
400);
TestLifecycleUnit tab1(base::TimeTicks() + base::TimeDelta::FromSeconds(3),
11);
......
......@@ -37,19 +37,19 @@ std::string FirstPackage(const std::vector<std::string>& packages) {
base::string16 MakeTitle(const arc::ArcProcess& arc_process) {
int name_template = IDS_TASK_MANAGER_ARC_PREFIX;
switch (arc_process.process_state()) {
case arc::mojom::ProcessStateDeprecated::PERSISTENT:
case arc::mojom::ProcessStateDeprecated::PERSISTENT_UI:
case arc::mojom::ProcessStateDeprecated::TOP:
case arc::mojom::ProcessState::PERSISTENT:
case arc::mojom::ProcessState::PERSISTENT_UI:
case arc::mojom::ProcessState::TOP:
name_template = IDS_TASK_MANAGER_ARC_SYSTEM;
break;
case arc::mojom::ProcessStateDeprecated::BOUND_FOREGROUND_SERVICE:
case arc::mojom::ProcessStateDeprecated::FOREGROUND_SERVICE:
case arc::mojom::ProcessStateDeprecated::SERVICE:
case arc::mojom::ProcessStateDeprecated::IMPORTANT_FOREGROUND:
case arc::mojom::ProcessStateDeprecated::IMPORTANT_BACKGROUND:
case arc::mojom::ProcessState::BOUND_FOREGROUND_SERVICE:
case arc::mojom::ProcessState::FOREGROUND_SERVICE:
case arc::mojom::ProcessState::SERVICE:
case arc::mojom::ProcessState::IMPORTANT_FOREGROUND:
case arc::mojom::ProcessState::IMPORTANT_BACKGROUND:
name_template = IDS_TASK_MANAGER_ARC_PREFIX_BACKGROUND_SERVICE;
break;
case arc::mojom::ProcessStateDeprecated::RECEIVER:
case arc::mojom::ProcessState::RECEIVER:
name_template = IDS_TASK_MANAGER_ARC_PREFIX_RECEIVER;
break;
default:
......@@ -156,8 +156,7 @@ void ArcProcessTask::OnConnectionReady() {
weak_ptr_factory_.GetWeakPtr()));
}
void ArcProcessTask::SetProcessStateDeprecated(
arc::mojom::ProcessStateDeprecated process_state) {
void ArcProcessTask::SetProcessState(arc::mojom::ProcessState process_state) {
arc_process_.set_process_state(process_state);
}
......
......@@ -37,8 +37,7 @@ class ArcProcessTask
// arc::ConnectionObserver<arc::mojom::IntentHelperInstance>:
void OnConnectionReady() override;
void SetProcessStateDeprecated(
arc::mojom::ProcessStateDeprecated process_state);
void SetProcessState(arc::mojom::ProcessState process_state);
base::ProcessId nspid() const { return arc_process_.nspid(); }
const std::string& process_name() const {
......
......@@ -73,7 +73,7 @@ void ArcProcessTaskProvider::UpdateProcessList(
// Update process state of existing process.
std::unique_ptr<ArcProcessTask>& task = (*pid_to_task)[entry.nspid()];
DCHECK(task.get());
task->SetProcessStateDeprecated(entry.process_state());
task->SetProcessState(entry.process_state());
}
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment