Index: net/http/disk_cache_based_quic_server_info.h |
diff --git a/net/http/disk_cache_based_quic_server_info.h b/net/http/disk_cache_based_quic_server_info.h |
index 97fe95e10c79b08da35b84b9fcf8da9c6f75612f..e95d5355c97d27bc8f1bf35eeec31e562f623170 100644 |
--- a/net/http/disk_cache_based_quic_server_info.h |
+++ b/net/http/disk_cache_based_quic_server_info.h |
@@ -38,9 +38,11 @@ class NET_EXPORT_PRIVATE DiskCacheBasedQuicServerInfo |
bool IsDataReady() override; |
bool IsReadyToPersist() override; |
void Persist() override; |
+ void OnExternalCacheHit() override; |
private: |
struct CacheOperationDataShim; |
+ |
enum State { |
GET_BACKEND, |
GET_BACKEND_COMPLETE, |
@@ -57,8 +59,42 @@ class NET_EXPORT_PRIVATE DiskCacheBasedQuicServerInfo |
NONE, |
}; |
+ // Enum to track number of times data read/parse/write API calls of |
+ // QuicServerInfo to and from disk cache is called. |
+ enum QuicServerInfoAPICall { |
+ QUIC_SERVER_INFO_START = 0, |
+ QUIC_SERVER_INFO_WAIT_FOR_DATA_READY = 1, |
+ QUIC_SERVER_INFO_PARSE = 2, |
+ QUIC_SERVER_INFO_WAIT_FOR_DATA_READY_CANCEL = 3, |
+ QUIC_SERVER_INFO_READY_TO_PERSIST = 4, |
+ QUIC_SERVER_INFO_PERSIST = 5, |
+ QUIC_SERVER_INFO_EXTERNAL_CACHE_HIT = 6, |
+ QUIC_SERVER_INFO_NUM_OF_API_CALLS = 7, |
+ }; |
+ |
+ // Enum to track failure reasons to read/load/write of QuicServerInfo to |
+ // and from disk cache. |
+ enum FailureReason { |
+ WAIT_FOR_DATA_READY_INVALID_ARGUMENT_FAILURE = 0, |
+ GET_BACKEND_FAILURE = 1, |
+ OPEN_FAILURE = 2, |
+ CREATE_OR_OPEN_FAILURE = 3, |
+ PARSE_NO_DATA_FAILURE = 4, |
+ PARSE_FAILURE = 5, |
+ READ_FAILURE = 6, |
+ READY_TO_PERSIST_FAILURE = 7, |
+ PERSIST_NO_BACKEND_FAILURE = 8, |
+ WRITE_FAILURE = 9, |
+ NO_FAILURE = 10, |
+ NUM_OF_FAILURES = 11, |
+ }; |
+ |
~DiskCacheBasedQuicServerInfo() override; |
+ // Persists |pending_write_data_| if it is not empty, otherwise serializes the |
+ // data and pesists it. |
+ void PersistInternal(); |
+ |
std::string key() const; |
// The |unused| parameter is a small hack so that we can have the |
@@ -86,23 +122,39 @@ class NET_EXPORT_PRIVATE DiskCacheBasedQuicServerInfo |
// DoSetDone is the terminal state of the write operation. |
int DoSetDone(); |
+ // Tracks in a histogram the number of times data read/parse/write API calls |
+ // of QuicServerInfo to and from disk cache is called. |
+ void RecordQuicServerInfoStatus(QuicServerInfoAPICall call); |
+ |
+ // Tracks in a histogram the failure reasons to read/load/write of |
+ // QuicServerInfo to and from disk cache. It also saves the |failure| in |
+ // |last_failure_|. |
+ void RecordQuicServerInfoFailure(FailureReason failure); |
+ |
+ // Tracks in a histogram if |last_failure_| is not NO_FAILURE. |
+ void RecordLastFailure(); |
+ |
CacheOperationDataShim* data_shim_; // Owned by |io_callback_|. |
CompletionCallback io_callback_; |
State state_; |
bool ready_; |
bool found_entry_; // Controls the behavior of DoCreateOrOpen. |
std::string new_data_; |
+ std::string pending_write_data_; |
const QuicServerId server_id_; |
HttpCache* const http_cache_; |
disk_cache::Backend* backend_; |
disk_cache::Entry* entry_; |
- CompletionCallback user_callback_; |
+ CompletionCallback wait_for_ready_callback_; |
scoped_refptr<IOBuffer> read_buffer_; |
scoped_refptr<IOBuffer> write_buffer_; |
std::string data_; |
base::TimeTicks load_start_time_; |
+ FailureReason last_failure_; |
base::WeakPtrFactory<DiskCacheBasedQuicServerInfo> weak_factory_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(DiskCacheBasedQuicServerInfo); |
}; |
} // namespace net |