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/renderer/metrics_render_frame_observer.h" | 5 #include "components/page_load_metrics/renderer/metrics_render_frame_observer.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/memory/ptr_util.h" | 9 #include "base/memory/ptr_util.h" |
10 #include "base/time/time.h" | 10 #include "base/time/time.h" |
11 #include "base/timer/timer.h" | 11 #include "base/timer/timer.h" |
12 #include "components/page_load_metrics/renderer/page_timing_metrics_sender.h" | 12 #include "components/page_load_metrics/renderer/page_timing_metrics_sender.h" |
13 #include "content/public/renderer/render_frame.h" | 13 #include "content/public/renderer/render_frame.h" |
| 14 #include "services/shell/public/cpp/interface_provider.h" |
14 #include "third_party/WebKit/public/platform/WebURLResponse.h" | 15 #include "third_party/WebKit/public/platform/WebURLResponse.h" |
15 #include "third_party/WebKit/public/web/WebDataSource.h" | 16 #include "third_party/WebKit/public/web/WebDataSource.h" |
16 #include "third_party/WebKit/public/web/WebDocument.h" | 17 #include "third_party/WebKit/public/web/WebDocument.h" |
17 #include "third_party/WebKit/public/web/WebLocalFrame.h" | 18 #include "third_party/WebKit/public/web/WebLocalFrame.h" |
18 #include "third_party/WebKit/public/web/WebPerformance.h" | 19 #include "third_party/WebKit/public/web/WebPerformance.h" |
19 #include "url/gurl.h" | 20 #include "url/gurl.h" |
20 | 21 |
21 namespace page_load_metrics { | 22 namespace page_load_metrics { |
22 | 23 |
23 namespace { | 24 namespace { |
24 | 25 |
25 base::TimeDelta ClampDelta(double event, double start) { | 26 base::TimeDelta ClampDelta(double event, double start) { |
26 if (event - start < 0) | 27 if (event - start < 0) |
27 event = start; | 28 event = start; |
28 return base::Time::FromDoubleT(event) - base::Time::FromDoubleT(start); | 29 return base::Time::FromDoubleT(event) - base::Time::FromDoubleT(start); |
29 } | 30 } |
30 | 31 |
31 } // namespace | 32 } // namespace |
32 | 33 |
33 MetricsRenderFrameObserver::MetricsRenderFrameObserver( | 34 MetricsRenderFrameObserver::MetricsRenderFrameObserver( |
34 content::RenderFrame* render_frame) | 35 content::RenderFrame* render_frame) |
35 : content::RenderFrameObserver(render_frame) {} | 36 : content::RenderFrameObserver(render_frame) { |
| 37 render_frame->GetRemoteInterfaces()->GetInterface( |
| 38 mojo::GetProxy(&page_load_metrics_)); |
| 39 } |
| 40 |
| 41 MetricsRenderFrameObserver::MetricsRenderFrameObserver( |
| 42 content::RenderFrame* render_frame, |
| 43 page_load_metrics::mojom::PageLoadMetricsPtr page_load_metrics) |
| 44 : content::RenderFrameObserver(render_frame), |
| 45 page_load_metrics_(std::move(page_load_metrics)) {} |
36 | 46 |
37 MetricsRenderFrameObserver::~MetricsRenderFrameObserver() {} | 47 MetricsRenderFrameObserver::~MetricsRenderFrameObserver() {} |
38 | 48 |
39 void MetricsRenderFrameObserver::DidChangePerformanceTiming() { | 49 void MetricsRenderFrameObserver::DidChangePerformanceTiming() { |
40 SendMetrics(); | 50 SendMetrics(); |
41 } | 51 } |
42 | 52 |
43 void MetricsRenderFrameObserver::DidObserveLoadingBehavior( | 53 void MetricsRenderFrameObserver::DidObserveLoadingBehavior( |
44 blink::WebLoadingBehaviorFlag behavior) { | 54 blink::WebLoadingBehaviorFlag behavior) { |
45 if (page_timing_metrics_sender_) | 55 if (page_timing_metrics_sender_) |
(...skipping 14 matching lines...) Expand all Loading... |
60 // Make sure to release the sender for a previous navigation, if we have one. | 70 // Make sure to release the sender for a previous navigation, if we have one. |
61 page_timing_metrics_sender_.reset(); | 71 page_timing_metrics_sender_.reset(); |
62 | 72 |
63 // We only create a PageTimingMetricsSender if the page meets the criteria for | 73 // We only create a PageTimingMetricsSender if the page meets the criteria for |
64 // sending and recording metrics. Once page_timing_metrics_sender_ is | 74 // sending and recording metrics. Once page_timing_metrics_sender_ is |
65 // non-null, we will send metrics for the current page at some later time, as | 75 // non-null, we will send metrics for the current page at some later time, as |
66 // those metrics become available. | 76 // those metrics become available. |
67 if (ShouldSendMetrics()) { | 77 if (ShouldSendMetrics()) { |
68 PageLoadTiming timing(GetTiming()); | 78 PageLoadTiming timing(GetTiming()); |
69 DCHECK(!timing.navigation_start.is_null()); | 79 DCHECK(!timing.navigation_start.is_null()); |
70 page_timing_metrics_sender_.reset( | 80 page_timing_metrics_sender_.reset(new PageTimingMetricsSender( |
71 new PageTimingMetricsSender(this, routing_id(), CreateTimer(), timing)); | 81 page_load_metrics_.get(), CreateTimer(), timing)); |
72 } | 82 } |
73 } | 83 } |
74 | 84 |
75 void MetricsRenderFrameObserver::SendMetrics() { | 85 void MetricsRenderFrameObserver::SendMetrics() { |
76 if (!page_timing_metrics_sender_) | 86 if (!page_timing_metrics_sender_) |
77 return; | 87 return; |
78 if (HasNoRenderFrame()) | 88 if (HasNoRenderFrame()) |
79 return; | 89 return; |
80 PageLoadTiming timing(GetTiming()); | 90 PageLoadTiming timing(GetTiming()); |
81 page_timing_metrics_sender_->Send(timing); | 91 page_timing_metrics_sender_->Send(timing); |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
147 bool no_frame = !render_frame() || !render_frame()->GetWebFrame(); | 157 bool no_frame = !render_frame() || !render_frame()->GetWebFrame(); |
148 DCHECK(!no_frame); | 158 DCHECK(!no_frame); |
149 return no_frame; | 159 return no_frame; |
150 } | 160 } |
151 | 161 |
152 void MetricsRenderFrameObserver::OnDestruct() { | 162 void MetricsRenderFrameObserver::OnDestruct() { |
153 delete this; | 163 delete this; |
154 } | 164 } |
155 | 165 |
156 } // namespace page_load_metrics | 166 } // namespace page_load_metrics |
OLD | NEW |