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

Unified Diff: net/disk_cache/v3/block_bitmaps.cc

Issue 17507006: Disk cache v3 ref2 Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Incl IndexTable cl Created 7 years, 1 month 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 | « net/disk_cache/v3/block_bitmaps.h ('k') | net/disk_cache/v3/block_bitmaps_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/disk_cache/v3/block_bitmaps.cc
===================================================================
--- net/disk_cache/v3/block_bitmaps.cc (revision 232523)
+++ net/disk_cache/v3/block_bitmaps.cc (working copy)
@@ -5,15 +5,21 @@
#include "net/disk_cache/v3/block_bitmaps.h"
#include "base/metrics/histogram.h"
+#include "base/strings/string_util.h"
+#include "base/strings/stringprintf.h"
+#include "base/threading/thread_checker.h"
#include "base/time/time.h"
+#include "net/disk_cache/cache_util.h"
#include "net/disk_cache/disk_format_base.h"
+#include "net/disk_cache/file_lock.h"
#include "net/disk_cache/trace.h"
+#include "net/disk_cache/v3/backend_impl_v3.h"
using base::TimeTicks;
namespace disk_cache {
-BlockBitmaps::BlockBitmaps() {
+BlockBitmaps::BlockBitmaps(BackendImplV3* backend) : backend_(backend) {
}
BlockBitmaps::~BlockBitmaps() {
@@ -21,6 +27,8 @@
void BlockBitmaps::Init(const BlockFilesBitmaps& bitmaps) {
bitmaps_ = bitmaps;
+ for (int i = 0; i < kFirstAdditionalBlockFileV3; i++)
+ empty_counts_[i] = EmptyBlocksForType(i);
}
bool BlockBitmaps::CreateBlock(FileType block_type,
@@ -35,6 +43,8 @@
if (header_num < 0)
return false;
+ int old_num_allocations = bitmaps_[header_num].MinimumAllocations();
+
int index;
if (!bitmaps_[header_num].CreateMapBlock(block_count, &index))
return false;
@@ -45,6 +55,13 @@
return false;
}
+ // Yes, the count may be off by 1 when we start.
+ if (old_num_allocations != bitmaps_[header_num].MinimumAllocations())
+ empty_counts_[block_type]--;
+
+ if (empty_counts_[block_type] < (kNumExtraBlocks / kMaxNumBlocks) / 2)
+ backend_->GrowBlockFiles();
+
Addr address(block_type, block_count, bitmaps_[header_num].FileId(), index);
block_address->set_value(address.value());
Trace("CreateBlock 0x%x", address.value());
@@ -62,6 +79,14 @@
Trace("DeleteBlock 0x%x", address.value());
bitmaps_[header_num].DeleteMapBlock(address.start_block(),
address.num_blocks());
+
+ //if (!bitmaps_[header_num].Header()->num_entries) {
+ // This file is now empty. Let's try to delete it.
+ //FileType type = Addr::RequiredFileType(header->entry_size);
+ //if (Addr::BlockSizeForFileType(RANKINGS) == header->entry_size)
+ // type = RANKINGS;
+ //RemoveEmptyFile(type); // Ignore failures.
+ //}
}
void BlockBitmaps::Clear() {
@@ -116,6 +141,15 @@
return file_index;
}
+int BlockBitmaps::EmptyBlocksForType(int next_file) {
+ int empty_blocks = 0;
+ do {
+ empty_blocks += bitmaps_[next_file].MinimumAllocations();
+ next_file = bitmaps_[next_file].NextFileId();
+ } while (next_file);
+ return empty_blocks;
+}
+
int BlockBitmaps::HeaderNumberForNewBlock(FileType block_type,
int block_count) {
DCHECK_GT(block_type, 0);
@@ -144,8 +178,10 @@
header_num = bitmaps_[header_num].NextFileId();
} while (header_num);
- if (!found)
+ if (!found) {
+ NOTREACHED();
header_num = -1;
+ }
}
HISTOGRAM_TIMES("DiskCache.GetFileForNewBlock", TimeTicks::Now() - start);
« no previous file with comments | « net/disk_cache/v3/block_bitmaps.h ('k') | net/disk_cache/v3/block_bitmaps_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698