OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "components/page_load_metrics/browser/metrics_web_contents_observer.h" | 5 #include "components/page_load_metrics/browser/metrics_web_contents_observer.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/location.h" | 9 #include "base/location.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 timing_.IsEmpty()) { | 121 timing_.IsEmpty()) { |
122 RecordInternalError(ERR_NO_IPCS_RECEIVED); | 122 RecordInternalError(ERR_NO_IPCS_RECEIVED); |
123 } | 123 } |
124 for (const auto& observer : observers_) { | 124 for (const auto& observer : observers_) { |
125 observer->OnComplete(timing_, info); | 125 observer->OnComplete(timing_, info); |
126 } | 126 } |
127 } | 127 } |
128 | 128 |
129 void PageLoadTracker::WebContentsHidden() { | 129 void PageLoadTracker::WebContentsHidden() { |
130 // Only log the first time we background in a given page load. | 130 // Only log the first time we background in a given page load. |
131 if (started_in_foreground_ && background_time_.is_null()) | 131 if (background_time_.is_null()) |
132 background_time_ = base::TimeTicks::Now(); | 132 background_time_ = base::TimeTicks::Now(); |
133 } | 133 } |
134 | 134 |
135 void PageLoadTracker::WebContentsShown() { | 135 void PageLoadTracker::WebContentsShown() { |
136 // Only log the first time we foreground in a given page load. | 136 // Only log the first time we foreground in a given page load. |
137 // Don't log foreground time if we started foregrounded. | 137 if (foreground_time_.is_null()) |
138 if (!started_in_foreground_ && foreground_time_.is_null()) | |
139 foreground_time_ = base::TimeTicks::Now(); | 138 foreground_time_ = base::TimeTicks::Now(); |
140 } | 139 } |
141 | 140 |
142 void PageLoadTracker::Commit(content::NavigationHandle* navigation_handle) { | 141 void PageLoadTracker::Commit(content::NavigationHandle* navigation_handle) { |
143 // TODO(bmcquade): To improve accuracy, consider adding commit time to | 142 // TODO(bmcquade): To improve accuracy, consider adding commit time to |
144 // NavigationHandle. Taking a timestamp here should be close enough for now. | 143 // NavigationHandle. Taking a timestamp here should be close enough for now. |
145 commit_time_ = base::TimeTicks::Now(); | 144 commit_time_ = base::TimeTicks::Now(); |
146 committed_url_ = navigation_handle->GetURL(); | 145 committed_url_ = navigation_handle->GetURL(); |
147 for (const auto& observer : observers_) { | 146 for (const auto& observer : observers_) { |
148 observer->OnCommit(navigation_handle); | 147 observer->OnCommit(navigation_handle); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
188 void PageLoadTracker::AddObserver( | 187 void PageLoadTracker::AddObserver( |
189 scoped_ptr<PageLoadMetricsObserver> observer) { | 188 scoped_ptr<PageLoadMetricsObserver> observer) { |
190 observers_.push_back(std::move(observer)); | 189 observers_.push_back(std::move(observer)); |
191 } | 190 } |
192 | 191 |
193 PageLoadExtraInfo PageLoadTracker::GetPageLoadMetricsInfo() { | 192 PageLoadExtraInfo PageLoadTracker::GetPageLoadMetricsInfo() { |
194 base::TimeDelta first_background_time; | 193 base::TimeDelta first_background_time; |
195 base::TimeDelta first_foreground_time; | 194 base::TimeDelta first_foreground_time; |
196 base::TimeDelta time_to_abort; | 195 base::TimeDelta time_to_abort; |
197 base::TimeDelta time_to_commit; | 196 base::TimeDelta time_to_commit; |
198 if (!background_time_.is_null() && started_in_foreground_) | 197 if (!background_time_.is_null()) |
199 first_background_time = background_time_ - navigation_start_; | 198 first_background_time = background_time_ - navigation_start_; |
200 if (!foreground_time_.is_null() && !started_in_foreground_) | 199 if (!foreground_time_.is_null()) |
201 first_foreground_time = foreground_time_ - navigation_start_; | 200 first_foreground_time = foreground_time_ - navigation_start_; |
202 if (abort_type_ != ABORT_NONE) { | 201 if (abort_type_ != ABORT_NONE) { |
203 DCHECK_GT(abort_time_, navigation_start_); | 202 DCHECK_GT(abort_time_, navigation_start_); |
204 time_to_abort = abort_time_ - navigation_start_; | 203 time_to_abort = abort_time_ - navigation_start_; |
205 } else { | 204 } else { |
206 DCHECK(abort_time_.is_null()); | 205 DCHECK(abort_time_.is_null()); |
207 } | 206 } |
208 if (!committed_url_.is_empty()) { | 207 if (!committed_url_.is_empty()) { |
209 DCHECK_GT(commit_time_, navigation_start_); | 208 DCHECK_GT(commit_time_, navigation_start_); |
210 time_to_commit = commit_time_ - navigation_start_; | 209 time_to_commit = commit_time_ - navigation_start_; |
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
490 | 489 |
491 if (!committed_load_->UpdateTiming(timing)) { | 490 if (!committed_load_->UpdateTiming(timing)) { |
492 // If the page load tracker cannot update its timing, something is wrong | 491 // If the page load tracker cannot update its timing, something is wrong |
493 // with the IPC (it's from another load, or it's invalid in some other way). | 492 // with the IPC (it's from another load, or it's invalid in some other way). |
494 // We expect this to be a rare occurrence. | 493 // We expect this to be a rare occurrence. |
495 RecordInternalError(ERR_BAD_TIMING_IPC); | 494 RecordInternalError(ERR_BAD_TIMING_IPC); |
496 } | 495 } |
497 } | 496 } |
498 | 497 |
499 } // namespace page_load_metrics | 498 } // namespace page_load_metrics |
OLD | NEW |