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

Side by Side Diff: content/browser/download/download_file_impl.cc

Issue 2823273004: Add new UMA stats for parallelizable download (Closed)
Patch Set: fix test Created 3 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
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 #include "content/browser/download/download_file_impl.h" 5 #include "content/browser/download/download_file_impl.h"
6 6
7 #include <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 base::WeakPtr<DownloadDestinationObserver> observer) 99 base::WeakPtr<DownloadDestinationObserver> observer)
100 : net_log_( 100 : net_log_(
101 net::NetLogWithSource::Make(download_item_net_log.net_log(), 101 net::NetLogWithSource::Make(download_item_net_log.net_log(),
102 net::NetLogSourceType::DOWNLOAD_FILE)), 102 net::NetLogSourceType::DOWNLOAD_FILE)),
103 file_(net_log_), 103 file_(net_log_),
104 save_info_(std::move(save_info)), 104 save_info_(std::move(save_info)),
105 default_download_directory_(default_download_directory), 105 default_download_directory_(default_download_directory),
106 potential_file_length_(kUnknownContentLength), 106 potential_file_length_(kUnknownContentLength),
107 bytes_seen_(0), 107 bytes_seen_(0),
108 num_active_streams_(0), 108 num_active_streams_(0),
109 record_stream_bandwidth_(true), 109 record_stream_bandwidth_(false),
110 bytes_seen_with_parallel_streams_(0), 110 bytes_seen_with_parallel_streams_(0),
111 bytes_seen_without_parallel_streams_(0), 111 bytes_seen_without_parallel_streams_(0),
112 observer_(observer), 112 observer_(observer),
113 weak_factory_(this) { 113 weak_factory_(this) {
114 source_streams_[save_info_->offset] = base::MakeUnique<SourceStream>( 114 source_streams_[save_info_->offset] = base::MakeUnique<SourceStream>(
115 save_info_->offset, save_info_->length, std::move(stream_reader)); 115 save_info_->offset, save_info_->length, std::move(stream_reader));
116 116
117 download_item_net_log.AddEvent( 117 download_item_net_log.AddEvent(
118 net::NetLogEventType::DOWNLOAD_FILE_CREATED, 118 net::NetLogEventType::DOWNLOAD_FILE_CREATED,
119 net_log_.source().ToEventParametersCallback()); 119 net_log_.source().ToEventParametersCallback());
120 net_log_.BeginEvent( 120 net_log_.BeginEvent(
121 net::NetLogEventType::DOWNLOAD_FILE_ACTIVE, 121 net::NetLogEventType::DOWNLOAD_FILE_ACTIVE,
122 download_item_net_log.source().ToEventParametersCallback()); 122 download_item_net_log.source().ToEventParametersCallback());
123 } 123 }
124 124
125 DownloadFileImpl::~DownloadFileImpl() { 125 DownloadFileImpl::~DownloadFileImpl() {
126 DCHECK_CURRENTLY_ON(BrowserThread::FILE); 126 DCHECK_CURRENTLY_ON(BrowserThread::FILE);
127 net_log_.EndEvent(net::NetLogEventType::DOWNLOAD_FILE_ACTIVE); 127 net_log_.EndEvent(net::NetLogEventType::DOWNLOAD_FILE_ACTIVE);
128 } 128 }
129 129
130 void DownloadFileImpl::Initialize( 130 void DownloadFileImpl::Initialize(
131 const InitializeCallback& initialize_callback, 131 const InitializeCallback& initialize_callback,
132 const CancelRequestCallback& cancel_request_callback, 132 const CancelRequestCallback& cancel_request_callback,
133 const DownloadItem::ReceivedSlices& received_slices) { 133 const DownloadItem::ReceivedSlices& received_slices,
134 bool is_parallelizable) {
134 DCHECK_CURRENTLY_ON(BrowserThread::FILE); 135 DCHECK_CURRENTLY_ON(BrowserThread::FILE);
135 136
136 update_timer_.reset(new base::RepeatingTimer()); 137 update_timer_.reset(new base::RepeatingTimer());
137 int64_t bytes_so_far = 0; 138 int64_t bytes_so_far = 0;
138 cancel_request_callback_ = cancel_request_callback; 139 cancel_request_callback_ = cancel_request_callback;
139 received_slices_ = received_slices; 140 received_slices_ = received_slices;
140 if (IsSparseFile()) { 141 if (IsSparseFile()) {
141 for (const auto& received_slice : received_slices_) { 142 for (const auto& received_slice : received_slices_) {
142 bytes_so_far += received_slice.received_bytes; 143 bytes_so_far += received_slice.received_bytes;
143 } 144 }
144 } else { 145 } else {
145 bytes_so_far = save_info_->offset; 146 bytes_so_far = save_info_->offset;
146 } 147 }
147 DownloadInterruptReason result = file_.Initialize( 148 DownloadInterruptReason result = file_.Initialize(
148 save_info_->file_path, default_download_directory_, 149 save_info_->file_path, default_download_directory_,
149 std::move(save_info_->file), bytes_so_far, 150 std::move(save_info_->file), bytes_so_far,
150 save_info_->hash_of_partial_file, std::move(save_info_->hash_state), 151 save_info_->hash_of_partial_file, std::move(save_info_->hash_state),
151 IsSparseFile()); 152 IsSparseFile());
152 if (result != DOWNLOAD_INTERRUPT_REASON_NONE) { 153 if (result != DOWNLOAD_INTERRUPT_REASON_NONE) {
153 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 154 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
154 base::Bind(initialize_callback, result)); 155 base::Bind(initialize_callback, result));
155 return; 156 return;
156 } 157 }
157 158
158 download_start_ = base::TimeTicks::Now(); 159 download_start_ = base::TimeTicks::Now();
159 last_update_time_ = download_start_; 160 last_update_time_ = download_start_;
161 record_stream_bandwidth_ = is_parallelizable;
160 162
161 // Primarily to make reset to zero in restart visible to owner. 163 // Primarily to make reset to zero in restart visible to owner.
162 SendUpdate(); 164 SendUpdate();
163 165
164 BrowserThread::PostTask( 166 BrowserThread::PostTask(
165 BrowserThread::UI, FROM_HERE, 167 BrowserThread::UI, FROM_HERE,
166 base::Bind(initialize_callback, DOWNLOAD_INTERRUPT_REASON_NONE)); 168 base::Bind(initialize_callback, DOWNLOAD_INTERRUPT_REASON_NONE));
167 169
168 // Initial pull from the straw from all source streams. 170 // Initial pull from the straw from all source streams.
169 for (auto& source_stream : source_streams_) 171 for (auto& source_stream : source_streams_)
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after
481 } 483 }
482 num_active_streams_--; 484 num_active_streams_--;
483 485
484 // Inform observers. 486 // Inform observers.
485 SendUpdate(); 487 SendUpdate();
486 488
487 // All the stream reader are completed, shut down file IO processing. 489 // All the stream reader are completed, shut down file IO processing.
488 if (IsDownloadCompleted()) { 490 if (IsDownloadCompleted()) {
489 RecordFileBandwidth(bytes_seen_, disk_writes_time_, 491 RecordFileBandwidth(bytes_seen_, disk_writes_time_,
490 base::TimeTicks::Now() - download_start_); 492 base::TimeTicks::Now() - download_start_);
491 if (IsSparseFile() && record_stream_bandwidth_) { 493 if (record_stream_bandwidth_) {
492 RecordParallelDownloadStats(bytes_seen_with_parallel_streams_, 494 RecordParallelizableDownloadStats(
493 download_time_with_parallel_streams_, 495 bytes_seen_with_parallel_streams_,
494 bytes_seen_without_parallel_streams_, 496 download_time_with_parallel_streams_,
495 download_time_without_parallel_streams_); 497 bytes_seen_without_parallel_streams_,
498 download_time_without_parallel_streams_, IsSparseFile());
496 } 499 }
497 weak_factory_.InvalidateWeakPtrs(); 500 weak_factory_.InvalidateWeakPtrs();
498 std::unique_ptr<crypto::SecureHash> hash_state = file_.Finish(); 501 std::unique_ptr<crypto::SecureHash> hash_state = file_.Finish();
499 update_timer_.reset(); 502 update_timer_.reset();
500 BrowserThread::PostTask( 503 BrowserThread::PostTask(
501 BrowserThread::UI, FROM_HERE, 504 BrowserThread::UI, FROM_HERE,
502 base::Bind(&DownloadDestinationObserver::DestinationCompleted, 505 base::Bind(&DownloadDestinationObserver::DestinationCompleted,
503 observer_, TotalBytesReceived(), 506 observer_, TotalBytesReceived(),
504 base::Passed(&hash_state))); 507 base::Passed(&hash_state)));
505 } 508 }
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
712 const base::FilePath& new_path, 715 const base::FilePath& new_path,
713 const RenameCompletionCallback& completion_callback) 716 const RenameCompletionCallback& completion_callback)
714 : option(option), 717 : option(option),
715 new_path(new_path), 718 new_path(new_path),
716 retries_left(kMaxRenameRetries), 719 retries_left(kMaxRenameRetries),
717 completion_callback(completion_callback) {} 720 completion_callback(completion_callback) {}
718 721
719 DownloadFileImpl::RenameParameters::~RenameParameters() {} 722 DownloadFileImpl::RenameParameters::~RenameParameters() {}
720 723
721 } // namespace content 724 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/download/download_file_impl.h ('k') | content/browser/download/download_file_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698