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

Unified Diff: chrome/renderer/page_load_metrics/metrics_render_frame_observer.cc

Issue 2737563007: Add support for tracking loading behavior of child frames. (Closed)
Patch Set: improve test comments Created 3 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: chrome/renderer/page_load_metrics/metrics_render_frame_observer.cc
diff --git a/chrome/renderer/page_load_metrics/metrics_render_frame_observer.cc b/chrome/renderer/page_load_metrics/metrics_render_frame_observer.cc
index 006eda7b705f3eafe5aa4a37ca654a8c37077421..9465960608042e8f7c87b45e99c3fc4fd1cf7008 100644
--- a/chrome/renderer/page_load_metrics/metrics_render_frame_observer.cc
+++ b/chrome/renderer/page_load_metrics/metrics_render_frame_observer.cc
@@ -38,7 +38,9 @@ MetricsRenderFrameObserver::MetricsRenderFrameObserver(
MetricsRenderFrameObserver::~MetricsRenderFrameObserver() {}
void MetricsRenderFrameObserver::DidChangePerformanceTiming() {
- SendMetrics();
+ // Only track timing metrics for main frames.
Charlie Harrison 2017/03/09 16:21:29 Can we ensure this in unit tests?
Bryan McQuade 2017/03/09 17:36:32 good idea, done
+ if (IsMainFrame())
+ SendMetrics();
}
void MetricsRenderFrameObserver::DidObserveLoadingBehavior(
@@ -47,6 +49,10 @@ void MetricsRenderFrameObserver::DidObserveLoadingBehavior(
page_timing_metrics_sender_->DidObserveLoadingBehavior(behavior);
}
+void MetricsRenderFrameObserver::FrameDetached() {
+ page_timing_metrics_sender_.reset();
+}
+
void MetricsRenderFrameObserver::DidCommitProvisionalLoad(
bool is_new_navigation,
bool is_same_page_navigation) {
@@ -66,8 +72,12 @@ void MetricsRenderFrameObserver::DidCommitProvisionalLoad(
// non-null, we will send metrics for the current page at some later time, as
// those metrics become available.
if (ShouldSendMetrics()) {
- PageLoadTiming timing(GetTiming());
- DCHECK(!timing.navigation_start.is_null());
+ PageLoadTiming timing;
+ if (IsMainFrame()) {
+ // Only populate PageLoadTiming for the main frame.
+ timing = GetTiming();
+ DCHECK(!timing.navigation_start.is_null());
+ }
page_timing_metrics_sender_.reset(
new PageTimingMetricsSender(this, routing_id(), CreateTimer(), timing));
}
@@ -86,10 +96,6 @@ bool MetricsRenderFrameObserver::ShouldSendMetrics() const {
if (HasNoRenderFrame())
return false;
const blink::WebLocalFrame* frame = render_frame()->GetWebFrame();
- // We only track metrics for main frames.
- if (frame->parent())
- return false;
-
const blink::WebDocument& document = frame->document();
return RendererPageTrackDecider(&document, frame->dataSource()).ShouldTrack();
}
@@ -171,4 +177,8 @@ void MetricsRenderFrameObserver::OnDestruct() {
delete this;
}
+bool MetricsRenderFrameObserver::IsMainFrame() const {
+ return render_frame()->IsMainFrame();
+}
+
} // namespace page_load_metrics

Powered by Google App Engine
This is Rietveld 408576698