| Index: chrome/browser/chromeos/arc/process/arc_process_unittest.cc
|
| diff --git a/chrome/browser/chromeos/arc/process/arc_process_unittest.cc b/chrome/browser/chromeos/arc/process/arc_process_unittest.cc
|
| index 006fc07223090745b112fdb7d8bf3218ae7d88c0..aea2d2bc24e420b62ab857da4f97a7da726802ee 100644
|
| --- a/chrome/browser/chromeos/arc/process/arc_process_unittest.cc
|
| +++ b/chrome/browser/chromeos/arc/process/arc_process_unittest.cc
|
| @@ -20,7 +20,7 @@ TEST(ArcProcess, TestSorting) {
|
|
|
| std::list<ArcProcess> processes; // use list<> for emplace_front.
|
| processes.emplace_back(0, 0, "process 0", mojom::ProcessState::PERSISTENT,
|
| - false /* is_foreground */, kNow + 1);
|
| + false /* is_focused */, kNow + 1);
|
| processes.emplace_front(1, 1, "process 1", mojom::ProcessState::PERSISTENT,
|
| false, kNow);
|
| processes.emplace_back(2, 2, "process 2", mojom::ProcessState::LAST_ACTIVITY,
|
| @@ -57,6 +57,156 @@ TEST(ArcProcess, TestSorting) {
|
| EXPECT_EQ(5, it->pid());
|
| }
|
|
|
| +TEST(ArcProcess, TestIsImportant) {
|
| + constexpr bool kIsNotFocused = false;
|
| +
|
| + // Processes up to IMPORTANT_FOREGROUND are considered important.
|
| + EXPECT_TRUE(ArcProcess(0, 0, "process", mojom::ProcessState::PERSISTENT,
|
| + kIsNotFocused, 0)
|
| + .IsImportant());
|
| + EXPECT_TRUE(ArcProcess(0, 0, "process", mojom::ProcessState::PERSISTENT_UI,
|
| + kIsNotFocused, 0)
|
| + .IsImportant());
|
| + EXPECT_TRUE(ArcProcess(0, 0, "process", mojom::ProcessState::TOP, true, 0)
|
| + .IsImportant());
|
| + EXPECT_TRUE(ArcProcess(0, 0, "process", mojom::ProcessState::TOP, false, 0)
|
| + .IsImportant());
|
| + EXPECT_TRUE(ArcProcess(0, 0, "process",
|
| + mojom::ProcessState::BOUND_FOREGROUND_SERVICE,
|
| + kIsNotFocused, 0)
|
| + .IsImportant());
|
| + EXPECT_TRUE(ArcProcess(0, 0, "process",
|
| + mojom::ProcessState::FOREGROUND_SERVICE, kIsNotFocused,
|
| + 0)
|
| + .IsImportant());
|
| + EXPECT_TRUE(ArcProcess(0, 0, "process", mojom::ProcessState::TOP_SLEEPING,
|
| + kIsNotFocused, 0)
|
| + .IsImportant());
|
| + EXPECT_TRUE(ArcProcess(0, 0, "process",
|
| + mojom::ProcessState::IMPORTANT_FOREGROUND,
|
| + kIsNotFocused, 0)
|
| + .IsImportant());
|
| +
|
| + // Others are not important.
|
| + EXPECT_FALSE(ArcProcess(0, 0, "process",
|
| + mojom::ProcessState::IMPORTANT_BACKGROUND,
|
| + kIsNotFocused, 0)
|
| + .IsImportant());
|
| + EXPECT_FALSE(
|
| + ArcProcess(0, 0, "process", mojom::ProcessState::BACKUP, kIsNotFocused, 0)
|
| + .IsImportant());
|
| + EXPECT_FALSE(ArcProcess(0, 0, "process", mojom::ProcessState::HEAVY_WEIGHT,
|
| + kIsNotFocused, 0)
|
| + .IsImportant());
|
| + EXPECT_FALSE(ArcProcess(0, 0, "process", mojom::ProcessState::SERVICE,
|
| + kIsNotFocused, 0)
|
| + .IsImportant());
|
| + EXPECT_FALSE(ArcProcess(0, 0, "process", mojom::ProcessState::RECEIVER,
|
| + kIsNotFocused, 0)
|
| + .IsImportant());
|
| + EXPECT_FALSE(
|
| + ArcProcess(0, 0, "process", mojom::ProcessState::HOME, kIsNotFocused, 0)
|
| + .IsImportant());
|
| + EXPECT_FALSE(ArcProcess(0, 0, "process", mojom::ProcessState::LAST_ACTIVITY,
|
| + kIsNotFocused, 0)
|
| + .IsImportant());
|
| + EXPECT_FALSE(ArcProcess(0, 0, "process", mojom::ProcessState::CACHED_ACTIVITY,
|
| + kIsNotFocused, 0)
|
| + .IsImportant());
|
| + EXPECT_FALSE(ArcProcess(0, 0, "process",
|
| + mojom::ProcessState::CACHED_ACTIVITY_CLIENT,
|
| + kIsNotFocused, 0)
|
| + .IsImportant());
|
| + EXPECT_FALSE(ArcProcess(0, 0, "process", mojom::ProcessState::CACHED_EMPTY,
|
| + kIsNotFocused, 0)
|
| + .IsImportant());
|
| +
|
| + // Exceptions: the function always returns true ignoring ProcessState for our
|
| + // HOME process.
|
| + EXPECT_TRUE(ArcProcess(0, 0, "org.chromium.arc.home",
|
| + mojom::ProcessState::TOP, kIsNotFocused, 0)
|
| + .IsImportant());
|
| + EXPECT_TRUE(ArcProcess(0, 0, "org.chromium.arc.home",
|
| + mojom::ProcessState::HOME, kIsNotFocused, 0)
|
| + .IsImportant());
|
| +}
|
| +
|
| +TEST(ArcProcess, TestIsKernelKillable) {
|
| + constexpr bool kIsNotFocused = false;
|
| +
|
| + // Only PERSISITENT* processes are protected from the kernel OOM killer.
|
| + EXPECT_FALSE(ArcProcess(0, 0, "process", mojom::ProcessState::PERSISTENT,
|
| + kIsNotFocused, 0)
|
| + .IsKernelKillable());
|
| + EXPECT_FALSE(ArcProcess(0, 0, "process", mojom::ProcessState::PERSISTENT_UI,
|
| + kIsNotFocused, 0)
|
| + .IsKernelKillable());
|
| +
|
| + // Both TOP+focused and TOP apps are still kernel-killable.
|
| + EXPECT_TRUE(ArcProcess(0, 0, "process", mojom::ProcessState::TOP, true, 0)
|
| + .IsKernelKillable());
|
| + EXPECT_TRUE(ArcProcess(0, 0, "process", mojom::ProcessState::TOP, false, 0)
|
| + .IsKernelKillable());
|
| +
|
| + // Others are kernel-killable.
|
| + EXPECT_TRUE(ArcProcess(0, 0, "process",
|
| + mojom::ProcessState::BOUND_FOREGROUND_SERVICE,
|
| + kIsNotFocused, 0)
|
| + .IsKernelKillable());
|
| + EXPECT_TRUE(ArcProcess(0, 0, "process",
|
| + mojom::ProcessState::FOREGROUND_SERVICE, kIsNotFocused,
|
| + 0)
|
| + .IsKernelKillable());
|
| + EXPECT_TRUE(ArcProcess(0, 0, "process", mojom::ProcessState::TOP_SLEEPING,
|
| + kIsNotFocused, 0)
|
| + .IsKernelKillable());
|
| + EXPECT_TRUE(ArcProcess(0, 0, "process",
|
| + mojom::ProcessState::IMPORTANT_FOREGROUND,
|
| + kIsNotFocused, 0)
|
| + .IsKernelKillable());
|
| + EXPECT_TRUE(ArcProcess(0, 0, "process",
|
| + mojom::ProcessState::IMPORTANT_BACKGROUND,
|
| + kIsNotFocused, 0)
|
| + .IsKernelKillable());
|
| + EXPECT_TRUE(
|
| + ArcProcess(0, 0, "process", mojom::ProcessState::BACKUP, kIsNotFocused, 0)
|
| + .IsKernelKillable());
|
| + EXPECT_TRUE(ArcProcess(0, 0, "process", mojom::ProcessState::HEAVY_WEIGHT,
|
| + kIsNotFocused, 0)
|
| + .IsKernelKillable());
|
| + EXPECT_TRUE(ArcProcess(0, 0, "process", mojom::ProcessState::SERVICE,
|
| + kIsNotFocused, 0)
|
| + .IsKernelKillable());
|
| + EXPECT_TRUE(ArcProcess(0, 0, "process", mojom::ProcessState::RECEIVER,
|
| + kIsNotFocused, 0)
|
| + .IsKernelKillable());
|
| + EXPECT_TRUE(
|
| + ArcProcess(0, 0, "process", mojom::ProcessState::HOME, kIsNotFocused, 0)
|
| + .IsKernelKillable());
|
| + EXPECT_TRUE(ArcProcess(0, 0, "process", mojom::ProcessState::LAST_ACTIVITY,
|
| + kIsNotFocused, 0)
|
| + .IsKernelKillable());
|
| + EXPECT_TRUE(ArcProcess(0, 0, "process", mojom::ProcessState::CACHED_ACTIVITY,
|
| + kIsNotFocused, 0)
|
| + .IsKernelKillable());
|
| + EXPECT_TRUE(ArcProcess(0, 0, "process",
|
| + mojom::ProcessState::CACHED_ACTIVITY_CLIENT,
|
| + kIsNotFocused, 0)
|
| + .IsKernelKillable());
|
| + EXPECT_TRUE(ArcProcess(0, 0, "process", mojom::ProcessState::CACHED_EMPTY,
|
| + kIsNotFocused, 0)
|
| + .IsKernelKillable());
|
| +
|
| + // Exceptions: the function always returns false ignoring ProcessState for our
|
| + // HOME process.
|
| + EXPECT_FALSE(ArcProcess(0, 0, "org.chromium.arc.home",
|
| + mojom::ProcessState::TOP, kIsNotFocused, 0)
|
| + .IsKernelKillable());
|
| + EXPECT_FALSE(ArcProcess(0, 0, "org.chromium.arc.home",
|
| + mojom::ProcessState::HOME, kIsNotFocused, 0)
|
| + .IsKernelKillable());
|
| +}
|
| +
|
| } // namespace
|
|
|
| } // namespace arc
|
|
|