| Index: chrome/browser/predictors/resource_prefetcher.cc
|
| diff --git a/chrome/browser/predictors/resource_prefetcher.cc b/chrome/browser/predictors/resource_prefetcher.cc
|
| index a953216bd6d7d45124669b5740e9980b2f24c0cc..cc1d46616c556a1b415b8653e90a315283dd5634 100644
|
| --- a/chrome/browser/predictors/resource_prefetcher.cc
|
| +++ b/chrome/browser/predictors/resource_prefetcher.cc
|
| @@ -4,6 +4,7 @@
|
|
|
| #include "chrome/browser/predictors/resource_prefetcher.h"
|
|
|
| +#include <algorithm>
|
| #include <iterator>
|
| #include <utility>
|
|
|
| @@ -25,6 +26,27 @@ static const size_t kResourceBufferSizeBytes = 50000;
|
|
|
| namespace predictors {
|
|
|
| +ResourcePrefetcher::PrefetchedRequestStats::PrefetchedRequestStats(
|
| + const GURL& resource_url,
|
| + bool was_cached,
|
| + size_t total_received_bytes)
|
| + : resource_url(resource_url),
|
| + was_cached(was_cached),
|
| + total_received_bytes(total_received_bytes) {}
|
| +
|
| +ResourcePrefetcher::PrefetchedRequestStats::~PrefetchedRequestStats() {}
|
| +
|
| +ResourcePrefetcher::PrefetcherStats::PrefetcherStats(const GURL& url)
|
| + : url(url) {}
|
| +
|
| +ResourcePrefetcher::PrefetcherStats::~PrefetcherStats() {}
|
| +
|
| +ResourcePrefetcher::PrefetcherStats::PrefetcherStats(
|
| + const PrefetcherStats& other)
|
| + : url(other.url),
|
| + start_time(other.start_time),
|
| + requests_stats(other.requests_stats) {}
|
| +
|
| ResourcePrefetcher::ResourcePrefetcher(
|
| Delegate* delegate,
|
| const ResourcePrefetchPredictorConfig& config,
|
| @@ -35,7 +57,8 @@ ResourcePrefetcher::ResourcePrefetcher(
|
| config_(config),
|
| main_frame_url_(main_frame_url),
|
| prefetched_count_(0),
|
| - prefetched_bytes_(0) {
|
| + prefetched_bytes_(0),
|
| + stats_(base::MakeUnique<PrefetcherStats>(main_frame_url)) {
|
| DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
|
|
|
| std::copy(urls.begin(), urls.end(), std::back_inserter(request_queue_));
|
| @@ -50,6 +73,7 @@ void ResourcePrefetcher::Start() {
|
| CHECK_EQ(state_, INITIALIZED);
|
| state_ = RUNNING;
|
|
|
| + stats_->start_time = base::TimeTicks::Now();
|
| TryToLaunchPrefetchRequests();
|
| }
|
|
|
| @@ -110,7 +134,7 @@ void ResourcePrefetcher::TryToLaunchPrefetchRequests() {
|
| prefetched_bytes_ / 1024);
|
|
|
| state_ = FINISHED;
|
| - delegate_->ResourcePrefetcherFinished(this);
|
| + delegate_->ResourcePrefetcherFinished(this, std::move(stats_));
|
| }
|
| }
|
|
|
| @@ -164,18 +188,21 @@ void ResourcePrefetcher::ReadFullResponse(net::URLRequest* request) {
|
| FinishRequest(request);
|
| return;
|
| }
|
| -
|
| } while (bytes_read > 0);
|
| }
|
|
|
| void ResourcePrefetcher::RequestComplete(net::URLRequest* request) {
|
| ++prefetched_count_;
|
| - prefetched_bytes_ += request->GetTotalReceivedBytes();
|
| + int64_t total_received_bytes = request->GetTotalReceivedBytes();
|
| + prefetched_bytes_ += total_received_bytes;
|
|
|
| UMA_HISTOGRAM_ENUMERATION(
|
| internal::kResourcePrefetchPredictorCachePatternHistogram,
|
| request->response_info().cache_entry_status,
|
| net::HttpResponseInfo::CacheEntryStatus::ENTRY_MAX);
|
| +
|
| + stats_->requests_stats.emplace_back(request->url(), request->was_cached(),
|
| + total_received_bytes);
|
| }
|
|
|
| void ResourcePrefetcher::OnReceivedRedirect(
|
|
|