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

Unified Diff: chrome/browser/memory/tab_manager_delegate_chromeos_unittest.cc

Issue 2861613002: Reland: Do not kill recently killed ARC processes again (Closed)
Patch Set: address comment Created 3 years, 8 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
« no previous file with comments | « chrome/browser/memory/tab_manager_delegate_chromeos.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/memory/tab_manager_delegate_chromeos_unittest.cc
diff --git a/chrome/browser/memory/tab_manager_delegate_chromeos_unittest.cc b/chrome/browser/memory/tab_manager_delegate_chromeos_unittest.cc
index ea9b783e1ca4ff6a9e9bffe5eb5541e9406c6335..dff31b85eeb8208fc9c8e2b5e37b9e797e1ebf33 100644
--- a/chrome/browser/memory/tab_manager_delegate_chromeos_unittest.cc
+++ b/chrome/browser/memory/tab_manager_delegate_chromeos_unittest.cc
@@ -102,12 +102,13 @@ TEST_F(TabManagerDelegateTest, CandidatesSorted) {
class MockTabManagerDelegate : public TabManagerDelegate {
public:
- MockTabManagerDelegate(): TabManagerDelegate(nullptr) {
- }
+ MockTabManagerDelegate()
+ : TabManagerDelegate(nullptr),
+ always_return_true_from_is_recently_killed_(false) {}
explicit MockTabManagerDelegate(TabManagerDelegate::MemoryStat* mem_stat)
- : TabManagerDelegate(nullptr, mem_stat) {
- }
+ : TabManagerDelegate(nullptr, mem_stat),
+ always_return_true_from_is_recently_killed_(false) {}
// unit test.
std::vector<int> GetKilledArcProcesses() {
@@ -125,6 +126,20 @@ class MockTabManagerDelegate : public TabManagerDelegate {
killed_tabs_.clear();
}
+ // unit test.
+ void set_always_return_true_from_is_recently_killed(
+ bool always_return_true_from_is_recently_killed) {
+ always_return_true_from_is_recently_killed_ =
+ always_return_true_from_is_recently_killed;
+ }
+
+ bool IsRecentlyKilledArcProcess(const std::string& process_name,
+ const base::TimeTicks& now) override {
+ if (always_return_true_from_is_recently_killed_)
+ return true;
+ return TabManagerDelegate::IsRecentlyKilledArcProcess(process_name, now);
+ }
+
protected:
bool KillArcProcess(const int nspid) override {
killed_arc_processes_.push_back(nspid);
@@ -144,6 +159,7 @@ class MockTabManagerDelegate : public TabManagerDelegate {
chromeos::FakeDebugDaemonClient debugd_client_;
std::vector<int> killed_arc_processes_;
std::vector<int64_t> killed_tabs_;
+ bool always_return_true_from_is_recently_killed_;
};
class MockMemoryStat : public TabManagerDelegate::MemoryStat {
@@ -231,6 +247,76 @@ TEST_F(TabManagerDelegateTest, SetOomScoreAdj) {
EXPECT_EQ(650, oom_score_map[30]);
}
+TEST_F(TabManagerDelegateTest, IsRecentlyKilledArcProcess) {
+ constexpr char kProcessName1[] = "org.chromium.arc.test1";
+ constexpr char kProcessName2[] = "org.chromium.arc.test2";
+
+ // Not owned.
+ MockMemoryStat* memory_stat = new MockMemoryStat();
+ // Instantiate the mock instance.
+ MockTabManagerDelegate tab_manager_delegate(memory_stat);
+
+ // When the process name is not in the map, IsRecentlyKilledArcProcess should
+ // return false.
+ const base::TimeTicks now = base::TimeTicks::Now();
+ EXPECT_FALSE(
+ tab_manager_delegate.IsRecentlyKilledArcProcess(kProcessName1, now));
+ EXPECT_FALSE(
+ tab_manager_delegate.IsRecentlyKilledArcProcess(kProcessName2, now));
+
+ // Update the map to tell the manager that the process was killed very
+ // recently.
+ tab_manager_delegate.recently_killed_arc_processes_[kProcessName1] = now;
+ EXPECT_TRUE(
+ tab_manager_delegate.IsRecentlyKilledArcProcess(kProcessName1, now));
+ EXPECT_FALSE(
+ tab_manager_delegate.IsRecentlyKilledArcProcess(kProcessName2, now));
+ tab_manager_delegate.recently_killed_arc_processes_[kProcessName1] =
+ now - base::TimeDelta::FromMicroseconds(1);
+ EXPECT_TRUE(
+ tab_manager_delegate.IsRecentlyKilledArcProcess(kProcessName1, now));
+ EXPECT_FALSE(
+ tab_manager_delegate.IsRecentlyKilledArcProcess(kProcessName2, now));
+ tab_manager_delegate.recently_killed_arc_processes_[kProcessName1] =
+ now - TabManagerDelegate::GetArcRespawnKillDelay();
+ EXPECT_TRUE(
+ tab_manager_delegate.IsRecentlyKilledArcProcess(kProcessName1, now));
+ EXPECT_FALSE(
+ tab_manager_delegate.IsRecentlyKilledArcProcess(kProcessName2, now));
+
+ // Update the map to tell the manager that the process was killed
+ // (GetArcRespawnKillDelay() + 1) seconds ago. In this case,
+ // IsRecentlyKilledArcProcess(kProcessName1) should return false.
+ tab_manager_delegate.recently_killed_arc_processes_[kProcessName1] =
+ now - TabManagerDelegate::GetArcRespawnKillDelay() -
+ base::TimeDelta::FromSeconds(1);
+ EXPECT_FALSE(
+ tab_manager_delegate.IsRecentlyKilledArcProcess(kProcessName1, now));
+ EXPECT_FALSE(
+ tab_manager_delegate.IsRecentlyKilledArcProcess(kProcessName2, now));
+}
+
+TEST_F(TabManagerDelegateTest, DoNotKillRecentlyKilledArcProcesses) {
+ // Not owned.
+ MockMemoryStat* memory_stat = new MockMemoryStat();
+
+ // Instantiate the mock instance.
+ MockTabManagerDelegate tab_manager_delegate(memory_stat);
+ tab_manager_delegate.set_always_return_true_from_is_recently_killed(true);
+
+ std::vector<arc::ArcProcess> arc_processes;
+ arc_processes.emplace_back(
+ 1, 10, "service", arc::mojom::ProcessState::SERVICE, kNotFocused, 500);
+
+ memory_stat->SetTargetMemoryToFreeKB(250000);
+ memory_stat->SetProcessPss(30, 10000);
+ TabStatsList tab_list;
+ tab_manager_delegate.LowMemoryKillImpl(tab_list, arc_processes);
+
+ auto killed_arc_processes = tab_manager_delegate.GetKilledArcProcesses();
+ EXPECT_EQ(0U, killed_arc_processes.size());
+}
+
TEST_F(TabManagerDelegateTest, KillMultipleProcesses) {
// Not owned.
MockMemoryStat* memory_stat = new MockMemoryStat();
@@ -313,6 +399,13 @@ TEST_F(TabManagerDelegateTest, KillMultipleProcesses) {
EXPECT_EQ(2, killed_tabs[0]);
EXPECT_EQ(5, killed_tabs[1]);
EXPECT_EQ(1, killed_tabs[2]);
+
+ // Check that killed apps are in the map.
+ const TabManagerDelegate::KilledArcProcessesMap& processes_map =
+ tab_manager_delegate.recently_killed_arc_processes_;
+ EXPECT_EQ(2U, processes_map.size());
+ EXPECT_EQ(1U, processes_map.count("service"));
+ EXPECT_EQ(1U, processes_map.count("not-visible"));
}
} // namespace memory
« no previous file with comments | « chrome/browser/memory/tab_manager_delegate_chromeos.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698