simple_entry_operation.h revision bb1529ce867d8845a77ec7cdf3e3003ef1771a40
1bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 2bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch// found in the LICENSE file. 4bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 5bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#ifndef NET_DISK_CACHE_SIMPLE_SIMPLE_ENTRY_OPERATION_H_ 6bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#define NET_DISK_CACHE_SIMPLE_SIMPLE_ENTRY_OPERATION_H_ 7bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 8bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "base/memory/ref_counted.h" 9bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "net/base/completion_callback.h" 10bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "net/base/net_log.h" 11bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 12bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochnamespace net { 13bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochclass IOBuffer; 14bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch} 15bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 16bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochnamespace disk_cache { 17bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 18bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochclass Entry; 19bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochclass SimpleEntryImpl; 20bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 21bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch// SimpleEntryOperation stores the information regarding operations in 22bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch// SimpleEntryImpl, between the moment they are issued by users of the backend, 23bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch// and the moment when they are executed. 24bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochclass SimpleEntryOperation { 25bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch public: 26bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch typedef net::CompletionCallback CompletionCallback; 27bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 28bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch enum EntryOperationType { 29bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch TYPE_OPEN = 0, 30bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch TYPE_CREATE = 1, 31bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch TYPE_CLOSE = 2, 32bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch TYPE_READ = 3, 33bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch TYPE_WRITE = 4, 34bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch }; 35bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 36bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch SimpleEntryOperation(const SimpleEntryOperation& other); 37bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch ~SimpleEntryOperation(); 38bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 39bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch static SimpleEntryOperation OpenOperation(SimpleEntryImpl* entry, 40bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch bool have_index, 41bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch const CompletionCallback& callback, 42bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch Entry** out_entry); 43bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch static SimpleEntryOperation CreateOperation( 44bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch SimpleEntryImpl* entry, 45bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch bool have_index, 46bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch const CompletionCallback& callback, 47bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch Entry** out_entry); 48bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch static SimpleEntryOperation CloseOperation(SimpleEntryImpl* entry); 49bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch static SimpleEntryOperation ReadOperation(SimpleEntryImpl* entry, 50bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch int index, 51bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch int offset, 52bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch int length, 53bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch net::IOBuffer* buf, 54bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch const CompletionCallback& callback, 55bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch bool alone_in_queue); 56bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch static SimpleEntryOperation WriteOperation( 57bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch SimpleEntryImpl* entry, 58bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch int index, 59bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch int offset, 60bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch int length, 61bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch net::IOBuffer* buf, 62bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch bool truncate, 63bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch bool optimistic, 64bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch const CompletionCallback& callback); 65bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 66bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch bool ConflictsWith(const SimpleEntryOperation& other_op) const; 67bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // Releases all references. After calling this operation, SimpleEntryOperation 68bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // will only hold POD members. 69bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch void ReleaseReferences(); 70bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 71bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch EntryOperationType type() const { 72bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch return static_cast<EntryOperationType>(type_); 73bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch } 74bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch const CompletionCallback& callback() const { return callback_; } 75bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch Entry** out_entry() { return out_entry_; } 76bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch bool have_index() const { return have_index_; } 77bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch int index() const { return index_; } 78bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch int offset() const { return offset_; } 79bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch int length() const { return length_; } 80bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch net::IOBuffer* buf() { return buf_.get(); } 81bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch bool truncate() const { return truncate_; } 82bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch bool optimistic() const { return optimistic_; } 83bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch bool alone_in_queue() const { return alone_in_queue_; } 84bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 85bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch private: 86bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch SimpleEntryOperation(SimpleEntryImpl* entry, 87bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch net::IOBuffer* buf, 88bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch const CompletionCallback& callback, 89bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch Entry** out_entry, 90bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch int offset, 91bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch int length, 92bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch EntryOperationType type, 93bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch bool have_index, 94bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch int index, 95bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch bool truncate, 96bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch bool optimistic, 97bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch bool alone_in_queue); 98bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 99bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // This ensures entry will not be deleted until the operation has ran. 100bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch scoped_refptr<SimpleEntryImpl> entry_; 101bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch scoped_refptr<net::IOBuffer> buf_; 102bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch CompletionCallback callback_; 103bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 104bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // Used in open and create operations. 105bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch Entry** out_entry_; 106bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 107bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // Used in write and read operations. 108bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch const int offset_; 109bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch const int length_; 110bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 111bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch const unsigned int type_ : 3; /* 3 */ 112bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // Used in open and create operations. 113bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch const unsigned int have_index_ : 1; /* 4 */ 114bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // Used in write and read operations. 115bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch const unsigned int index_ : 2; /* 6 */ 116bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // Used only in write operations. 117bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch const unsigned int truncate_ : 1; /* 7 */ 118bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch const unsigned int optimistic_ : 1; /* 8 */ 119bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // Used only in SimpleCache.ReadIsParallelizable histogram. 120bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch const unsigned int alone_in_queue_ : 1; /* 9 */ 121bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch}; 122bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 123bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch} // namespace disk_cache 124bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 125bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#endif // NET_DISK_CACHE_SIMPLE_SIMPLE_ENTRY_OPERATION_H_ 126