// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // See net/disk_cache/disk_cache.h for the public interface. #ifndef NET_DISK_CACHE_BLOCKFILE_BLOCK_BITMAPS_V3_H_ #define NET_DISK_CACHE_BLOCKFILE_BLOCK_BITMAPS_V3_H_ #include "base/files/file_path.h" #include "net/base/net_export.h" #include "net/disk_cache/blockfile/addr.h" #include "net/disk_cache/blockfile/block_files.h" namespace disk_cache { class BackendImplV3; // This class is the interface in the v3 disk cache to the set of files holding // cached data that is small enough to not be efficiently stored in a dedicated // file (i.e. < kMaxBlockSize). It is primarily used to allocate and free // regions in those files used to store data. class NET_EXPORT_PRIVATE BlockBitmaps { public: BlockBitmaps(); ~BlockBitmaps(); void Init(const BlockFilesBitmaps& bitmaps); // Creates a new entry on a block file. block_type indicates the size of block // to be used (as defined on cache_addr.h), block_count is the number of // blocks to allocate, and block_address is the address of the new entry. bool CreateBlock(FileType block_type, int block_count, Addr* block_address); // Removes an entry from the block files. void DeleteBlock(Addr address); // Releases the internal bitmaps. The cache is being purged. void Clear(); // Sends UMA stats. void ReportStats(); // Returns true if the blocks pointed by a given address are currently used. // This method is only intended for debugging. bool IsValid(Addr address); private: // Returns the header number that stores a given address. int GetHeaderNumber(Addr address); // Returns the appropriate header to use for a new block. int HeaderNumberForNewBlock(FileType block_type, int block_count); // Retrieves stats for the given file index. void GetFileStats(int index, int* used_count, int* load); BlockFilesBitmaps bitmaps_; DISALLOW_COPY_AND_ASSIGN(BlockBitmaps); }; } // namespace disk_cache #endif // NET_DISK_CACHE_BLOCKFILE_BLOCK_BITMAPS_V3_H_