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

Side by Side Diff: net/url_request/url_request_file_job.cc

Issue 227943003: Add experiment to measure time to hash extension content as we read it (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 // For loading files, we make use of overlapped i/o to ensure that reading from 5 // For loading files, we make use of overlapped i/o to ensure that reading from
6 // the filesystem (e.g., a network filesystem) does not block the calling 6 // the filesystem (e.g., a network filesystem) does not block the calling
7 // thread. An alternative approach would be to use a background thread or pool 7 // thread. An alternative approach would be to use a background thread or pool
8 // of threads, but it seems better to leverage the operating system's ability 8 // of threads, but it seems better to leverage the operating system's ability
9 // to do background file reads for us. 9 // to do background file reads for us.
10 // 10 //
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 if (remaining_bytes_ < dest_size) 92 if (remaining_bytes_ < dest_size)
93 dest_size = static_cast<int>(remaining_bytes_); 93 dest_size = static_cast<int>(remaining_bytes_);
94 94
95 // If we should copy zero bytes because |remaining_bytes_| is zero, short 95 // If we should copy zero bytes because |remaining_bytes_| is zero, short
96 // circuit here. 96 // circuit here.
97 if (!dest_size) { 97 if (!dest_size) {
98 *bytes_read = 0; 98 *bytes_read = 0;
99 return true; 99 return true;
100 } 100 }
101 101
102 int rv = stream_->Read(dest, dest_size, 102 int rv = stream_->Read(dest,
103 dest_size,
103 base::Bind(&URLRequestFileJob::DidRead, 104 base::Bind(&URLRequestFileJob::DidRead,
104 weak_ptr_factory_.GetWeakPtr())); 105 weak_ptr_factory_.GetWeakPtr(),
106 base::Unretained(dest)));
rvargas (doing something else) 2014/04/08 16:53:45 This cannot be unretained because the stream is al
asargent_no_longer_on_chrome 2014/04/09 20:59:59 Ok, I guess I was confused by both the code flow a
rvargas (doing something else) 2014/04/09 23:48:50 yeah, the comment definitely can be improved.
105 if (rv >= 0) { 107 if (rv >= 0) {
106 // Data is immediately available. 108 // Data is immediately available.
107 *bytes_read = rv; 109 *bytes_read = rv;
108 remaining_bytes_ -= rv; 110 remaining_bytes_ -= rv;
109 DCHECK_GE(remaining_bytes_, 0); 111 DCHECK_GE(remaining_bytes_, 0);
110 return true; 112 return true;
111 } 113 }
112 114
113 // Otherwise, a read error occured. We may just need to wait... 115 // Otherwise, a read error occured. We may just need to wait...
114 if (rv == ERR_IO_PENDING) { 116 if (rv == ERR_IO_PENDING) {
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 // because we need to do multipart encoding here. 187 // because we need to do multipart encoding here.
186 // TODO(hclam): decide whether we want to support multiple range 188 // TODO(hclam): decide whether we want to support multiple range
187 // requests. 189 // requests.
188 NotifyDone(URLRequestStatus(URLRequestStatus::FAILED, 190 NotifyDone(URLRequestStatus(URLRequestStatus::FAILED,
189 ERR_REQUEST_RANGE_NOT_SATISFIABLE)); 191 ERR_REQUEST_RANGE_NOT_SATISFIABLE));
190 } 192 }
191 } 193 }
192 } 194 }
193 } 195 }
194 196
197 void URLRequestFileJob::OnSeekComplete(int64 result) {}
rvargas (doing something else) 2014/04/08 16:53:45 nit: use { } and an empty line between the methods
asargent_no_longer_on_chrome 2014/04/09 20:59:59 Done. (Note that 'git cl format' does {} without
198 void URLRequestFileJob::OnReadComplete(net::IOBuffer* buf, int result) {}
199
195 URLRequestFileJob::~URLRequestFileJob() { 200 URLRequestFileJob::~URLRequestFileJob() {
196 } 201 }
197 202
198 void URLRequestFileJob::FetchMetaInfo(const base::FilePath& file_path, 203 void URLRequestFileJob::FetchMetaInfo(const base::FilePath& file_path,
199 FileMetaInfo* meta_info) { 204 FileMetaInfo* meta_info) {
200 base::File::Info file_info; 205 base::File::Info file_info;
201 meta_info->file_exists = base::GetFileInfo(file_path, &file_info); 206 meta_info->file_exists = base::GetFileInfo(file_path, &file_info);
202 if (meta_info->file_exists) { 207 if (meta_info->file_exists) {
203 meta_info->file_size = file_info.size; 208 meta_info->file_size = file_info.size;
204 meta_info->is_directory = file_info.is_directory; 209 meta_info->is_directory = file_info.is_directory;
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 } 271 }
267 } else { 272 } else {
268 // We didn't need to call stream_->Seek() at all, so we pass to DidSeek() 273 // We didn't need to call stream_->Seek() at all, so we pass to DidSeek()
269 // the value that would mean seek success. This way we skip the code 274 // the value that would mean seek success. This way we skip the code
270 // handling seek failure. 275 // handling seek failure.
271 DidSeek(byte_range_.first_byte_position()); 276 DidSeek(byte_range_.first_byte_position());
272 } 277 }
273 } 278 }
274 279
275 void URLRequestFileJob::DidSeek(int64 result) { 280 void URLRequestFileJob::DidSeek(int64 result) {
281 OnSeekComplete(result);
276 if (result != byte_range_.first_byte_position()) { 282 if (result != byte_range_.first_byte_position()) {
277 NotifyDone(URLRequestStatus(URLRequestStatus::FAILED, 283 NotifyDone(URLRequestStatus(URLRequestStatus::FAILED,
278 ERR_REQUEST_RANGE_NOT_SATISFIABLE)); 284 ERR_REQUEST_RANGE_NOT_SATISFIABLE));
279 return; 285 return;
280 } 286 }
281 287
282 set_expected_content_size(remaining_bytes_); 288 set_expected_content_size(remaining_bytes_);
283 NotifyHeadersComplete(); 289 NotifyHeadersComplete();
284 } 290 }
285 291
286 void URLRequestFileJob::DidRead(int result) { 292 void URLRequestFileJob::DidRead(net::IOBuffer* buf, int result) {
293 OnReadComplete(buf, result);
287 if (result > 0) { 294 if (result > 0) {
288 SetStatus(URLRequestStatus()); // Clear the IO_PENDING status 295 SetStatus(URLRequestStatus()); // Clear the IO_PENDING status
289 } else if (result == 0) { 296 } else if (result == 0) {
290 NotifyDone(URLRequestStatus()); 297 NotifyDone(URLRequestStatus());
291 } else { 298 } else {
292 NotifyDone(URLRequestStatus(URLRequestStatus::FAILED, result)); 299 NotifyDone(URLRequestStatus(URLRequestStatus::FAILED, result));
293 } 300 }
294 301
295 remaining_bytes_ -= result; 302 remaining_bytes_ -= result;
296 DCHECK_GE(remaining_bytes_, 0); 303 DCHECK_GE(remaining_bytes_, 0);
297 304
298 NotifyReadComplete(result); 305 NotifyReadComplete(result);
299 } 306 }
300 307
301 } // namespace net 308 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698