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

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

Issue 2857283002: Add memory pressure listener to Blob storage (Closed)
Patch Set: Rename constant, use base::Uma function and add base attribute. 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..2ab02f0ea8687fc11008479d8b1ca5fbbf7ffb81 100644
--- a/storage/browser/blob/blob_memory_controller_unittest.cc
+++ b/storage/browser/blob/blob_memory_controller_unittest.cc
@@ -31,6 +31,7 @@ const std::string kBlobStorageDirectory = "blob_storage";
const size_t kTestBlobStorageIPCThresholdBytes = 20;
const size_t kTestBlobStorageMaxSharedMemoryBytes = 50;
const size_t kTestBlobStorageMaxBlobMemorySize = 500;
+const float kTestMaxBlobInMemorySpaceUnderPressureRatio = 0.004f;
const uint64_t kTestBlobStorageMaxDiskSpace = 1000;
const uint64_t kTestBlobStorageMinFileSizeBytes = 10;
const uint64_t kTestBlobStorageMaxFileSizeBytes = 100;
@@ -88,6 +89,8 @@ class BlobMemoryControllerTest : public testing::Test {
limits.max_ipc_memory_size = kTestBlobStorageIPCThresholdBytes;
limits.max_shared_memory_size = kTestBlobStorageMaxSharedMemoryBytes;
limits.max_blob_in_memory_space = kTestBlobStorageMaxBlobMemorySize;
+ limits.max_blob_in_memory_space_under_pressure_ratio =
+ kTestMaxBlobInMemorySpaceUnderPressureRatio;
limits.desired_max_disk_space = kTestBlobStorageMaxDiskSpace;
limits.effective_max_disk_space = kTestBlobStorageMaxDiskSpace;
limits.min_page_file_size = kTestBlobStorageMinFileSizeBytes;
@@ -100,6 +103,8 @@ class BlobMemoryControllerTest : public testing::Test {
limits.max_ipc_memory_size = kTestBlobStorageIPCThresholdBytes;
limits.max_shared_memory_size = kTestBlobStorageMaxSharedMemoryBytes;
limits.max_blob_in_memory_space = kTestBlobStorageMaxBlobMemorySize;
+ limits.max_blob_in_memory_space_under_pressure_ratio =
+ kTestMaxBlobInMemorySpaceUnderPressureRatio;
limits.desired_max_disk_space = kTestSmallBlobStorageMaxDiskSpace;
limits.effective_max_disk_space = kTestSmallBlobStorageMaxDiskSpace;
limits.min_page_file_size = kTestBlobStorageMinFileSizeBytes;
@@ -1120,4 +1125,48 @@ 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 *
+ kTestMaxBlobInMemorySpaceUnderPressureRatio +
+ 1;
+ 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();
+
+ // 2 page files of size |kTestBlobStorageMaxBlobMemorySize *
+ // kTestMaxBlobInMemorySpaceUnderPressureRatio| should be evicted with 1 byte
+ // left in-memory.
+ EXPECT_EQ(1u, controller.memory_usage());
+ EXPECT_EQ(size_to_load - 1, controller.disk_usage());
+ return;
+}
+
} // namespace storage
« no previous file with comments | « storage/browser/blob/blob_memory_controller.cc ('k') | storage/common/blob_storage/blob_storage_constants.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698