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..e4cef7896b97ae4e40e037091ee2b67be7606e6a 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" |
@@ -108,19 +109,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 +135,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 +154,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 +167,21 @@ 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); |
+ UMA_HISTOGRAM_COUNTS_100("Precache.Fetch.PercentCompleted", |
Mark P
2015/06/26 17:03:37
Why not UMA_HISTOGRAM_PERCENTAGE?
twifkak
2015/06/26 17:48:57
Because I didn't know any better.
|
+ percent_completed); |
+ UMA_HISTOGRAM_COUNTS("Precache.Fetch.ResponseBytes", total_response_bytes_); |
Mark P
2015/06/26 17:03:37
This maxs out at 1,000,000. Is that enough range
twifkak
2015/06/26 17:48:57
Eek, no. Fixed.
|
} |
void PrecacheFetcher::Start() { |
@@ -167,6 +198,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 +262,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(); |
} |