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

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

Issue 2874543002: Refactor ARC OOM handler code (Closed)
Patch Set: address comments from Cheng-Yu 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..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

Powered by Google App Engine
This is Rietveld 408576698