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

Side by Side Diff: storage/browser/fileapi/file_system_usage_cache.cc

Issue 442383002: Move storage-related files from webkit/ to new top-level directory storage/ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 4 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "webkit/browser/fileapi/file_system_usage_cache.h" 5 #include "storage/browser/fileapi/file_system_usage_cache.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
11 #include "base/file_util.h" 11 #include "base/file_util.h"
12 #include "base/files/file_path.h" 12 #include "base/files/file_path.h"
13 #include "base/pickle.h" 13 #include "base/pickle.h"
14 #include "base/stl_util.h" 14 #include "base/stl_util.h"
15 #include "webkit/browser/fileapi/timed_task_helper.h" 15 #include "storage/browser/fileapi/timed_task_helper.h"
16 16
17 namespace fileapi { 17 namespace storage {
18 18
19 namespace { 19 namespace {
20 const int64 kCloseDelaySeconds = 5; 20 const int64 kCloseDelaySeconds = 5;
21 const size_t kMaxHandleCacheSize = 2; 21 const size_t kMaxHandleCacheSize = 2;
22 } // namespace 22 } // namespace
23 23
24 FileSystemUsageCache::FileSystemUsageCache( 24 FileSystemUsageCache::FileSystemUsageCache(
25 base::SequencedTaskRunner* task_runner) 25 base::SequencedTaskRunner* task_runner)
26 : task_runner_(task_runner), 26 : task_runner_(task_runner), weak_factory_(this) {
27 weak_factory_(this) {
28 } 27 }
29 28
30 FileSystemUsageCache::~FileSystemUsageCache() { 29 FileSystemUsageCache::~FileSystemUsageCache() {
31 task_runner_ = NULL; 30 task_runner_ = NULL;
32 CloseCacheFiles(); 31 CloseCacheFiles();
33 } 32 }
34 33
35 const base::FilePath::CharType FileSystemUsageCache::kUsageFileName[] = 34 const base::FilePath::CharType FileSystemUsageCache::kUsageFileName[] =
36 FILE_PATH_LITERAL(".usage"); 35 FILE_PATH_LITERAL(".usage");
37 const char FileSystemUsageCache::kUsageFileHeader[] = "FSU5"; 36 const char FileSystemUsageCache::kUsageFileHeader[] = "FSU5";
38 const int FileSystemUsageCache::kUsageFileHeaderSize = 4; 37 const int FileSystemUsageCache::kUsageFileHeaderSize = 4;
39 38
40 // Pickle::{Read,Write}Bool treat bool as int 39 // Pickle::{Read,Write}Bool treat bool as int
41 const int FileSystemUsageCache::kUsageFileSize = 40 const int FileSystemUsageCache::kUsageFileSize =
42 sizeof(Pickle::Header) + 41 sizeof(Pickle::Header) + FileSystemUsageCache::kUsageFileHeaderSize +
43 FileSystemUsageCache::kUsageFileHeaderSize +
44 sizeof(int) + sizeof(int32) + sizeof(int64); // NOLINT 42 sizeof(int) + sizeof(int32) + sizeof(int64); // NOLINT
45 43
46 bool FileSystemUsageCache::GetUsage(const base::FilePath& usage_file_path, 44 bool FileSystemUsageCache::GetUsage(const base::FilePath& usage_file_path,
47 int64* usage_out) { 45 int64* usage_out) {
48 TRACE_EVENT0("FileSystem", "UsageCache::GetUsage"); 46 TRACE_EVENT0("FileSystem", "UsageCache::GetUsage");
49 DCHECK(CalledOnValidThread()); 47 DCHECK(CalledOnValidThread());
50 DCHECK(usage_out); 48 DCHECK(usage_out);
51 bool is_valid = true; 49 bool is_valid = true;
52 uint32 dirty = 0; 50 uint32 dirty = 0;
53 int64 usage = 0; 51 int64 usage = 0;
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 DCHECK(CalledOnValidThread()); 119 DCHECK(CalledOnValidThread());
122 bool is_valid = true; 120 bool is_valid = true;
123 uint32 dirty = 0; 121 uint32 dirty = 0;
124 int64 usage = 0; 122 int64 usage = 0;
125 if (!Read(usage_file_path, &is_valid, &dirty, &usage)) 123 if (!Read(usage_file_path, &is_valid, &dirty, &usage))
126 return false; 124 return false;
127 return is_valid; 125 return is_valid;
128 } 126 }
129 127
130 bool FileSystemUsageCache::AtomicUpdateUsageByDelta( 128 bool FileSystemUsageCache::AtomicUpdateUsageByDelta(
131 const base::FilePath& usage_file_path, int64 delta) { 129 const base::FilePath& usage_file_path,
130 int64 delta) {
132 TRACE_EVENT0("FileSystem", "UsageCache::AtomicUpdateUsageByDelta"); 131 TRACE_EVENT0("FileSystem", "UsageCache::AtomicUpdateUsageByDelta");
133 DCHECK(CalledOnValidThread()); 132 DCHECK(CalledOnValidThread());
134 bool is_valid = true; 133 bool is_valid = true;
135 uint32 dirty = 0; 134 uint32 dirty = 0;
136 int64 usage = 0;; 135 int64 usage = 0;
136 ;
137 if (!Read(usage_file_path, &is_valid, &dirty, &usage)) 137 if (!Read(usage_file_path, &is_valid, &dirty, &usage))
138 return false; 138 return false;
139 return Write(usage_file_path, is_valid, dirty, usage + delta); 139 return Write(usage_file_path, is_valid, dirty, usage + delta);
140 } 140 }
141 141
142 bool FileSystemUsageCache::UpdateUsage(const base::FilePath& usage_file_path, 142 bool FileSystemUsageCache::UpdateUsage(const base::FilePath& usage_file_path,
143 int64 fs_usage) { 143 int64 fs_usage) {
144 TRACE_EVENT0("FileSystem", "UsageCache::UpdateUsage"); 144 TRACE_EVENT0("FileSystem", "UsageCache::UpdateUsage");
145 DCHECK(CalledOnValidThread()); 145 DCHECK(CalledOnValidThread());
146 return Write(usage_file_path, true, 0, fs_usage); 146 return Write(usage_file_path, true, 0, fs_usage);
(...skipping 13 matching lines...) Expand all
160 } 160 }
161 161
162 void FileSystemUsageCache::CloseCacheFiles() { 162 void FileSystemUsageCache::CloseCacheFiles() {
163 TRACE_EVENT0("FileSystem", "UsageCache::CloseCacheFiles"); 163 TRACE_EVENT0("FileSystem", "UsageCache::CloseCacheFiles");
164 DCHECK(CalledOnValidThread()); 164 DCHECK(CalledOnValidThread());
165 STLDeleteValues(&cache_files_); 165 STLDeleteValues(&cache_files_);
166 timer_.reset(); 166 timer_.reset();
167 } 167 }
168 168
169 bool FileSystemUsageCache::Read(const base::FilePath& usage_file_path, 169 bool FileSystemUsageCache::Read(const base::FilePath& usage_file_path,
170 bool* is_valid, 170 bool* is_valid,
171 uint32* dirty_out, 171 uint32* dirty_out,
172 int64* usage_out) { 172 int64* usage_out) {
173 TRACE_EVENT0("FileSystem", "UsageCache::Read"); 173 TRACE_EVENT0("FileSystem", "UsageCache::Read");
174 DCHECK(CalledOnValidThread()); 174 DCHECK(CalledOnValidThread());
175 DCHECK(is_valid); 175 DCHECK(is_valid);
176 DCHECK(dirty_out); 176 DCHECK(dirty_out);
177 DCHECK(usage_out); 177 DCHECK(usage_out);
178 char buffer[kUsageFileSize]; 178 char buffer[kUsageFileSize];
179 const char *header; 179 const char* header;
180 if (usage_file_path.empty() || 180 if (usage_file_path.empty() ||
181 !ReadBytes(usage_file_path, buffer, kUsageFileSize)) 181 !ReadBytes(usage_file_path, buffer, kUsageFileSize))
182 return false; 182 return false;
183 Pickle read_pickle(buffer, kUsageFileSize); 183 Pickle read_pickle(buffer, kUsageFileSize);
184 PickleIterator iter(read_pickle); 184 PickleIterator iter(read_pickle);
185 uint32 dirty = 0; 185 uint32 dirty = 0;
186 int64 usage = 0; 186 int64 usage = 0;
187 187
188 if (!read_pickle.ReadBytes(&iter, &header, kUsageFileHeaderSize) || 188 if (!read_pickle.ReadBytes(&iter, &header, kUsageFileHeaderSize) ||
189 !read_pickle.ReadBool(&iter, is_valid) || 189 !read_pickle.ReadBool(&iter, is_valid) ||
190 !read_pickle.ReadUInt32(&iter, &dirty) || 190 !read_pickle.ReadUInt32(&iter, &dirty) ||
191 !read_pickle.ReadInt64(&iter, &usage)) 191 !read_pickle.ReadInt64(&iter, &usage))
192 return false; 192 return false;
193 193
194 if (header[0] != kUsageFileHeader[0] || 194 if (header[0] != kUsageFileHeader[0] || header[1] != kUsageFileHeader[1] ||
195 header[1] != kUsageFileHeader[1] || 195 header[2] != kUsageFileHeader[2] || header[3] != kUsageFileHeader[3])
196 header[2] != kUsageFileHeader[2] ||
197 header[3] != kUsageFileHeader[3])
198 return false; 196 return false;
199 197
200 *dirty_out = dirty; 198 *dirty_out = dirty;
201 *usage_out = usage; 199 *usage_out = usage;
202 return true; 200 return true;
203 } 201 }
204 202
205 bool FileSystemUsageCache::Write(const base::FilePath& usage_file_path, 203 bool FileSystemUsageCache::Write(const base::FilePath& usage_file_path,
206 bool is_valid, 204 bool is_valid,
207 int32 dirty, 205 int32 dirty,
(...skipping 22 matching lines...) Expand all
230 ScheduleCloseTimer(); 228 ScheduleCloseTimer();
231 229
232 base::File* new_file = NULL; 230 base::File* new_file = NULL;
233 std::pair<CacheFiles::iterator, bool> inserted = 231 std::pair<CacheFiles::iterator, bool> inserted =
234 cache_files_.insert(std::make_pair(file_path, new_file)); 232 cache_files_.insert(std::make_pair(file_path, new_file));
235 if (!inserted.second) 233 if (!inserted.second)
236 return inserted.first->second; 234 return inserted.first->second;
237 235
238 new_file = new base::File(file_path, 236 new_file = new base::File(file_path,
239 base::File::FLAG_OPEN_ALWAYS | 237 base::File::FLAG_OPEN_ALWAYS |
240 base::File::FLAG_READ | 238 base::File::FLAG_READ | base::File::FLAG_WRITE);
241 base::File::FLAG_WRITE);
242 if (!new_file->IsValid()) { 239 if (!new_file->IsValid()) {
243 cache_files_.erase(inserted.first); 240 cache_files_.erase(inserted.first);
244 delete new_file; 241 delete new_file;
245 return NULL; 242 return NULL;
246 } 243 }
247 244
248 inserted.first->second = new_file; 245 inserted.first->second = new_file;
249 return new_file; 246 return new_file;
250 } 247 }
251 248
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 bool FileSystemUsageCache::CalledOnValidThread() { 294 bool FileSystemUsageCache::CalledOnValidThread() {
298 return !task_runner_.get() || task_runner_->RunsTasksOnCurrentThread(); 295 return !task_runner_.get() || task_runner_->RunsTasksOnCurrentThread();
299 } 296 }
300 297
301 bool FileSystemUsageCache::HasCacheFileHandle(const base::FilePath& file_path) { 298 bool FileSystemUsageCache::HasCacheFileHandle(const base::FilePath& file_path) {
302 DCHECK(CalledOnValidThread()); 299 DCHECK(CalledOnValidThread());
303 DCHECK_LE(cache_files_.size(), kMaxHandleCacheSize); 300 DCHECK_LE(cache_files_.size(), kMaxHandleCacheSize);
304 return ContainsKey(cache_files_, file_path); 301 return ContainsKey(cache_files_, file_path);
305 } 302 }
306 303
307 } // namespace fileapi 304 } // namespace storage
OLDNEW
« no previous file with comments | « storage/browser/fileapi/file_system_usage_cache.h ('k') | storage/browser/fileapi/file_writer_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698