diff options
author | gavinp <gavinp@chromium.org> | 2014-09-24 07:54:35 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-09-24 14:54:53 +0000 |
commit | b1aaa058d259c916a01b675ca297cc01c7a07b17 (patch) | |
tree | 37e47df10fefb0311cd5bd611eb69cd0ce0c5911 /content/browser | |
parent | 0ae73de143b645c376ac0e503e9627d33bb3c4f1 (diff) | |
download | chromium_src-b1aaa058d259c916a01b675ca297cc01c7a07b17.zip chromium_src-b1aaa058d259c916a01b675ca297cc01c7a07b17.tar.gz chromium_src-b1aaa058d259c916a01b675ca297cc01c7a07b17.tar.bz2 |
Reland of "Remove void** from disk_cache interface" w/ blockfile iter fix.
Enumeration and iteration were passing around void**. With this CL, we
instead use an Iterator object.
TBR=jkarlin@chromium.org,rvargas@chromium.org,clamy@chromium.org,piman@chromium.org
BUG=413644,416059
TEST=None
Review URL: https://codereview.chromium.org/588243002
Cr-Commit-Position: refs/heads/master@{#296415}
Diffstat (limited to 'content/browser')
-rw-r--r-- | content/browser/gpu/shader_disk_cache.cc | 26 | ||||
-rw-r--r-- | content/browser/service_worker/service_worker_cache.cc | 17 |
2 files changed, 23 insertions, 20 deletions
diff --git a/content/browser/gpu/shader_disk_cache.cc b/content/browser/gpu/shader_disk_cache.cc index a7f240c..c97fd9e 100644 --- a/content/browser/gpu/shader_disk_cache.cc +++ b/content/browser/gpu/shader_disk_cache.cc @@ -23,6 +23,9 @@ void EntryCloser(disk_cache::Entry* entry) { entry->Close(); } +void FreeDiskCacheIterator(scoped_ptr<disk_cache::Backend::Iterator> iterator) { +} + } // namespace // ShaderDiskCacheEntry handles the work of caching/updating the cached @@ -95,7 +98,7 @@ class ShaderDiskReadHelper base::WeakPtr<ShaderDiskCache> cache_; OpType op_type_; - void* iter_; + scoped_ptr<disk_cache::Backend::Iterator> iter_; scoped_refptr<net::IOBufferWithSize> buf_; int host_id_; disk_cache::Entry* entry_; @@ -243,7 +246,6 @@ ShaderDiskReadHelper::ShaderDiskReadHelper( int host_id) : cache_(cache), op_type_(OPEN_NEXT), - iter_(NULL), buf_(NULL), host_id_(host_id), entry_(NULL) { @@ -291,16 +293,17 @@ int ShaderDiskReadHelper::OpenNextEntry() { DCHECK(CalledOnValidThread()); // Called through OnOpComplete, so we know |cache_| is valid. op_type_ = OPEN_NEXT_COMPLETE; - return cache_->backend()->OpenNextEntry( - &iter_, - &entry_, - base::Bind(&ShaderDiskReadHelper::OnOpComplete, this)); + if (!iter_) + iter_ = cache_->backend()->CreateIterator(); + return iter_->OpenNextEntry( + &entry_, base::Bind(&ShaderDiskReadHelper::OnOpComplete, this)); } int ShaderDiskReadHelper::OpenNextEntryComplete(int rv) { DCHECK(CalledOnValidThread()); // Called through OnOpComplete, so we know |cache_| is valid. if (rv == net::ERR_FAILED) { + iter_.reset(); op_type_ = ITERATION_FINISHED; return net::OK; } @@ -339,16 +342,21 @@ int ShaderDiskReadHelper::ReadComplete(int rv) { int ShaderDiskReadHelper::IterationComplete(int rv) { DCHECK(CalledOnValidThread()); // Called through OnOpComplete, so we know |cache_| is valid. - cache_->backend()->EndEnumeration(&iter_); - iter_ = NULL; + iter_.reset(); op_type_ = TERMINATE; return net::OK; } ShaderDiskReadHelper::~ShaderDiskReadHelper() { - if (entry_) + if (entry_) { BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, base::Bind(&EntryCloser, entry_)); + } + if (iter_) { + BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, + base::Bind(&FreeDiskCacheIterator, + base::Passed(&iter_))); + } } ShaderClearHelper::ShaderClearHelper(scoped_refptr<ShaderDiskCache> cache, diff --git a/content/browser/service_worker/service_worker_cache.cc b/content/browser/service_worker/service_worker_cache.cc index 9c16df0..6bf5acb 100644 --- a/content/browser/service_worker/service_worker_cache.cc +++ b/content/browser/service_worker/service_worker_cache.cc @@ -645,7 +645,6 @@ struct ServiceWorkerCache::KeysContext { : original_callback(callback), cache(cache), out_keys(new ServiceWorkerCache::Requests()), - backend_iterator(NULL), enumerated_entry(NULL) {} ~KeysContext() { @@ -653,8 +652,6 @@ struct ServiceWorkerCache::KeysContext { entries[i]->Close(); if (enumerated_entry) enumerated_entry->Close(); - if (cache && backend_iterator && cache->backend_) - cache->backend_->EndEnumeration(&backend_iterator); } // The callback passed to the Keys() function. @@ -670,7 +667,7 @@ struct ServiceWorkerCache::KeysContext { scoped_ptr<ServiceWorkerCache::Requests> out_keys; // Used for enumerating cache entries. - void* backend_iterator; + scoped_ptr<disk_cache::Backend::Iterator> backend_iterator; disk_cache::Entry* enumerated_entry; }; @@ -822,14 +819,14 @@ void ServiceWorkerCache::Keys(const RequestsCallback& callback) { scoped_ptr<KeysContext> keys_context( new KeysContext(callback, weak_ptr_factory_.GetWeakPtr())); - void** backend_iterator = &keys_context->backend_iterator; + keys_context->backend_iterator = backend_->CreateIterator(); + disk_cache::Backend::Iterator& iterator = *keys_context->backend_iterator; disk_cache::Entry** enumerated_entry = &keys_context->enumerated_entry; net::CompletionCallback open_entry_callback = base::Bind(KeysDidOpenNextEntry, base::Passed(keys_context.Pass())); - int rv = backend_->OpenNextEntry( - backend_iterator, enumerated_entry, open_entry_callback); + int rv = iterator.OpenNextEntry(enumerated_entry, open_entry_callback); if (rv != net::ERR_IO_PENDING) open_entry_callback.Run(rv); @@ -912,14 +909,12 @@ void ServiceWorkerCache::KeysDidOpenNextEntry( keys_context->enumerated_entry = NULL; // Enumerate the next entry. - void** backend_iterator = &keys_context->backend_iterator; + disk_cache::Backend::Iterator& iterator = *keys_context->backend_iterator; disk_cache::Entry** enumerated_entry = &keys_context->enumerated_entry; - net::CompletionCallback open_entry_callback = base::Bind(KeysDidOpenNextEntry, base::Passed(keys_context.Pass())); - rv = cache->backend_->OpenNextEntry( - backend_iterator, enumerated_entry, open_entry_callback); + rv = iterator.OpenNextEntry(enumerated_entry, open_entry_callback); if (rv != net::ERR_IO_PENDING) open_entry_callback.Run(rv); |