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

Side by Side Diff: chrome/browser/predictors/resource_prefetcher.cc

Issue 2654913004: predictors: Add prefetcher histograms for speculative prefetch. (Closed)
Patch Set: Fix types. Created 3 years, 10 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/predictors/resource_prefetcher.h" 5 #include "chrome/browser/predictors/resource_prefetcher.h"
6 6
7 #include <iterator> 7 #include <iterator>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/metrics/histogram_macros.h"
10 #include "base/trace_event/trace_event.h" 11 #include "base/trace_event/trace_event.h"
11 #include "content/public/browser/browser_thread.h" 12 #include "content/public/browser/browser_thread.h"
12 #include "net/base/io_buffer.h" 13 #include "net/base/io_buffer.h"
13 #include "net/base/load_flags.h" 14 #include "net/base/load_flags.h"
14 #include "net/base/request_priority.h" 15 #include "net/base/request_priority.h"
15 #include "net/url_request/url_request_context.h" 16 #include "net/url_request/url_request_context.h"
16 #include "url/origin.h" 17 #include "url/origin.h"
17 18
18 namespace { 19 namespace {
19 20
20 // The size of the buffer used to read the resource. 21 // The size of the buffer used to read the resource.
21 static const size_t kResourceBufferSizeBytes = 50000; 22 static const size_t kResourceBufferSizeBytes = 50000;
22 23
23 } // namespace 24 } // namespace
24 25
25 namespace predictors { 26 namespace predictors {
26 27
27 ResourcePrefetcher::ResourcePrefetcher( 28 ResourcePrefetcher::ResourcePrefetcher(
28 Delegate* delegate, 29 Delegate* delegate,
29 const ResourcePrefetchPredictorConfig& config, 30 const ResourcePrefetchPredictorConfig& config,
30 const GURL& main_frame_url, 31 const GURL& main_frame_url,
31 const std::vector<GURL>& urls) 32 const std::vector<GURL>& urls)
32 : state_(INITIALIZED), 33 : state_(INITIALIZED),
33 delegate_(delegate), 34 delegate_(delegate),
34 config_(config), 35 config_(config),
35 main_frame_url_(main_frame_url) { 36 main_frame_url_(main_frame_url),
37 prefetched_count_(0),
38 prefetched_bytes_(0) {
36 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); 39 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
37 40
38 std::copy(urls.begin(), urls.end(), std::back_inserter(request_queue_)); 41 std::copy(urls.begin(), urls.end(), std::back_inserter(request_queue_));
39 } 42 }
40 43
41 ResourcePrefetcher::~ResourcePrefetcher() {} 44 ResourcePrefetcher::~ResourcePrefetcher() {}
42 45
43 void ResourcePrefetcher::Start() { 46 void ResourcePrefetcher::Start() {
44 TRACE_EVENT_ASYNC_BEGIN0("browser", "ResourcePrefetcher::Prefetch", this); 47 TRACE_EVENT_ASYNC_BEGIN0("browser", "ResourcePrefetcher::Prefetch", this);
45 DCHECK(thread_checker_.CalledOnValidThread()); 48 DCHECK(thread_checker_.CalledOnValidThread());
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 request_queue_.erase(request_it); 95 request_queue_.erase(request_it);
93 } 96 }
94 } 97 }
95 } 98 }
96 99
97 // If the inflight_requests_ is empty, we can't launch any more. Finish. 100 // If the inflight_requests_ is empty, we can't launch any more. Finish.
98 if (inflight_requests_.empty()) { 101 if (inflight_requests_.empty()) {
99 CHECK(host_inflight_counts_.empty()); 102 CHECK(host_inflight_counts_.empty());
100 CHECK(request_queue_.empty() || state_ == STOPPED); 103 CHECK(request_queue_.empty() || state_ == STOPPED);
101 104
105 UMA_HISTOGRAM_COUNTS_100(
106 internal::kResourcePrefetchPredictorPrefetchedCountHistogram,
107 prefetched_count_);
108 UMA_HISTOGRAM_COUNTS_10000(
109 internal::kResourcePrefetchPredictorPrefetchedSizeHistogram,
110 prefetched_bytes_ / 1024);
111
102 state_ = FINISHED; 112 state_ = FINISHED;
103 delegate_->ResourcePrefetcherFinished(this); 113 delegate_->ResourcePrefetcherFinished(this);
104 } 114 }
105 } 115 }
106 116
107 void ResourcePrefetcher::SendRequest(const GURL& url) { 117 void ResourcePrefetcher::SendRequest(const GURL& url) {
108 std::unique_ptr<net::URLRequest> url_request = 118 std::unique_ptr<net::URLRequest> url_request =
109 delegate_->GetURLRequestContext()->CreateRequest(url, net::LOW, this); 119 delegate_->GetURLRequestContext()->CreateRequest(url, net::LOW, this);
110 host_inflight_counts_[url.host()] += 1; 120 host_inflight_counts_[url.host()] += 1;
111 121
(...skipping 30 matching lines...) Expand all
142 152
143 void ResourcePrefetcher::ReadFullResponse(net::URLRequest* request) { 153 void ResourcePrefetcher::ReadFullResponse(net::URLRequest* request) {
144 int bytes_read = 0; 154 int bytes_read = 0;
145 do { 155 do {
146 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer( 156 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(
147 kResourceBufferSizeBytes)); 157 kResourceBufferSizeBytes));
148 bytes_read = request->Read(buffer.get(), kResourceBufferSizeBytes); 158 bytes_read = request->Read(buffer.get(), kResourceBufferSizeBytes);
149 if (bytes_read == net::ERR_IO_PENDING) { 159 if (bytes_read == net::ERR_IO_PENDING) {
150 return; 160 return;
151 } else if (bytes_read <= 0) { 161 } else if (bytes_read <= 0) {
162 if (bytes_read == 0)
163 RequestComplete(request);
152 FinishRequest(request); 164 FinishRequest(request);
153 return; 165 return;
154 } 166 }
155 167
156 } while (bytes_read > 0); 168 } while (bytes_read > 0);
157 } 169 }
158 170
171 void ResourcePrefetcher::RequestComplete(net::URLRequest* request) {
172 ++prefetched_count_;
173 prefetched_bytes_ += request->GetTotalReceivedBytes();
174
175 UMA_HISTOGRAM_ENUMERATION(
176 internal::kResourcePrefetchPredictorCachePatternHistogram,
177 request->response_info().cache_entry_status,
178 net::HttpResponseInfo::CacheEntryStatus::ENTRY_MAX);
179 }
180
159 void ResourcePrefetcher::OnReceivedRedirect( 181 void ResourcePrefetcher::OnReceivedRedirect(
160 net::URLRequest* request, 182 net::URLRequest* request,
161 const net::RedirectInfo& redirect_info, 183 const net::RedirectInfo& redirect_info,
162 bool* defer_redirect) { 184 bool* defer_redirect) {
163 FinishRequest(request); 185 FinishRequest(request);
164 } 186 }
165 187
166 void ResourcePrefetcher::OnAuthRequired(net::URLRequest* request, 188 void ResourcePrefetcher::OnAuthRequired(net::URLRequest* request,
167 net::AuthChallengeInfo* auth_info) { 189 net::AuthChallengeInfo* auth_info) {
168 FinishRequest(request); 190 FinishRequest(request);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 if (bytes_read <= 0) { 222 if (bytes_read <= 0) {
201 FinishRequest(request); 223 FinishRequest(request);
202 return; 224 return;
203 } 225 }
204 226
205 if (bytes_read > 0) 227 if (bytes_read > 0)
206 ReadFullResponse(request); 228 ReadFullResponse(request);
207 } 229 }
208 230
209 } // namespace predictors 231 } // namespace predictors
OLDNEW
« no previous file with comments | « chrome/browser/predictors/resource_prefetcher.h ('k') | chrome/browser/predictors/resource_prefetcher_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698