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

Side by Side Diff: webrtc/base/diskcache.h

Issue 2694753002: Delete httpclient.c and related files. (Closed)
Patch Set: Created 3 years, 10 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 unified diff | Download patch
« no previous file with comments | « webrtc/base/BUILD.gn ('k') | webrtc/base/diskcache.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 * Copyright 2004 The WebRTC Project Authors. All rights reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 #ifndef WEBRTC_BASE_DISKCACHE_H__
12 #define WEBRTC_BASE_DISKCACHE_H__
13
14 #include <map>
15 #include <string>
16
17 #if defined(WEBRTC_WIN)
18 #undef UnlockResource
19 #endif // WEBRTC_WIN
20
21 namespace rtc {
22
23 class StreamInterface;
24
25 ///////////////////////////////////////////////////////////////////////////////
26 // DiskCache - An LRU cache of streams, stored on disk.
27 //
28 // Streams are identified by a unique resource id. Multiple streams can be
29 // associated with each resource id, distinguished by an index. When old
30 // resources are flushed from the cache, all streams associated with those
31 // resources are removed together.
32 // DiskCache is designed to persist across executions of the program. It is
33 // safe for use from an arbitrary number of users on a single thread, but not
34 // from multiple threads or other processes.
35 ///////////////////////////////////////////////////////////////////////////////
36
37 class DiskCache {
38 public:
39 DiskCache();
40 virtual ~DiskCache();
41
42 bool Initialize(const std::string& folder, size_t size);
43 bool Purge();
44
45 bool LockResource(const std::string& id);
46 StreamInterface* WriteResource(const std::string& id, size_t index);
47 bool UnlockResource(const std::string& id);
48
49 StreamInterface* ReadResource(const std::string& id, size_t index) const;
50
51 bool HasResource(const std::string& id) const;
52 bool HasResourceStream(const std::string& id, size_t index) const;
53 bool DeleteResource(const std::string& id);
54
55 protected:
56 virtual bool InitializeEntries() = 0;
57 virtual bool PurgeFiles() = 0;
58
59 virtual bool FileExists(const std::string& filename) const = 0;
60 virtual bool DeleteFile(const std::string& filename) const = 0;
61
62 enum LockState { LS_UNLOCKED, LS_LOCKED, LS_UNLOCKING };
63 struct Entry {
64 LockState lock_state;
65 mutable size_t accessors;
66 size_t size;
67 size_t streams;
68 time_t last_modified;
69 };
70 typedef std::map<std::string, Entry> EntryMap;
71 friend class DiskCacheAdapter;
72
73 bool CheckLimit();
74
75 std::string IdToFilename(const std::string& id, size_t index) const;
76 bool FilenameToId(const std::string& filename, std::string* id,
77 size_t* index) const;
78
79 const Entry* GetEntry(const std::string& id) const {
80 return const_cast<DiskCache*>(this)->GetOrCreateEntry(id, false);
81 }
82 Entry* GetOrCreateEntry(const std::string& id, bool create);
83
84 void ReleaseResource(const std::string& id, size_t index) const;
85
86 std::string folder_;
87 size_t max_cache_, total_size_;
88 EntryMap map_;
89 mutable size_t total_accessors_;
90 };
91
92 ///////////////////////////////////////////////////////////////////////////////
93 // CacheLock - Automatically manage locking and unlocking, with optional
94 // rollback semantics
95 ///////////////////////////////////////////////////////////////////////////////
96
97 class CacheLock {
98 public:
99 CacheLock(DiskCache* cache, const std::string& id, bool rollback = false)
100 : cache_(cache), id_(id), rollback_(rollback)
101 {
102 locked_ = cache_->LockResource(id_);
103 }
104 ~CacheLock() {
105 if (locked_) {
106 cache_->UnlockResource(id_);
107 if (rollback_) {
108 cache_->DeleteResource(id_);
109 }
110 }
111 }
112 bool IsLocked() const { return locked_; }
113 void Commit() { rollback_ = false; }
114
115 private:
116 DiskCache* cache_;
117 std::string id_;
118 bool rollback_, locked_;
119 };
120
121 ///////////////////////////////////////////////////////////////////////////////
122
123 } // namespace rtc
124
125 #endif // WEBRTC_BASE_DISKCACHE_H__
OLDNEW
« no previous file with comments | « webrtc/base/BUILD.gn ('k') | webrtc/base/diskcache.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698