Chromium Code Reviews| 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..d5991498f0763016170cb21feec482ad36f1760d 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,154 @@ TEST(ArcProcess, TestSorting) { |
| EXPECT_EQ(5, it->pid()); |
| } |
| +TEST(ArcProcess, TestIsUserVisible) { |
| + constexpr bool kIsFocused = false; |
|
Luis Héctor Chávez
2017/05/10 14:21:46
nit: maybe kIsNotFocused?
Yusuke Sato
2017/05/10 18:29:43
Done.
|
| + |
| + // Processes up to IMPORTANT_FOREGROUND are considered visible. |
| + EXPECT_TRUE(ArcProcess(0, 0, "process", mojom::ProcessState::PERSISTENT, |
| + kIsFocused, 0) |
| + .IsUserVisible()); |
| + EXPECT_TRUE(ArcProcess(0, 0, "process", mojom::ProcessState::PERSISTENT_UI, |
| + kIsFocused, 0) |
| + .IsUserVisible()); |
| + EXPECT_TRUE(ArcProcess(0, 0, "process", mojom::ProcessState::TOP, true, 0) |
| + .IsUserVisible()); |
| + EXPECT_TRUE(ArcProcess(0, 0, "process", mojom::ProcessState::TOP, false, 0) |
| + .IsUserVisible()); |
| + EXPECT_TRUE(ArcProcess(0, 0, "process", |
| + mojom::ProcessState::BOUND_FOREGROUND_SERVICE, |
| + kIsFocused, 0) |
| + .IsUserVisible()); |
| + EXPECT_TRUE(ArcProcess(0, 0, "process", |
| + mojom::ProcessState::FOREGROUND_SERVICE, kIsFocused, 0) |
| + .IsUserVisible()); |
| + EXPECT_TRUE(ArcProcess(0, 0, "process", mojom::ProcessState::TOP_SLEEPING, |
| + kIsFocused, 0) |
| + .IsUserVisible()); |
| + EXPECT_TRUE(ArcProcess(0, 0, "process", |
| + mojom::ProcessState::IMPORTANT_FOREGROUND, kIsFocused, |
| + 0) |
| + .IsUserVisible()); |
| + |
| + // Others are non-visible. |
| + EXPECT_FALSE(ArcProcess(0, 0, "process", |
| + mojom::ProcessState::IMPORTANT_BACKGROUND, kIsFocused, |
| + 0) |
| + .IsUserVisible()); |
| + EXPECT_FALSE( |
| + ArcProcess(0, 0, "process", mojom::ProcessState::BACKUP, kIsFocused, 0) |
| + .IsUserVisible()); |
| + EXPECT_FALSE(ArcProcess(0, 0, "process", mojom::ProcessState::HEAVY_WEIGHT, |
| + kIsFocused, 0) |
| + .IsUserVisible()); |
| + EXPECT_FALSE( |
| + ArcProcess(0, 0, "process", mojom::ProcessState::SERVICE, kIsFocused, 0) |
| + .IsUserVisible()); |
| + EXPECT_FALSE( |
| + ArcProcess(0, 0, "process", mojom::ProcessState::RECEIVER, kIsFocused, 0) |
| + .IsUserVisible()); |
| + EXPECT_FALSE( |
| + ArcProcess(0, 0, "process", mojom::ProcessState::HOME, kIsFocused, 0) |
| + .IsUserVisible()); |
| + EXPECT_FALSE(ArcProcess(0, 0, "process", mojom::ProcessState::LAST_ACTIVITY, |
| + kIsFocused, 0) |
| + .IsUserVisible()); |
| + EXPECT_FALSE(ArcProcess(0, 0, "process", mojom::ProcessState::CACHED_ACTIVITY, |
| + kIsFocused, 0) |
| + .IsUserVisible()); |
| + EXPECT_FALSE(ArcProcess(0, 0, "process", |
| + mojom::ProcessState::CACHED_ACTIVITY_CLIENT, |
| + kIsFocused, 0) |
| + .IsUserVisible()); |
| + EXPECT_FALSE(ArcProcess(0, 0, "process", mojom::ProcessState::CACHED_EMPTY, |
| + kIsFocused, 0) |
| + .IsUserVisible()); |
| + |
| + // Exceptions: the function always returns true ignoring ProcessState for our |
| + // HOME process. |
| + EXPECT_TRUE(ArcProcess(0, 0, "org.chromium.arc.home", |
| + mojom::ProcessState::TOP, kIsFocused, 0) |
| + .IsUserVisible()); |
| + EXPECT_TRUE(ArcProcess(0, 0, "org.chromium.arc.home", |
| + mojom::ProcessState::HOME, kIsFocused, 0) |
| + .IsUserVisible()); |
| +} |
| + |
| +TEST(ArcProcess, TestIsKernelKillable) { |
| + constexpr bool kIsFocused = false; |
| + |
| + // Only PERSISITENT* processes are protected from the kernel OOM killer. |
| + EXPECT_FALSE(ArcProcess(0, 0, "process", mojom::ProcessState::PERSISTENT, |
| + kIsFocused, 0) |
| + .IsKernelKillable()); |
| + EXPECT_FALSE(ArcProcess(0, 0, "process", mojom::ProcessState::PERSISTENT_UI, |
| + kIsFocused, 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, |
| + kIsFocused, 0) |
| + .IsKernelKillable()); |
| + EXPECT_TRUE(ArcProcess(0, 0, "process", |
| + mojom::ProcessState::FOREGROUND_SERVICE, kIsFocused, 0) |
| + .IsKernelKillable()); |
| + EXPECT_TRUE(ArcProcess(0, 0, "process", mojom::ProcessState::TOP_SLEEPING, |
| + kIsFocused, 0) |
| + .IsKernelKillable()); |
| + EXPECT_TRUE(ArcProcess(0, 0, "process", |
| + mojom::ProcessState::IMPORTANT_FOREGROUND, kIsFocused, |
| + 0) |
| + .IsKernelKillable()); |
| + EXPECT_TRUE(ArcProcess(0, 0, "process", |
| + mojom::ProcessState::IMPORTANT_BACKGROUND, kIsFocused, |
| + 0) |
| + .IsKernelKillable()); |
| + EXPECT_TRUE( |
| + ArcProcess(0, 0, "process", mojom::ProcessState::BACKUP, kIsFocused, 0) |
| + .IsKernelKillable()); |
| + EXPECT_TRUE(ArcProcess(0, 0, "process", mojom::ProcessState::HEAVY_WEIGHT, |
| + kIsFocused, 0) |
| + .IsKernelKillable()); |
| + EXPECT_TRUE( |
| + ArcProcess(0, 0, "process", mojom::ProcessState::SERVICE, kIsFocused, 0) |
| + .IsKernelKillable()); |
| + EXPECT_TRUE( |
| + ArcProcess(0, 0, "process", mojom::ProcessState::RECEIVER, kIsFocused, 0) |
| + .IsKernelKillable()); |
| + EXPECT_TRUE( |
| + ArcProcess(0, 0, "process", mojom::ProcessState::HOME, kIsFocused, 0) |
| + .IsKernelKillable()); |
| + EXPECT_TRUE(ArcProcess(0, 0, "process", mojom::ProcessState::LAST_ACTIVITY, |
| + kIsFocused, 0) |
| + .IsKernelKillable()); |
| + EXPECT_TRUE(ArcProcess(0, 0, "process", mojom::ProcessState::CACHED_ACTIVITY, |
| + kIsFocused, 0) |
| + .IsKernelKillable()); |
| + EXPECT_TRUE(ArcProcess(0, 0, "process", |
| + mojom::ProcessState::CACHED_ACTIVITY_CLIENT, |
| + kIsFocused, 0) |
| + .IsKernelKillable()); |
| + EXPECT_TRUE(ArcProcess(0, 0, "process", mojom::ProcessState::CACHED_EMPTY, |
| + kIsFocused, 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, kIsFocused, 0) |
| + .IsKernelKillable()); |
| + EXPECT_FALSE(ArcProcess(0, 0, "org.chromium.arc.home", |
| + mojom::ProcessState::HOME, kIsFocused, 0) |
| + .IsKernelKillable()); |
| +} |
| + |
| } // namespace |
| } // namespace arc |