Home | History | Annotate | Download | only in v3
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 // See net/disk_cache/disk_cache.h for the public interface.
      6 
      7 #ifndef NET_DISK_CACHE_V3_BLOCK_BITMAPS_H_
      8 #define NET_DISK_CACHE_V3_BLOCK_BITMAPS_H_
      9 
     10 #include "base/files/file_path.h"
     11 #include "net/base/net_export.h"
     12 #include "net/disk_cache/addr.h"
     13 #include "net/disk_cache/block_files.h"
     14 
     15 namespace disk_cache {
     16 
     17 class BackendImplV3;
     18 
     19 // This class is the interface in the v3 disk cache to the set of files holding
     20 // cached data that is small enough to not be efficiently stored in a dedicated
     21 // file (i.e. < kMaxBlockSize). It is primarily used to allocate and free
     22 // regions in those files used to store data.
     23 class NET_EXPORT_PRIVATE BlockBitmaps {
     24  public:
     25   BlockBitmaps();
     26   ~BlockBitmaps();
     27 
     28   void Init(const BlockFilesBitmaps& bitmaps);
     29 
     30   // Creates a new entry on a block file. block_type indicates the size of block
     31   // to be used (as defined on cache_addr.h), block_count is the number of
     32   // blocks to allocate, and block_address is the address of the new entry.
     33   bool CreateBlock(FileType block_type, int block_count, Addr* block_address);
     34 
     35   // Removes an entry from the block files.
     36   void DeleteBlock(Addr address);
     37 
     38   // Releases the internal bitmaps. The cache is being purged.
     39   void Clear();
     40 
     41   // Sends UMA stats.
     42   void ReportStats();
     43 
     44   // Returns true if the blocks pointed by a given address are currently used.
     45   // This method is only intended for debugging.
     46   bool IsValid(Addr address);
     47 
     48  private:
     49   // Returns the header number that stores a given address.
     50   int GetHeaderNumber(Addr address);
     51 
     52   // Returns the appropriate header to use for a new block.
     53   int HeaderNumberForNewBlock(FileType block_type, int block_count);
     54 
     55   // Retrieves stats for the given file index.
     56   void GetFileStats(int index, int* used_count, int* load);
     57 
     58   BlockFilesBitmaps bitmaps_;
     59 
     60   DISALLOW_COPY_AND_ASSIGN(BlockBitmaps);
     61 };
     62 
     63 }  // namespace disk_cache
     64 
     65 #endif  // NET_DISK_CACHE_V3_BLOCK_BITMAPS_H_
     66