| Index: net/disk_cache/addr.h
|
| ===================================================================
|
| --- net/disk_cache/addr.h (revision 199883)
|
| +++ net/disk_cache/addr.h (working copy)
|
| @@ -9,22 +9,26 @@
|
| #define NET_DISK_CACHE_ADDR_H_
|
|
|
| #include "net/base/net_export.h"
|
| -#include "net/disk_cache/disk_format.h"
|
| +#include "net/disk_cache/disk_format_base.h"
|
|
|
| namespace disk_cache {
|
|
|
| enum FileType {
|
| EXTERNAL = 0,
|
| RANKINGS = 1,
|
| - BLOCK_256,
|
| - BLOCK_1K,
|
| - BLOCK_4K,
|
| + BLOCK_256 = 2,
|
| + BLOCK_1K = 3,
|
| + BLOCK_4K = 4,
|
| + BLOCK_FILES = 5,
|
| + BLOCK_ENTRIES = 6,
|
| + BLOCK_EVICTED = 7
|
| };
|
|
|
| const int kMaxBlockSize = 4096 * 4;
|
| const int kMaxBlockFile = 255;
|
| const int kMaxNumBlocks = 4;
|
| const int kFirstAdditionalBlockFile = 4;
|
| +const int kFirstAdditionalBlockFileV3 = 7;
|
|
|
| // Defines a storage address for a cache record
|
| //
|
| @@ -38,6 +42,9 @@
|
| // 2 = 256 byte block file
|
| // 3 = 1k byte block file
|
| // 4 = 4k byte block file
|
| +// 5 = external files block file
|
| +// 6 = active entries block file
|
| +// 7 = evicted entries block file
|
| //
|
| // If separate file:
|
| // 0000 1111 1111 1111 1111 1111 1111 1111 : file# 0 - 268,435,456 (2^28)
|
| @@ -47,6 +54,18 @@
|
| // 0000 0011 0000 0000 0000 0000 0000 0000 : number of contiguous blocks 1-4
|
| // 0000 0000 1111 1111 0000 0000 0000 0000 : file selector 0 - 255
|
| // 0000 0000 0000 0000 1111 1111 1111 1111 : block# 0 - 65,535 (2^16)
|
| +//
|
| +// Note that an Addr can be used to "point" to a variety of different objects,
|
| +// from a given type of entry to random blobs of data. Conceptually, an Addr is
|
| +// just a number that someone can inspect to find out how to locate the desired
|
| +// record. Most users will not care about the specific bits inside Addr, for
|
| +// example, what parts of it point to a file number; only the code that has to
|
| +// select a specific file would care about those specific bits.
|
| +//
|
| +// From a general point of view, an Addr has a total capacity of 2^24 entities,
|
| +// in that it has 24 bits that can identify individual records. Note that the
|
| +// address space is bigger for independent files (2^28), but that would not be
|
| +// the general case.
|
| class NET_EXPORT_PRIVATE Addr {
|
| public:
|
| Addr() : value_(0) {}
|
| @@ -101,6 +120,11 @@
|
| return value_ != other.value_;
|
| }
|
|
|
| + // Conversions between the address of an external file and the address of the
|
| + // control block of that external file.
|
| + Addr AsExternal() const;
|
| + Addr AsBlockFile() const;
|
| +
|
| static int BlockSizeForFileType(FileType file_type) {
|
| switch (file_type) {
|
| case RANKINGS:
|
| @@ -111,6 +135,12 @@
|
| return 1024;
|
| case BLOCK_4K:
|
| return 4096;
|
| + case BLOCK_FILES:
|
| + return 8;
|
| + case BLOCK_ENTRIES:
|
| + return 104;
|
| + case BLOCK_EVICTED:
|
| + return 48;
|
| default:
|
| return 0;
|
| }
|
| @@ -127,15 +157,29 @@
|
| return EXTERNAL;
|
| }
|
|
|
| + static int RequiredBlocks(int size, FileType file_type) {
|
| + int block_size = BlockSizeForFileType(file_type);
|
| + return (size + block_size - 1) / block_size;
|
| + }
|
| +
|
| // Returns true if this address looks like a valid one.
|
| - bool SanityCheck() const;
|
| - bool SanityCheckForEntry() const;
|
| + bool SanityCheckV2() const;
|
| + bool SanityCheckV3() const;
|
| + bool SanityCheckForEntryV2() const;
|
| + bool SanityCheckForEntryV3() const;
|
| bool SanityCheckForRankings() const;
|
|
|
| private:
|
| + uint32 reserved_bits() const {
|
| + return value_ & kReservedBitsMask;
|
| + }
|
| +
|
| + void SetFileType(FileType type);
|
| +
|
| static const uint32 kInitializedMask = 0x80000000;
|
| static const uint32 kFileTypeMask = 0x70000000;
|
| static const uint32 kFileTypeOffset = 28;
|
| + static const uint32 kReservedBitsMask = 0x0c000000;
|
| static const uint32 kNumBlocksMask = 0x03000000;
|
| static const uint32 kNumBlocksOffset = 24;
|
| static const uint32 kFileSelectorMask = 0x00ff0000;
|
|
|