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

Unified Diff: components/precache/core/precache_fetcher.cc

Issue 1212773002: Add prefetch UMA metrics. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: s/respective //. Created 5 years, 6 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: components/precache/core/precache_fetcher.cc
diff --git a/components/precache/core/precache_fetcher.cc b/components/precache/core/precache_fetcher.cc
index 062cc75e6838405a529b36ae530cffa48f89935f..2fc20fcb7d13844b5b3bbbc13b0c7e92937e2828 100644
--- a/components/precache/core/precache_fetcher.cc
+++ b/components/precache/core/precache_fetcher.cc
@@ -12,6 +12,7 @@
#include "base/command_line.h"
#include "base/compiler_specific.h"
#include "base/containers/hash_tables.h"
+#include "base/metrics/histogram_macros.h"
#include "components/precache/core/precache_switches.h"
#include "components/precache/core/proto/precache.pb.h"
#include "net/base/escape.h"
@@ -27,6 +28,10 @@ namespace precache {
namespace {
+// The 99%ile number of bytes we expect to receive during prefetch, and the max
bengr 2015/06/30 19:26:19 99%ile -> 99th percentile and the max -> which wi
twifkak 2015/06/30 20:23:51 Done.
+// for the histogram.
+const int kMaxResponseBytes = 100 * 1024 * 1024;
+
GURL GetConfigURL() {
const base::CommandLine& command_line =
*base::CommandLine::ForCurrentProcess();
@@ -108,19 +113,25 @@ class PrecacheFetcher::Fetcher : public net::URLFetcherDelegate {
Fetcher(net::URLRequestContextGetter* request_context, const GURL& url,
const base::Callback<void(const URLFetcher&)>& callback);
~Fetcher() override {}
+ void OnURLFetchDownloadProgress(const URLFetcher* source,
+ int64 current,
+ int64 total) override;
void OnURLFetchComplete(const URLFetcher* source) override;
+ int response_bytes() { return response_bytes_; }
private:
const base::Callback<void(const URLFetcher&)> callback_;
scoped_ptr<URLFetcher> url_fetcher_;
+ int response_bytes_;
DISALLOW_COPY_AND_ASSIGN(Fetcher);
};
PrecacheFetcher::Fetcher::Fetcher(
- net::URLRequestContextGetter* request_context, const GURL& url,
+ net::URLRequestContextGetter* request_context,
+ const GURL& url,
const base::Callback<void(const URLFetcher&)>& callback)
- : callback_(callback) {
+ : callback_(callback), response_bytes_(0) {
url_fetcher_ = URLFetcher::Create(url, URLFetcher::GET, this);
url_fetcher_->SetRequestContext(request_context);
url_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES |
@@ -128,6 +139,13 @@ PrecacheFetcher::Fetcher::Fetcher(
url_fetcher_->Start();
}
+void PrecacheFetcher::Fetcher::OnURLFetchDownloadProgress(
+ const URLFetcher* source,
+ int64 current,
+ int64 total) {
+ response_bytes_ = current;
+}
+
void PrecacheFetcher::Fetcher::OnURLFetchComplete(const URLFetcher* source) {
callback_.Run(*source);
}
@@ -140,7 +158,9 @@ PrecacheFetcher::PrecacheFetcher(
: starting_hosts_(starting_hosts),
request_context_(request_context),
manifest_url_prefix_(manifest_url_prefix),
- precache_delegate_(precache_delegate) {
+ precache_delegate_(precache_delegate),
+ total_response_bytes_(0),
+ num_manifest_urls_to_fetch_(0) {
DCHECK(request_context_.get()); // Request context must be non-NULL.
DCHECK(precache_delegate_); // Precache delegate must be non-NULL.
@@ -151,6 +171,22 @@ PrecacheFetcher::PrecacheFetcher(
}
PrecacheFetcher::~PrecacheFetcher() {
+ // Number of manifests for which we have downloaded all resources.
+ int manifests_completed =
+ num_manifest_urls_to_fetch_ - manifest_urls_to_fetch_.size();
+
+ // If there are resource URLs left to fetch, the last manifest is not yet
+ // completed.
+ if (!resource_urls_to_fetch_.empty())
+ --manifests_completed;
+
+ int percent_completed =
+ manifests_completed == 0 ? 0 : (static_cast<double>(manifests_completed) /
+ num_manifest_urls_to_fetch_ * 100);
bengr 2015/06/30 19:26:19 Can num_manifest_urls_to_fetch_ be 0?
twifkak 2015/06/30 20:23:51 Yes, but if num_manifests_urls_to_fetch_ is 0, so
bengr 2015/07/06 17:31:08 DCHECK(num_manifest_urls_to_fetch_ >= manifests_co
twifkak 2015/07/07 00:26:28 OK, added a different DCHECK, but changed the cond
+ UMA_HISTOGRAM_PERCENTAGE("Precache.Fetch.PercentCompleted",
+ percent_completed);
+ UMA_HISTOGRAM_CUSTOM_COUNTS("Precache.Fetch.ResponseBytes",
+ total_response_bytes_, 1, kMaxResponseBytes, 50);
}
void PrecacheFetcher::Start() {
@@ -167,6 +203,8 @@ void PrecacheFetcher::Start() {
}
void PrecacheFetcher::StartNextFetch() {
+ total_response_bytes_ += fetcher_->response_bytes();
+
if (!resource_urls_to_fetch_.empty()) {
// Fetch the next resource URL.
fetcher_.reset(
@@ -229,6 +267,7 @@ void PrecacheFetcher::OnConfigFetchComplete(const URLFetcher& source) {
for (const std::string& manifest_url : unique_manifest_urls)
manifest_urls_to_fetch_.push_back(GURL(manifest_url));
+ num_manifest_urls_to_fetch_ = manifest_urls_to_fetch_.size();
StartNextFetch();
}

Powered by Google App Engine
This is Rietveld 408576698