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

Side by Side Diff: net/disk_cache/flash/log_store.h

Issue 182093002: Remove the flash specific disk cache backend. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « net/disk_cache/flash/internal_entry.cc ('k') | net/disk_cache/flash/log_store.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 // Copyright (c) 2012 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_FLASH_LOG_STORE_H_
6 #define NET_DISK_CACHE_FLASH_LOG_STORE_H_
7
8 #include <set>
9 #include <vector>
10
11 #include "base/basictypes.h"
12 #include "base/gtest_prod_util.h"
13 #include "net/base/net_export.h"
14 #include "net/disk_cache/flash/storage.h"
15
16 namespace disk_cache {
17
18 class Segment;
19
20 // This class implements a general purpose store for storing and retrieving
21 // entries consisting of arbitrary binary data. The store has log semantics,
22 // i.e. it's not possible to overwrite data in place. In order to update an
23 // entry, a new version must be written. Only one entry can be written to at
24 // any given time, while concurrent reading of multiple entries is supported.
25 class NET_EXPORT_PRIVATE LogStore {
26 public:
27 LogStore(const base::FilePath& path, int32 size);
28 ~LogStore();
29
30 // Performs initialization. Must be the first function called and further
31 // calls should be made only if it is successful.
32 bool Init();
33
34 // Closes the store. Should be the last function called before destruction.
35 bool Close();
36
37 // Creates an entry of |size| bytes. The id of the created entry is stored in
38 // |entry_id|.
39 bool CreateEntry(int32 size, int32* entry_id);
40
41 // Deletes |entry_id|; the client should keep track of |size| and provide it
42 // here. Only inactive (i.e. not currently open or being created) entries can
43 // be deleted.
44 void DeleteEntry(int32 entry_id, int32 size);
45
46 // Appends data to the end of the last created entry.
47 bool WriteData(const void* buffer, int32 size);
48
49 // Opens an entry with id |entry_id|.
50 bool OpenEntry(int32 entry_id);
51
52 // Reads |size| bytes starting from |offset| into |buffer|, where |offset| is
53 // relative to the entry's content, from an entry identified by |entry_id|.
54 bool ReadData(int32 entry_id, void* buffer, int32 size, int32 offset) const;
55
56 // Closes an entry that was either opened with OpenEntry or created with
57 // CreateEntry.
58 void CloseEntry(int32 id);
59
60 private:
61 FRIEND_TEST_ALL_PREFIXES(FlashCacheTest, LogStoreReadFromClosedSegment);
62 FRIEND_TEST_ALL_PREFIXES(FlashCacheTest, LogStoreSegmentSelectionIsFifo);
63 FRIEND_TEST_ALL_PREFIXES(FlashCacheTest, LogStoreInUseSegmentIsSkipped);
64 FRIEND_TEST_ALL_PREFIXES(FlashCacheTest, LogStoreReadFromCurrentAfterClose);
65
66 int32 GetNextSegmentIndex();
67 bool InUse(int32 segment_index) const;
68
69 Storage storage_;
70
71 int32 num_segments_;
72
73 // Currently open segments, either for reading or writing. There can only be
74 // one segment open for writing, and multiple open for reading.
75 std::vector<Segment*> open_segments_;
76
77 // The index of the segment currently being written to. It's an index to
78 // |open_segments_| vector.
79 int32 write_index_;
80
81 // Ids of entries currently open, either CreatEntry'ed or OpenEntry'ed.
82 std::set<int32> open_entries_;
83
84 // Id of the entry that is currently being written to, -1 if there is no entry
85 // currently being written to.
86 int32 current_entry_id_;
87
88 // Number of bytes left to be written to the entry identified by
89 // |current_entry_id_|. Its value makes sense iff |current_entry_id_| is not
90 // -1.
91 int32 current_entry_num_bytes_left_to_write_;
92
93 bool init_; // Init was called.
94 bool closed_; // Close was called.
95
96 DISALLOW_COPY_AND_ASSIGN(LogStore);
97 };
98
99 } // namespace disk_cache
100
101 #endif // NET_DISK_CACHE_FLASH_LOG_STORE_H_
OLDNEW
« no previous file with comments | « net/disk_cache/flash/internal_entry.cc ('k') | net/disk_cache/flash/log_store.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698