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

Unified Diff: net/disk_cache/simple/simple_backend_impl.h

Issue 15563005: **STILLBAKING** Switch SimpleCache to SequencedWorkerPool. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 7 months 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
Index: net/disk_cache/simple/simple_backend_impl.h
diff --git a/net/disk_cache/simple/simple_backend_impl.h b/net/disk_cache/simple/simple_backend_impl.h
index ebb96c7caca6a14d750108aed74eea9164ad109b..658df5ff79b1f87e294699b8759fc1d4dbde44f7 100644
--- a/net/disk_cache/simple/simple_backend_impl.h
+++ b/net/disk_cache/simple/simple_backend_impl.h
@@ -16,11 +16,13 @@
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/task_runner.h"
+#include "base/threading/sequenced_worker_pool.h"
#include "net/base/cache_type.h"
#include "net/disk_cache/disk_cache.h"
namespace base {
class SingleThreadTaskRunner;
+class TaskRunner;
}
namespace disk_cache {
@@ -57,9 +59,8 @@ class NET_EXPORT_PRIVATE SimpleBackendImpl : public Backend,
// Returns the maximum file size permitted in this backend.
int GetMaxFileSize() const;
- // Removes |entry| from the |active_entries_| set, forcing future Open/Create
- // operations to construct a new object.
- void OnDeactivated(const SimpleEntryImpl* entry);
+ void DeactivateEntry(uint64 entry_hash);
+ void ClosedEntry(uint64 entry_hash);
// From Backend:
virtual net::CacheType GetCacheType() const OVERRIDE;
@@ -84,7 +85,24 @@ class NET_EXPORT_PRIVATE SimpleBackendImpl : public Backend,
virtual void OnExternalCacheHit(const std::string& key) OVERRIDE;
private:
- typedef std::map<uint64, base::WeakPtr<SimpleEntryImpl> > EntryMap;
+ struct ActiveEntry;
+ class ProxyTaskRunner;
+
+ friend struct ActiveEntry;
+
+ struct ActiveEntry : base::SupportsWeakPtr<ActiveEntry> {
+ ActiveEntry();
+ ActiveEntry(const ActiveEntry& other);
+
+ ~ActiveEntry();
+
+ ActiveEntry& operator=(const ActiveEntry& other);
+
+ scoped_refptr<ProxyTaskRunner> task_runner;
+ SimpleEntryImpl* entry;
+ };
+
+ typedef std::map<uint64, ActiveEntry> EntryMap;
Randy Smith (Not in Mondays) 2013/05/21 21:15:30 My understanding of how stl containers work is tha
typedef base::Callback<void(uint64 max_size, int result)>
InitializeIndexCallback;
@@ -111,6 +129,8 @@ class NET_EXPORT_PRIVATE SimpleBackendImpl : public Backend,
// Searches |active_entries_| for the entry corresponding to |key|. If found,
// returns the found entry. Otherwise, creates a new entry and returns that.
+ // Returns a scoped_refptr<> as it may be returning a newly created entry and
+ // this guards against leaking.
scoped_refptr<SimpleEntryImpl> CreateOrFindActiveEntry(
const std::string& key);
@@ -120,9 +140,17 @@ class NET_EXPORT_PRIVATE SimpleBackendImpl : public Backend,
int orig_max_size_;
- // TODO(gavinp): Store the entry_hash in SimpleEntryImpl, and index this map
- // by hash. This will save memory, and make IndexReadyForDoom easier.
+ // All currently open entries, indexed by their entry_hash. This stores a raw
+ // pointer to a ref counted object, so it is important to remove entries as
+ // they are destroyed.
EntryMap active_entries_;
+
+ // A worker pool on which to perform IO operations.
+ scoped_refptr<base::SequencedWorkerPool> worker_pool_;
+
+ // A sequenced task runner which serializes operations for which there is no
+ // active entry.
+ scoped_refptr<base::SequencedTaskRunner> inactive_entry_task_runner_;
};
} // namespace disk_cache
« no previous file with comments | « no previous file | net/disk_cache/simple/simple_backend_impl.cc » ('j') | net/disk_cache/simple/simple_backend_impl.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698