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 |