Chromium Code Reviews| 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(); |
| } |