OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/android/offline_pages/prerendering_loader.h" | 5 #include "chrome/browser/android/offline_pages/prerendering_loader.h" |
6 | 6 |
7 #include "base/location.h" | 7 #include "base/location.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/metrics/histogram_macros.h" | 9 #include "base/metrics/histogram_macros.h" |
10 #include "base/threading/thread_task_runner_handle.h" | 10 #include "base/threading/thread_task_runner_handle.h" |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
81 load_start_time_ = base::TimeTicks::Now(); | 81 load_start_time_ = base::TimeTicks::Now(); |
82 } | 82 } |
83 | 83 |
84 void PrerenderingLoader::AddLoadingSignal(const char* signal_name) { | 84 void PrerenderingLoader::AddLoadingSignal(const char* signal_name) { |
85 base::TimeTicks current_time = base::TimeTicks::Now(); | 85 base::TimeTicks current_time = base::TimeTicks::Now(); |
86 base::TimeDelta delay_so_far = current_time - load_start_time_; | 86 base::TimeDelta delay_so_far = current_time - load_start_time_; |
87 double delay = delay_so_far.InMilliseconds(); | 87 double delay = delay_so_far.InMilliseconds(); |
88 signal_data_.SetDouble(signal_name, delay); | 88 signal_data_.SetDouble(signal_name, delay); |
89 } | 89 } |
90 | 90 |
| 91 void PrerenderingLoader::AddResourceSignal(const ResourceDataType type, |
| 92 int64_t started_count, |
| 93 int64_t completed_count) { |
| 94 double percentage = 100 * static_cast<double>(completed_count) / |
| 95 static_cast<double>(started_count); |
| 96 // TODO(petewil): Use actual signal type instead of hardcoding name to image. |
| 97 signal_data_.SetDouble("ImagePercentage", percentage); |
| 98 signal_data_.SetDouble("StartedImages", started_count); |
| 99 signal_data_.SetDouble("CompletedImages", completed_count); |
| 100 } |
| 101 |
91 bool PrerenderingLoader::LoadPage(const GURL& url, | 102 bool PrerenderingLoader::LoadPage(const GURL& url, |
92 const LoadPageCallback& load_done_callback, | 103 const LoadPageCallback& load_done_callback, |
93 const ProgressCallback& progress_callback) { | 104 const ProgressCallback& progress_callback) { |
94 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 105 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
95 if (!IsIdle()) { | 106 if (!IsIdle()) { |
96 DVLOG(1) | 107 DVLOG(1) |
97 << "WARNING: Existing request in progress or waiting for StopLoading()"; | 108 << "WARNING: Existing request in progress or waiting for StopLoading()"; |
98 return false; | 109 return false; |
99 } | 110 } |
100 | 111 |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
192 // Add this signal to signal_data_. | 203 // Add this signal to signal_data_. |
193 AddLoadingSignal("Snapshotting"); | 204 AddLoadingSignal("Snapshotting"); |
194 | 205 |
195 HandleLoadEvent(); | 206 HandleLoadEvent(); |
196 } | 207 } |
197 | 208 |
198 bool PrerenderingLoader::IsLowbarMet() { | 209 bool PrerenderingLoader::IsLowbarMet() { |
199 return is_lowbar_met_; | 210 return is_lowbar_met_; |
200 } | 211 } |
201 | 212 |
| 213 void PrerenderingLoader::ObserveResourceTracking(const ResourceDataType type, |
| 214 int64_t started_count, |
| 215 int64_t completed_count) { |
| 216 // Add the signal to extra data, and use for tracking. |
| 217 if (type == ResourceDataType::IMAGE) |
| 218 AddResourceSignal(type, started_count, completed_count); |
| 219 } |
| 220 |
202 void PrerenderingLoader::HandleLoadEvent() { | 221 void PrerenderingLoader::HandleLoadEvent() { |
203 // If still loading, check if the load succeeded or not, then update | 222 // If still loading, check if the load succeeded or not, then update |
204 // the internal state (LOADED for success or IDLE for failure) and post | 223 // the internal state (LOADED for success or IDLE for failure) and post |
205 // callback. | 224 // callback. |
206 // Note: it is possible to receive a load event (e.g., if timeout-based) | 225 // Note: it is possible to receive a load event (e.g., if timeout-based) |
207 // after the request has completed via another path (e.g., canceled) so | 226 // after the request has completed via another path (e.g., canceled) so |
208 // the Loader may be idle at this point. | 227 // the Loader may be idle at this point. |
209 | 228 |
210 if (IsIdle() || IsLoaded()) | 229 if (IsIdle() || IsLoaded()) |
211 return; | 230 return; |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
277 if (adapter_->IsActive()) { | 296 if (adapter_->IsActive()) { |
278 adapter_->DestroyActive(); | 297 adapter_->DestroyActive(); |
279 } | 298 } |
280 snapshot_controller_.reset(nullptr); | 299 snapshot_controller_.reset(nullptr); |
281 session_contents_.reset(nullptr); | 300 session_contents_.reset(nullptr); |
282 state_ = State::IDLE; | 301 state_ = State::IDLE; |
283 is_lowbar_met_ = false; | 302 is_lowbar_met_ = false; |
284 } | 303 } |
285 | 304 |
286 } // namespace offline_pages | 305 } // namespace offline_pages |
OLD | NEW |