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

Unified Diff: storage/browser/blob/blob_memory_controller_unittest.cc

Issue 2857283002: Add memory pressure listener to Blob storage (Closed)
Patch Set: ratio and pressue arg. 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: storage/browser/blob/blob_memory_controller_unittest.cc
diff --git a/storage/browser/blob/blob_memory_controller_unittest.cc b/storage/browser/blob/blob_memory_controller_unittest.cc
index 918315b378edc746ba125ccfe0b7b80807383151..bfe44b1f2ecd148d573f5c74b33e257663983803 100644
--- a/storage/browser/blob/blob_memory_controller_unittest.cc
+++ b/storage/browser/blob/blob_memory_controller_unittest.cc
@@ -33,6 +33,7 @@ const size_t kTestBlobStorageMaxSharedMemoryBytes = 50;
const size_t kTestBlobStorageMaxBlobMemorySize = 500;
const uint64_t kTestBlobStorageMaxDiskSpace = 1000;
const uint64_t kTestBlobStorageMinFileSizeBytes = 10;
+const float kTestBlobStorageMinFileSizeBytesUnderPressure = 0.004;
const uint64_t kTestBlobStorageMaxFileSizeBytes = 100;
const uint64_t kTestSmallBlobStorageMaxDiskSpace = 100;
@@ -91,6 +92,8 @@ class BlobMemoryControllerTest : public testing::Test {
limits.desired_max_disk_space = kTestBlobStorageMaxDiskSpace;
limits.effective_max_disk_space = kTestBlobStorageMaxDiskSpace;
limits.min_page_file_size = kTestBlobStorageMinFileSizeBytes;
+ limits.min_page_file_size_ratio_under_pressure =
+ kTestBlobStorageMinFileSizeBytesUnderPressure;
limits.max_file_size = kTestBlobStorageMaxFileSizeBytes;
controller->set_limits_for_testing(limits);
}
@@ -103,6 +106,8 @@ class BlobMemoryControllerTest : public testing::Test {
limits.desired_max_disk_space = kTestSmallBlobStorageMaxDiskSpace;
limits.effective_max_disk_space = kTestSmallBlobStorageMaxDiskSpace;
limits.min_page_file_size = kTestBlobStorageMinFileSizeBytes;
+ limits.min_page_file_size_ratio_under_pressure =
+ kTestBlobStorageMinFileSizeBytesUnderPressure;
limits.max_file_size = kTestBlobStorageMaxFileSizeBytes;
controller->set_limits_for_testing(limits);
}
@@ -1120,4 +1125,47 @@ TEST_F(BlobMemoryControllerTest, DiskSpaceUnknown) {
EXPECT_FALSE(controller.limits().IsDiskSpaceConstrained());
}
+TEST_F(BlobMemoryControllerTest, OnMemoryPressure) {
+ BlobMemoryController controller(temp_dir_.GetPath(), file_runner_);
+ SetTestMemoryLimits(&controller);
+ AssertEnoughDiskSpace();
+
+ char kData[1];
+ kData[0] = 'e';
+
+ std::vector<scoped_refptr<ShareableBlobDataItem>> small_items;
+ size_t size_to_load = 2 * kTestBlobStorageMaxBlobMemorySize *
+ kTestBlobStorageMinFileSizeBytesUnderPressure +
+ 1;
+ // 2 * kTestBlobStorageMinFileSizeBytesUnderPressure is less than
+ // 2 * kTestBlobStorageMinFileSizeBytes.
+ for (size_t i = 0; i < size_to_load; i++) {
+ BlobDataBuilder builder("fake");
+ builder.AppendData(kData, 1);
+ std::vector<scoped_refptr<ShareableBlobDataItem>> items =
+ CreateSharedDataItems(builder);
+ base::WeakPtr<QuotaAllocationTask> memory_task =
+ controller.ReserveMemoryQuota(items, GetMemoryRequestCallback());
+ EXPECT_FALSE(memory_task);
+ items[0]->set_state(ItemState::POPULATED_WITH_QUOTA);
+ small_items.insert(small_items.end(), items.begin(), items.end());
+ }
+ controller.NotifyMemoryItemsUsed(small_items);
+ EXPECT_FALSE(file_runner_->HasPendingTask());
+ EXPECT_EQ(size_to_load, controller.memory_usage());
+
+ controller.OnMemoryPressure(
+ base::MemoryPressureListener::MemoryPressureLevel::
+ MEMORY_PRESSURE_LEVEL_CRITICAL);
+
+ EXPECT_TRUE(file_runner_->HasPendingTask());
+ RunFileThreadTasks();
+
+ base::RunLoop().RunUntilIdle();
+
+ EXPECT_EQ(1u, controller.memory_usage());
+ EXPECT_EQ(size_to_load - 1, controller.disk_usage());
+ return;
+}
+
} // namespace storage

Powered by Google App Engine
This is Rietveld 408576698