Home | History | Annotate | Download | only in disk_cache
      1 // Copyright (c) 2013 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 #ifndef NET_DISK_CACHE_TRACING_CACHE_BACKEND_H_
      6 #define NET_DISK_CACHE_TRACING_CACHE_BACKEND_H_
      7 
      8 #include "base/memory/weak_ptr.h"
      9 #include "net/disk_cache/disk_cache.h"
     10 #include "net/disk_cache/stats.h"
     11 
     12 namespace disk_cache {
     13 
     14 class EntryProxy;
     15 
     16 // The TracingCacheBackend implements the Cache Backend interface. It intercepts
     17 // all backend operations from the IO thread and records the time from the start
     18 // of the operation until the result is delivered.
     19 class NET_EXPORT TracingCacheBackend : public Backend,
     20     public base::SupportsWeakPtr<TracingCacheBackend> {
     21  public:
     22   explicit TracingCacheBackend(scoped_ptr<Backend> backend);
     23 
     24   virtual net::CacheType GetCacheType() const OVERRIDE;
     25   virtual int32 GetEntryCount() const OVERRIDE;
     26   virtual int OpenEntry(const std::string& key, Entry** entry,
     27                         const CompletionCallback& callback) OVERRIDE;
     28   virtual int CreateEntry(const std::string& key, Entry** entry,
     29                           const CompletionCallback& callback) OVERRIDE;
     30   virtual int DoomEntry(const std::string& key,
     31                         const CompletionCallback& callback) OVERRIDE;
     32   virtual int DoomAllEntries(const CompletionCallback& callback) OVERRIDE;
     33   virtual int DoomEntriesBetween(base::Time initial_time,
     34                                  base::Time end_time,
     35                                  const CompletionCallback& callback) OVERRIDE;
     36   virtual int DoomEntriesSince(base::Time initial_time,
     37                                const CompletionCallback& callback) OVERRIDE;
     38   virtual int OpenNextEntry(void** iter, Entry** next_entry,
     39                             const CompletionCallback& callback) OVERRIDE;
     40   virtual void EndEnumeration(void** iter) OVERRIDE;
     41   virtual void GetStats(StatsItems* stats) OVERRIDE;
     42   virtual void OnExternalCacheHit(const std::string& key) OVERRIDE;
     43 
     44  private:
     45   friend class EntryProxy;
     46   enum Operation {
     47     OP_OPEN,
     48     OP_CREATE,
     49     OP_DOOM_ENTRY,
     50     OP_READ,
     51     OP_WRITE
     52   };
     53 
     54   virtual ~TracingCacheBackend();
     55 
     56   EntryProxy* FindOrCreateEntryProxy(Entry* entry);
     57 
     58   void OnDeleteEntry(Entry* e);
     59 
     60   void RecordEvent(base::TimeTicks start_time, Operation op, std::string key,
     61                    Entry* entry, int result);
     62 
     63   void BackendOpComplete(base::TimeTicks start_time, Operation op,
     64                          std::string key, Entry** entry,
     65                          const CompletionCallback& callback, int result);
     66 
     67   net::CompletionCallback BindCompletion(Operation op,
     68                                          base::TimeTicks start_time,
     69                                          const std::string& key, Entry **entry,
     70                                          const net::CompletionCallback& cb);
     71 
     72   scoped_ptr<Backend> backend_;
     73   typedef std::map<Entry*, EntryProxy*> EntryToProxyMap;
     74   EntryToProxyMap open_entries_;
     75 
     76   DISALLOW_COPY_AND_ASSIGN(TracingCacheBackend);
     77 };
     78 
     79 }  // namespace disk_cache
     80 
     81 #endif  // NET_DISK_CACHE_TRACING_CACHE_BACKEND_H_
     82