| 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 #ifndef CHROME_BROWSER_PAGE_LOAD_METRICS_METRICS_WEB_CONTENTS_OBSERVER_H_ | 5 #ifndef CHROME_BROWSER_PAGE_LOAD_METRICS_METRICS_WEB_CONTENTS_OBSERVER_H_ |
| 6 #define CHROME_BROWSER_PAGE_LOAD_METRICS_METRICS_WEB_CONTENTS_OBSERVER_H_ | 6 #define CHROME_BROWSER_PAGE_LOAD_METRICS_METRICS_WEB_CONTENTS_OBSERVER_H_ |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 183 bool is_certainly_browser_timestamp); | 183 bool is_certainly_browser_timestamp); |
| 184 void UpdateAbort(UserAbortType abort_type, | 184 void UpdateAbort(UserAbortType abort_type, |
| 185 base::TimeTicks timestamp, | 185 base::TimeTicks timestamp, |
| 186 bool is_certainly_browser_timestamp); | 186 bool is_certainly_browser_timestamp); |
| 187 | 187 |
| 188 // This method returns true if this page load has been aborted with type of | 188 // This method returns true if this page load has been aborted with type of |
| 189 // ABORT_OTHER, and the |abort_cause_time| is within a sufficiently close | 189 // ABORT_OTHER, and the |abort_cause_time| is within a sufficiently close |
| 190 // delta to when it was aborted. Note that only provisional loads can be | 190 // delta to when it was aborted. Note that only provisional loads can be |
| 191 // aborted with ABORT_OTHER. While this heuristic is coarse, it works better | 191 // aborted with ABORT_OTHER. While this heuristic is coarse, it works better |
| 192 // and is simpler than other feasible methods. See https://goo.gl/WKRG98. | 192 // and is simpler than other feasible methods. See https://goo.gl/WKRG98. |
| 193 bool IsLikelyProvisionalAbort(base::TimeTicks abort_cause_time); | 193 bool IsLikelyProvisionalAbort(base::TimeTicks abort_cause_time) const; |
| 194 | 194 |
| 195 bool MatchesOriginalNavigation(content::NavigationHandle* navigation_handle); | 195 bool MatchesOriginalNavigation(content::NavigationHandle* navigation_handle); |
| 196 | 196 |
| 197 // Only valid to call post-commit. | 197 // Only valid to call post-commit. |
| 198 const GURL& committed_url() const { | 198 const GURL& committed_url() const { |
| 199 DCHECK(!commit_time_.is_null()); | 199 DCHECK(!commit_time_.is_null()); |
| 200 return url_; | 200 return url_; |
| 201 } | 201 } |
| 202 | 202 |
| 203 base::TimeTicks navigation_start() const { return navigation_start_; } | 203 base::TimeTicks navigation_start() const { return navigation_start_; } |
| 204 | 204 |
| 205 PageLoadExtraInfo ComputePageLoadExtraInfo(); | 205 PageLoadExtraInfo ComputePageLoadExtraInfo(); |
| 206 | 206 |
| 207 ui::PageTransition page_transition() const { return page_transition_; } |
| 208 |
| 207 private: | 209 private: |
| 208 // This function converts a TimeTicks value taken in the browser process | 210 // This function converts a TimeTicks value taken in the browser process |
| 209 // to navigation_start_ if: | 211 // to navigation_start_ if: |
| 210 // - base::TimeTicks is not comparable across processes because the clock | 212 // - base::TimeTicks is not comparable across processes because the clock |
| 211 // is not system wide monotonic. | 213 // is not system wide monotonic. |
| 212 // - *event_time < navigation_start_ | 214 // - *event_time < navigation_start_ |
| 213 void ClampBrowserTimestampIfInterProcessTimeTickSkew( | 215 void ClampBrowserTimestampIfInterProcessTimeTickSkew( |
| 214 base::TimeTicks* event_time); | 216 base::TimeTicks* event_time); |
| 215 | 217 |
| 216 void UpdateAbortInternal(UserAbortType abort_type, | 218 void UpdateAbortInternal(UserAbortType abort_type, |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 252 // We record separate metrics for events that occur after a background, | 254 // We record separate metrics for events that occur after a background, |
| 253 // because metrics like layout/paint are delayed artificially | 255 // because metrics like layout/paint are delayed artificially |
| 254 // when they occur in the background. | 256 // when they occur in the background. |
| 255 base::TimeTicks background_time_; | 257 base::TimeTicks background_time_; |
| 256 base::TimeTicks foreground_time_; | 258 base::TimeTicks foreground_time_; |
| 257 bool started_in_foreground_; | 259 bool started_in_foreground_; |
| 258 | 260 |
| 259 PageLoadTiming timing_; | 261 PageLoadTiming timing_; |
| 260 PageLoadMetadata metadata_; | 262 PageLoadMetadata metadata_; |
| 261 | 263 |
| 264 ui::PageTransition page_transition_; |
| 265 |
| 262 // This is a subtle member. If a provisional load A gets aborted by | 266 // This is a subtle member. If a provisional load A gets aborted by |
| 263 // provisional load B, which gets aborted by C that eventually commits, then | 267 // provisional load B, which gets aborted by C that eventually commits, then |
| 264 // there exists an abort chain of length 2, starting at A's navigation_start. | 268 // there exists an abort chain of length 2, starting at A's navigation_start. |
| 265 // This is useful because it allows histograming abort chain lengths based on | 269 // This is useful because it allows histograming abort chain lengths based on |
| 266 // what the last load's transition type is. i.e. holding down F-5 to spam | 270 // what the last load's transition type is. i.e. holding down F-5 to spam |
| 267 // reload will produce a long chain with the RELOAD transition. | 271 // reload will produce a long chain with the RELOAD transition. |
| 268 const int aborted_chain_size_; | 272 const int aborted_chain_size_; |
| 269 | 273 |
| 270 // This member counts consecutive provisional aborts that share a url. It will | 274 // This member counts consecutive provisional aborts that share a url. It will |
| 271 // always be less than or equal to |aborted_chain_size_|. | 275 // always be less than or equal to |aborted_chain_size_|. |
| (...skipping 20 matching lines...) Expand all Loading... |
| 292 content::WebContents* web_contents, | 296 content::WebContents* web_contents, |
| 293 std::unique_ptr<PageLoadMetricsEmbedderInterface> embedder_interface); | 297 std::unique_ptr<PageLoadMetricsEmbedderInterface> embedder_interface); |
| 294 MetricsWebContentsObserver( | 298 MetricsWebContentsObserver( |
| 295 content::WebContents* web_contents, | 299 content::WebContents* web_contents, |
| 296 std::unique_ptr<PageLoadMetricsEmbedderInterface> embedder_interface); | 300 std::unique_ptr<PageLoadMetricsEmbedderInterface> embedder_interface); |
| 297 ~MetricsWebContentsObserver() override; | 301 ~MetricsWebContentsObserver() override; |
| 298 | 302 |
| 299 // content::WebContentsObserver implementation: | 303 // content::WebContentsObserver implementation: |
| 300 bool OnMessageReceived(const IPC::Message& message, | 304 bool OnMessageReceived(const IPC::Message& message, |
| 301 content::RenderFrameHost* render_frame_host) override; | 305 content::RenderFrameHost* render_frame_host) override; |
| 302 void DidStartNavigation( | |
| 303 content::NavigationHandle* navigation_handle) override; | |
| 304 void DidFinishNavigation( | 306 void DidFinishNavigation( |
| 305 content::NavigationHandle* navigation_handle) override; | 307 content::NavigationHandle* navigation_handle) override; |
| 306 void DidRedirectNavigation( | 308 void DidRedirectNavigation( |
| 307 content::NavigationHandle* navigation_handle) override; | 309 content::NavigationHandle* navigation_handle) override; |
| 308 void NavigationStopped() override; | 310 void NavigationStopped() override; |
| 309 void OnInputEvent(const blink::WebInputEvent& event) override; | 311 void OnInputEvent(const blink::WebInputEvent& event) override; |
| 310 void WasShown() override; | 312 void WasShown() override; |
| 311 void WasHidden() override; | 313 void WasHidden() override; |
| 312 void RenderProcessGone(base::TerminationStatus status) override; | 314 void RenderProcessGone(base::TerminationStatus status) override; |
| 313 void RenderViewHostChanged(content::RenderViewHost* old_host, | 315 void RenderViewHostChanged(content::RenderViewHost* old_host, |
| 314 content::RenderViewHost* new_host) override; | 316 content::RenderViewHost* new_host) override; |
| 315 | 317 |
| 318 // This method is forwarded from the MetricsNavigationThrottle. |
| 319 void WillStartNavigationRequest(content::NavigationHandle* navigation_handle); |
| 320 |
| 316 // Flush any buffered metrics, as part of the metrics subsystem persisting | 321 // Flush any buffered metrics, as part of the metrics subsystem persisting |
| 317 // metrics as the application goes into the background. The application may be | 322 // metrics as the application goes into the background. The application may be |
| 318 // killed at any time after this method is invoked without further | 323 // killed at any time after this method is invoked without further |
| 319 // notification. | 324 // notification. |
| 320 void FlushMetricsOnAppEnterBackground(); | 325 void FlushMetricsOnAppEnterBackground(); |
| 321 | 326 |
| 322 // This getter function is required for testing. | 327 // This getter function is required for testing. |
| 323 const PageLoadExtraInfo GetPageLoadExtraInfoForCommittedLoad(); | 328 const PageLoadExtraInfo GetPageLoadExtraInfoForCommittedLoad(); |
| 324 | 329 |
| 325 private: | 330 private: |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 383 | 388 |
| 384 // Has the MWCO observed at least one navigation? | 389 // Has the MWCO observed at least one navigation? |
| 385 bool has_navigated_; | 390 bool has_navigated_; |
| 386 | 391 |
| 387 DISALLOW_COPY_AND_ASSIGN(MetricsWebContentsObserver); | 392 DISALLOW_COPY_AND_ASSIGN(MetricsWebContentsObserver); |
| 388 }; | 393 }; |
| 389 | 394 |
| 390 } // namespace page_load_metrics | 395 } // namespace page_load_metrics |
| 391 | 396 |
| 392 #endif // CHROME_BROWSER_PAGE_LOAD_METRICS_METRICS_WEB_CONTENTS_OBSERVER_H_ | 397 #endif // CHROME_BROWSER_PAGE_LOAD_METRICS_METRICS_WEB_CONTENTS_OBSERVER_H_ |
| OLD | NEW |