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

Unified Diff: net/http/http_cache_transaction.cc

Issue 10736066: Adding histograms showing fraction of page load times (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: net/http/http_cache_transaction.cc
===================================================================
--- net/http/http_cache_transaction.cc (revision 147723)
+++ net/http/http_cache_transaction.cc (working copy)
@@ -32,6 +32,7 @@
#include "net/http/http_request_info.h"
#include "net/http/http_response_headers.h"
#include "net/http/http_transaction.h"
+#include "net/http/http_transaction_delegate.h"
#include "net/http/http_util.h"
#include "net/http/partial_data.h"
@@ -99,7 +100,8 @@
//-----------------------------------------------------------------------------
-HttpCache::Transaction::Transaction(HttpCache* cache)
+HttpCache::Transaction::Transaction(HttpCache* cache,
+ HttpTransactionDelegate* delegate)
: next_state_(STATE_NONE),
request_(NULL),
cache_(cache->AsWeakPtr()),
@@ -124,7 +126,8 @@
ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)),
ALLOW_THIS_IN_INITIALIZER_LIST(io_callback_(
base::Bind(&Transaction::OnIOComplete,
- weak_factory_.GetWeakPtr()))) {
+ weak_factory_.GetWeakPtr()))),
+ delegate_(delegate) {
COMPILE_ASSERT(HttpCache::Transaction::kNumValidationHeaders ==
arraysize(kValidationHeaders),
Invalid_number_of_validation_headers);
@@ -652,11 +655,13 @@
cache_pending_ = true;
next_state_ = STATE_GET_BACKEND_COMPLETE;
net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_GET_BACKEND);
+ ReportCacheActionStart();
return cache_->GetBackendForTransaction(this);
}
int HttpCache::Transaction::DoGetBackendComplete(int result) {
DCHECK(result == OK || result == ERR_FAILED);
+ ReportCacheActionFinish();
net_log_.EndEventWithNetErrorCode(NetLog::TYPE_HTTP_CACHE_GET_BACKEND,
result);
cache_pending_ = false;
@@ -717,7 +722,7 @@
DCHECK(!network_trans_.get());
// Create a network transaction.
- int rv = cache_->network_layer_->CreateTransaction(&network_trans_);
+ int rv = cache_->network_layer_->CreateTransaction(&network_trans_, NULL);
rvargas (doing something else) 2012/07/23 22:22:36 It would be interesting to track the network activ
tburkard 2012/07/24 01:03:12 (nothing to do here). On 2012/07/23 22:22:36, rva
if (rv != OK)
return rv;
@@ -845,6 +850,7 @@
next_state_ = STATE_OPEN_ENTRY_COMPLETE;
cache_pending_ = true;
net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_OPEN_ENTRY);
+ ReportCacheActionStart();
return cache_->OpenEntry(cache_key_, &new_entry_, this);
}
@@ -852,6 +858,7 @@
// It is important that we go to STATE_ADD_TO_ENTRY whenever the result is
// OK, otherwise the cache will end up with an active entry without any
// transaction attached.
+ ReportCacheActionFinish();
net_log_.EndEventWithNetErrorCode(NetLog::TYPE_HTTP_CACHE_OPEN_ENTRY, result);
cache_pending_ = false;
if (result == OK) {
@@ -895,6 +902,7 @@
next_state_ = STATE_CREATE_ENTRY_COMPLETE;
cache_pending_ = true;
net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_CREATE_ENTRY);
+ ReportCacheActionStart();
return cache_->CreateEntry(cache_key_, &new_entry_, this);
}
@@ -902,6 +910,7 @@
// It is important that we go to STATE_ADD_TO_ENTRY whenever the result is
// OK, otherwise the cache will end up with an active entry without any
// transaction attached.
+ ReportCacheActionFinish();
net_log_.EndEventWithNetErrorCode(NetLog::TYPE_HTTP_CACHE_CREATE_ENTRY,
result);
cache_pending_ = false;
@@ -930,10 +939,12 @@
next_state_ = STATE_DOOM_ENTRY_COMPLETE;
cache_pending_ = true;
net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_DOOM_ENTRY);
+ ReportCacheActionStart();
return cache_->DoomEntry(cache_key_, this);
}
int HttpCache::Transaction::DoDoomEntryComplete(int result) {
+ ReportCacheActionFinish();
net_log_.EndEventWithNetErrorCode(NetLog::TYPE_HTTP_CACHE_DOOM_ENTRY, result);
next_state_ = STATE_CREATE_ENTRY;
cache_pending_ = false;
@@ -948,12 +959,14 @@
cache_pending_ = true;
next_state_ = STATE_ADD_TO_ENTRY_COMPLETE;
net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_ADD_TO_ENTRY);
+ ReportCacheActionStart();
rvargas (doing something else) 2012/07/23 22:22:36 We should treat this one some other way. This is n
tburkard 2012/07/24 01:03:12 Why is the distinction important? What is the dif
rvargas (doing something else) 2012/07/24 03:10:38 No matter what we change at the disk cache layer,
tburkard 2012/07/24 22:23:26 Done.
DCHECK(entry_lock_waiting_since_.is_null());
entry_lock_waiting_since_ = base::TimeTicks::Now();
return cache_->AddTransactionToEntry(new_entry_, this);
}
int HttpCache::Transaction::DoAddToEntryComplete(int result) {
+ ReportCacheActionFinish();
net_log_.EndEventWithNetErrorCode(NetLog::TYPE_HTTP_CACHE_ADD_TO_ENTRY,
result);
@@ -1135,15 +1148,18 @@
return OK;
if (net_log_.IsLoggingAllEvents())
net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_WRITE_DATA);
-
+ ReportCacheActionStart();
// Truncate the stream.
return WriteToEntry(kResponseContentIndex, 0, NULL, 0, io_callback_);
}
int HttpCache::Transaction::DoTruncateCachedDataComplete(int result) {
- if (net_log_.IsLoggingAllEvents() && entry_) {
- net_log_.EndEventWithNetErrorCode(NetLog::TYPE_HTTP_CACHE_WRITE_DATA,
- result);
+ if (entry_) {
+ ReportCacheActionFinish();
+ if (net_log_.IsLoggingAllEvents()) {
+ net_log_.EndEventWithNetErrorCode(NetLog::TYPE_HTTP_CACHE_WRITE_DATA,
+ result);
+ }
}
next_state_ = STATE_TRUNCATE_CACHED_METADATA;
@@ -1157,13 +1173,17 @@
if (net_log_.IsLoggingAllEvents())
net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_WRITE_INFO);
+ ReportCacheActionStart();
return WriteToEntry(kMetadataIndex, 0, NULL, 0, io_callback_);
}
int HttpCache::Transaction::DoTruncateCachedMetadataComplete(int result) {
- if (net_log_.IsLoggingAllEvents() && entry_) {
- net_log_.EndEventWithNetErrorCode(NetLog::TYPE_HTTP_CACHE_WRITE_INFO,
- result);
+ if (entry_) {
+ ReportCacheActionFinish();
+ if (net_log_.IsLoggingAllEvents()) {
+ net_log_.EndEventWithNetErrorCode(NetLog::TYPE_HTTP_CACHE_WRITE_INFO,
+ result);
+ }
}
// If this response is a redirect, then we can stop writing now. (We don't
@@ -1205,11 +1225,13 @@
read_buf_ = new IOBuffer(io_buf_len_);
net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_READ_INFO);
+ ReportCacheActionStart();
rvargas (doing something else) 2012/07/23 22:22:36 This is where we start getting confusing results.
tburkard 2012/07/24 01:03:12 That doesn't matter for the purpose of what I'm tr
rvargas (doing something else) 2012/07/24 03:10:38 I think it matters. If we only care about a singl
tburkard 2012/07/24 22:23:26 Per discussion on the phone, we are in agreement o
return entry_->disk_entry->ReadData(kResponseInfoIndex, 0, read_buf_,
io_buf_len_, io_callback_);
}
int HttpCache::Transaction::DoCacheReadResponseComplete(int result) {
+ ReportCacheActionFinish();
net_log_.EndEventWithNetErrorCode(NetLog::TYPE_HTTP_CACHE_READ_INFO, result);
if (result != io_buf_len_ ||
!HttpCache::ParseResponseInfo(read_buf_->data(), io_buf_len_,
@@ -1254,14 +1276,20 @@
}
int HttpCache::Transaction::DoCacheWriteResponse() {
- if (net_log_.IsLoggingAllEvents() && entry_)
- net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_WRITE_INFO);
+ if (entry_) {
+ if (net_log_.IsLoggingAllEvents())
+ net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_WRITE_INFO);
+ ReportCacheActionStart();
+ }
return WriteResponseInfoToEntry(false);
}
int HttpCache::Transaction::DoCacheWriteTruncatedResponse() {
- if (net_log_.IsLoggingAllEvents() && entry_)
- net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_WRITE_INFO);
+ if (entry_) {
+ if (net_log_.IsLoggingAllEvents() && entry_)
+ net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_WRITE_INFO);
+ ReportCacheActionStart();
+ }
return WriteResponseInfoToEntry(true);
}
@@ -1270,6 +1298,7 @@
target_state_ = STATE_NONE;
if (!entry_)
return OK;
+ ReportCacheActionFinish();
if (net_log_.IsLoggingAllEvents()) {
net_log_.EndEventWithNetErrorCode(NetLog::TYPE_HTTP_CACHE_WRITE_INFO,
result);
@@ -1292,12 +1321,14 @@
new IOBufferWithSize(entry_->disk_entry->GetDataSize(kMetadataIndex));
net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_READ_INFO);
+ ReportCacheActionStart();
return entry_->disk_entry->ReadData(kMetadataIndex, 0, response_.metadata,
response_.metadata->size(),
io_callback_);
}
int HttpCache::Transaction::DoCacheReadMetadataComplete(int result) {
+ ReportCacheActionFinish();
net_log_.EndEventWithNetErrorCode(NetLog::TYPE_HTTP_CACHE_READ_INFO, result);
if (result != response_.metadata->size())
return OnCacheReadError(result, false);
@@ -1326,6 +1357,7 @@
if (net_log_.IsLoggingAllEvents())
net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_READ_DATA);
+ ReportCacheActionStart();
if (partial_.get()) {
return partial_->CacheRead(entry_->disk_entry, read_buf_, io_buf_len_,
io_callback_);
@@ -1336,6 +1368,7 @@
}
int HttpCache::Transaction::DoCacheReadDataComplete(int result) {
+ ReportCacheActionFinish();
if (net_log_.IsLoggingAllEvents()) {
net_log_.EndEventWithNetErrorCode(NetLog::TYPE_HTTP_CACHE_READ_DATA,
result);
@@ -1361,16 +1394,22 @@
int HttpCache::Transaction::DoCacheWriteData(int num_bytes) {
next_state_ = STATE_CACHE_WRITE_DATA_COMPLETE;
write_len_ = num_bytes;
- if (net_log_.IsLoggingAllEvents() && entry_)
- net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_WRITE_DATA);
+ if (entry_) {
+ if (net_log_.IsLoggingAllEvents())
+ net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_WRITE_DATA);
+ ReportCacheActionStart();
+ }
return AppendResponseDataToEntry(read_buf_, num_bytes, io_callback_);
}
int HttpCache::Transaction::DoCacheWriteDataComplete(int result) {
- if (net_log_.IsLoggingAllEvents() && entry_) {
- net_log_.EndEventWithNetErrorCode(NetLog::TYPE_HTTP_CACHE_WRITE_DATA,
- result);
+ if (entry_) {
+ ReportCacheActionFinish();
+ if (net_log_.IsLoggingAllEvents()) {
+ net_log_.EndEventWithNetErrorCode(NetLog::TYPE_HTTP_CACHE_WRITE_DATA,
+ result);
+ }
}
// Balance the AddRef from DoCacheWriteData.
if (!cache_)
@@ -2110,4 +2149,14 @@
DoLoop(result);
}
+void HttpCache::Transaction::ReportCacheActionStart() {
+ if (delegate_)
+ delegate_->OnCacheActionStart();
+}
+
+void HttpCache::Transaction::ReportCacheActionFinish() {
+ if (delegate_)
+ delegate_->OnCacheActionFinish();
+}
+
} // namespace net

Powered by Google App Engine
This is Rietveld 408576698