summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcsharp@chromium.org <csharp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-01 17:17:07 +0000
committercsharp@chromium.org <csharp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-01 17:17:07 +0000
commit3ed84729d876d6bc22b2da8ffc8a2cd609a5004a (patch)
tree6bae823ec89599e064fe9ecc1e408fad39f3ca00
parentb6a2227b39282cd4a556105f5c8640bbaa7957e6 (diff)
downloadchromium_src-3ed84729d876d6bc22b2da8ffc8a2cd609a5004a.zip
chromium_src-3ed84729d876d6bc22b2da8ffc8a2cd609a5004a.tar.gz
chromium_src-3ed84729d876d6bc22b2da8ffc8a2cd609a5004a.tar.bz2
Revert 232376 "Revert 232342 "New prefetch histograms to get an ..."
Didn't break bot, undoing revert. > Revert 232342 "New prefetch histograms to get an idea of how oft..." > > Broke the Linux Chromium OS ASAN Tests(3) bot. > > > New prefetch histograms to get an idea of how often prefetches happen, > > what their success rate is, how often they're canceled, how long > > they take to load, and how big they are. > > > > BUG=303816 > > > > Review URL: https://codereview.chromium.org/50493005 > > TBR=jkarlin@google.com > > Review URL: https://codereview.chromium.org/55993002 TBR=csharp@chromium.org Review URL: https://codereview.chromium.org/56243002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@232418 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--content/browser/loader/resource_loader.cc35
-rw-r--r--content/browser/loader/resource_loader.h12
-rw-r--r--net/url_request/url_request_http_job.cc4
-rw-r--r--tools/metrics/histograms/histograms.xml48
4 files changed, 99 insertions, 0 deletions
diff --git a/content/browser/loader/resource_loader.cc b/content/browser/loader/resource_loader.cc
index a995259..0a7047d 100644
--- a/content/browser/loader/resource_loader.cc
+++ b/content/browser/loader/resource_loader.cc
@@ -30,6 +30,7 @@
#include "net/base/load_flags.h"
#include "net/http/http_response_headers.h"
#include "net/ssl/client_cert_store.h"
+#include "net/url_request/url_request_status.h"
#include "webkit/browser/appcache/appcache_interceptor.h"
using base::TimeDelta;
@@ -630,6 +631,7 @@ void ResourceLoader::CompleteRead(int bytes_read) {
void ResourceLoader::ResponseCompleted() {
VLOG(1) << "ResponseCompleted: " << request_->url().spec();
+ RecordHistograms();
ResourceRequestInfoImpl* info = GetRequestInfo();
std::string security_info;
@@ -657,4 +659,37 @@ void ResourceLoader::CallDidFinishLoading() {
delegate_->DidFinishLoading(this);
}
+void ResourceLoader::RecordHistograms() {
+ ResourceRequestInfoImpl* info = GetRequestInfo();
+
+ if (info->GetResourceType() == ResourceType::PREFETCH) {
+ PrefetchStatus status = STATUS_UNDEFINED;
+ TimeDelta total_time = base::TimeTicks::Now() - request_->creation_time();
+
+ switch (request_->status().status()) {
+ case net::URLRequestStatus::SUCCESS:
+ if (request_->was_cached()) {
+ status = STATUS_SUCCESS_FROM_CACHE;
+ UMA_HISTOGRAM_TIMES("Net.Prefetch.TimeSpentPrefetchingFromCache",
+ total_time);
+ } else {
+ status = STATUS_SUCCESS_FROM_NETWORK;
+ UMA_HISTOGRAM_TIMES("Net.Prefetch.TimeSpentPrefetchingFromNetwork",
+ total_time);
+ }
+ break;
+ case net::URLRequestStatus::CANCELED:
+ status = STATUS_CANCELED;
+ UMA_HISTOGRAM_TIMES("Net.Prefetch.TimeBeforeCancel", total_time);
+ break;
+ case net::URLRequestStatus::IO_PENDING:
+ case net::URLRequestStatus::FAILED:
+ status = STATUS_UNDEFINED;
+ break;
+ }
+
+ UMA_HISTOGRAM_ENUMERATION("Net.Prefetch.Pattern", status, STATUS_MAX);
+ }
+}
+
} // namespace content
diff --git a/content/browser/loader/resource_loader.h b/content/browser/loader/resource_loader.h
index 8662cca..ca8b119 100644
--- a/content/browser/loader/resource_loader.h
+++ b/content/browser/loader/resource_loader.h
@@ -99,9 +99,21 @@ class CONTENT_EXPORT ResourceLoader : public net::URLRequest::Delegate,
void CompleteRead(int bytes_read);
void ResponseCompleted();
void CallDidFinishLoading();
+ void RecordHistograms();
bool is_deferred() const { return deferred_stage_ != DEFERRED_NONE; }
+ // Used for categorizing loading of prefetches for reporting in histograms.
+ // NOTE: This enumeration is used in histograms, so please do not add entries
+ // in the middle.
+ enum PrefetchStatus {
+ STATUS_UNDEFINED,
+ STATUS_SUCCESS_FROM_CACHE,
+ STATUS_SUCCESS_FROM_NETWORK,
+ STATUS_CANCELED,
+ STATUS_MAX,
+ };
+
enum DeferredStage {
DEFERRED_NONE,
DEFERRED_START,
diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc
index e6b39f6..564da62 100644
--- a/net/url_request/url_request_http_job.cc
+++ b/net/url_request/url_request_http_job.cc
@@ -1489,6 +1489,10 @@ void URLRequestHttpJob::RecordPerfHistograms(CompletionCause reason) {
}
}
+ if (request_info_.load_flags & LOAD_PREFETCH && !request_->was_cached())
+ UMA_HISTOGRAM_COUNTS("Net.Prefetch.PrefilterBytesReadFromNetwork",
+ prefilter_bytes_read());
+
start_time_ = base::TimeTicks();
}
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index 495308e..d66818d 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -8268,6 +8268,47 @@ other types of suffix sets.
</details>
</histogram>
+<histogram name="Net.Prefetch.Pattern" enum="PrefetchStatus">
+ <summary>
+ The completion status of prefetches that have finished loading.
+ </summary>
+ <details>
+ Measurement occurs at ResourceLoader::ResponseCompleted so requests canceled
+ before that point are not registered.
+
+ Note that &quot;success from cache&quot; means that the
+ UrlRequest::was_cached() was true, and &quot;success from network&quot;
+ means that was_cached() was false. Validated results are considered cached,
+ even though a conditional network request is made.
+ </details>
+</histogram>
+
+<histogram name="Net.Prefetch.PrefilterBytesReadFromNetwork" units="bytes">
+ <summary>
+ Number of bytes read from the network on behalf of prefetch requests. This
+ is prefilter, so before any decompression.
+ </summary>
+</histogram>
+
+<histogram name="Net.Prefetch.TimeBeforeCancel" units="milliseconds">
+ <summary>
+ Time spent on prefetch requests before the request was canceled.
+ </summary>
+</histogram>
+
+<histogram name="Net.Prefetch.TimeSpentPrefetchingFromCache"
+ units="milliseconds">
+ <summary>Time spent on prefetch requests when fetched from cache.</summary>
+</histogram>
+
+<histogram name="Net.Prefetch.TimeSpentPrefetchingFromNetwork"
+ units="milliseconds">
+ <summary>
+ Time spent on prefetch requests when fetched from the network, including
+ validation time.
+ </summary>
+</histogram>
+
<histogram name="Net.Priority_High_Latency" units="milliseconds">
<obsolete>
Replaced by Net.Priority_High_Latency_b.
@@ -26263,6 +26304,13 @@ other types of suffix sets.
<int value="1" label="The pre-connect triggered host was accessed"/>
</enum>
+<enum name="PrefetchStatus" type="int">
+ <int value="0" label="undefined"/>
+ <int value="1" label="success from cache"/>
+ <int value="2" label="success from network"/>
+ <int value="3" label="canceled in-flight"/>
+</enum>
+
<enum name="PrerenderFinalStatus" type="int">
<int value="0" label="USED"/>
<int value="1" label="TIMED_OUT"/>