Index: net/disk_cache/tracing_cache_backend.h |
diff --git a/net/disk_cache/tracing_cache_backend.h b/net/disk_cache/tracing_cache_backend.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..60fb9c208be3e05124302e0e0d06bf71e9a64687 |
--- /dev/null |
+++ b/net/disk_cache/tracing_cache_backend.h |
@@ -0,0 +1,81 @@ |
+// Copyright (c) 2013 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_TRACING_CACHE_BACKEND_H_ |
+#define NET_DISK_CACHE_TRACING_CACHE_BACKEND_H_ |
+ |
+#include "base/memory/weak_ptr.h" |
+#include "net/disk_cache/disk_cache.h" |
+#include "net/disk_cache/stats.h" |
+ |
+namespace disk_cache { |
+ |
+class EntryProxy; |
+ |
+// The TracingCacheBackend implements the Cache Backend interface. It intercepts |
+// all backend operations from the IO thread and records the time from the start |
+// of the operation until the result is delivered. |
+class NET_EXPORT TracingCacheBackend : public Backend, |
+ public base::SupportsWeakPtr<TracingCacheBackend> { |
+ public: |
+ explicit TracingCacheBackend(Backend* backend); |
+ |
+ virtual net::CacheType GetCacheType() const OVERRIDE; |
+ virtual int32 GetEntryCount() const OVERRIDE; |
+ virtual int OpenEntry(const std::string& key, Entry** entry, |
+ const CompletionCallback& callback) OVERRIDE; |
+ virtual int CreateEntry(const std::string& key, Entry** entry, |
+ const CompletionCallback& callback) OVERRIDE; |
+ virtual int DoomEntry(const std::string& key, |
+ const CompletionCallback& callback) OVERRIDE; |
+ virtual int DoomAllEntries(const CompletionCallback& callback) OVERRIDE; |
+ virtual int DoomEntriesBetween(base::Time initial_time, |
+ base::Time end_time, |
+ const CompletionCallback& callback) OVERRIDE; |
+ virtual int DoomEntriesSince(base::Time initial_time, |
+ const CompletionCallback& callback) OVERRIDE; |
+ virtual int OpenNextEntry(void** iter, Entry** next_entry, |
+ const CompletionCallback& callback) OVERRIDE; |
+ virtual void EndEnumeration(void** iter) OVERRIDE; |
+ virtual void GetStats(StatsItems* stats) OVERRIDE; |
+ virtual void OnExternalCacheHit(const std::string& key) OVERRIDE; |
+ |
+ private: |
+ friend class EntryProxy; |
+ enum Operation { |
+ OP_OPEN, |
+ OP_CREATE, |
+ OP_DOOM_ENTRY, |
+ OP_READ, |
+ OP_WRITE |
+ }; |
+ |
+ virtual ~TracingCacheBackend(); |
+ |
+ EntryProxy* FindOrCreateEntryProxy(Entry* entry); |
+ |
+ void OnDeleteEntry(Entry* e); |
+ |
+ void RecordEvent(base::TimeTicks start_time, Operation op, std::string key, |
+ Entry* entry, int result); |
+ |
+ void BackendOpComplete(base::TimeTicks start_time, Operation op, |
+ std::string key, Entry** entry, |
+ const CompletionCallback& callback, int result); |
+ |
+ net::CompletionCallback BindCompletion(Operation op, |
+ base::TimeTicks start_time, |
+ const std::string& key, Entry **entry, |
+ const net::CompletionCallback& cb); |
+ |
+ scoped_ptr<Backend> backend_; |
+ typedef std::map<Entry*, EntryProxy*> EntryToProxyMap; |
+ EntryToProxyMap open_entries_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(TracingCacheBackend); |
+}; |
+ |
+} // namespace disk_cache |
+ |
+#endif // NET_DISK_CACHE_TRACING_CACHE_BACKEND_H_ |