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

Unified Diff: chrome/browser/chromeos/arc/process/arc_process_unittest.cc

Issue 2874543002: Refactor ARC OOM handler code (Closed)
Patch Set: address comments from Luis Created 3 years, 7 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/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

Powered by Google App Engine
This is Rietveld 408576698