Index: net/disk_cache/mem_entry_impl.h |
=================================================================== |
--- net/disk_cache/mem_entry_impl.h (revision 18335) |
+++ net/disk_cache/mem_entry_impl.h (working copy) |
@@ -1,20 +1,38 @@ |
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
+// Copyright (c) 2006-2009 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. |
-#ifndef NET_DISK_CACHE_MEM_ENTRY_IMPL_H__ |
-#define NET_DISK_CACHE_MEM_ENTRY_IMPL_H__ |
+#ifndef NET_DISK_CACHE_MEM_ENTRY_IMPL_H_ |
+#define NET_DISK_CACHE_MEM_ENTRY_IMPL_H_ |
#include "net/disk_cache/disk_cache.h" |
+#include "testing/gtest/include/gtest/gtest_prod.h" |
namespace disk_cache { |
class MemBackendImpl; |
// This class implements the Entry interface for the memory-only cache. An |
-// object of this class represents a single entry on the cache. |
+// object of this class represents a single entry on the cache. We use two |
+// types of entries, parent and child to support sparse caching. |
+// A parent entry is non-sparse until a sparse method is invoked (i.e. |
+// ReadSparseData, WriteSparseData, GetAvailableRange) when sparse information |
+// is initialized. It then manages a list of child entries and delegates the |
+// sparse API calls to the child entries. It creates and deletes child entries |
+// and updates the list when needed. |
+// A child entry is used to carry partial cache content, non-sparse methods like |
+// ReadData and WriteData cannot be applied to them. The lifetime of a child |
+// entry is managed by the parent entry that created it except that the entry |
+// can be evicted independently. A child entry does not have a key and it is not |
+// registered in the backend's entry map. It is registered in the backend's |
+// ranking list to enable eviction of a partial content. |
class MemEntryImpl : public Entry { |
public: |
+ enum EntryType { |
+ kParentEntry, |
+ kChildEntry, |
+ }; |
+ |
explicit MemEntryImpl(MemBackendImpl* backend); |
// Entry interface. |
@@ -39,9 +57,18 @@ |
// cache. |
bool CreateEntry(const std::string& key); |
- // Permamently destroys this entry |
+ // Performs the initialization of a MemEntryImpl as a child entry. |
+ // TODO(hclam): this method should be private. Leave this as public because |
+ // this is the only way to create a child entry. Move this method to private |
+ // once child entries are created by parent entry. |
+ bool CreateChildEntry(MemEntryImpl* parent); |
+ |
+ // Permanently destroys this entry. |
void InternalDoom(); |
+ void Open(); |
+ bool InUse(); |
+ |
MemEntryImpl* next() const { |
return next_; |
} |
@@ -58,8 +85,9 @@ |
prev_ = prev; |
} |
- void Open(); |
- bool InUse(); |
+ EntryType type() const { |
+ return type_; |
+ } |
private: |
enum { |
@@ -81,14 +109,16 @@ |
MemEntryImpl* next_; // Pointers for the LRU list. |
MemEntryImpl* prev_; |
- base::Time last_modified_; // LRU information. |
+ MemEntryImpl* parent_; // Pointer to the parent entry. |
+ base::Time last_modified_; // LRU information. |
base::Time last_used_; |
MemBackendImpl* backend_; // Back pointer to the cache. |
bool doomed_; // True if this entry was removed from the cache. |
+ EntryType type_; // The type of this entry. |
DISALLOW_EVIL_CONSTRUCTORS(MemEntryImpl); |
}; |
} // namespace disk_cache |
-#endif // NET_DISK_CACHE_MEM_ENTRY_IMPL_H__ |
+#endif // NET_DISK_CACHE_MEM_ENTRY_IMPL_H_ |