Index: chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.cc |
diff --git a/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.cc |
index 35c6beeda021730506fd99fdc5a69f7f9fbfaad9..2a65a7524251454867214d5d5b2ed731d84f3b45 100644 |
--- a/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.cc |
+++ b/chrome/browser/page_load_metrics/observers/core_page_load_metrics_observer.cc |
@@ -326,6 +326,9 @@ void CorePageLoadMetricsObserver::OnFirstLayout( |
void CorePageLoadMetricsObserver::OnFirstPaint( |
const page_load_metrics::PageLoadTiming& timing, |
const page_load_metrics::PageLoadExtraInfo& info) { |
+ if (!first_paint_.is_null()) |
+ return; |
+ |
first_paint_ = |
info.navigation_start + timing.paint_timing.first_paint.value(); |
if (WasStartedInForegroundOptionalEventInForeground( |
@@ -684,6 +687,29 @@ void CorePageLoadMetricsObserver::OnLoadedResource( |
} |
} |
+void CorePageLoadMetricsObserver::OnSubFrameTimingUpdate( |
+ FrameTreeNodeId child_frame_id, |
+ base::TimeDelta child_navigation_start, |
+ const page_load_metrics::PageLoadTiming& child_timing, |
+ const page_load_metrics::PageLoadMetadata& child_metadata, |
+ const page_load_metrics::PageLoadExtraInfo& extra_info) { |
+ // TODO(bmcquade): factor core FP/FCP logic across all frames into |
+ // PageLoadTracker. This is just an initial implementation for demonstration |
+ // purposes. |
+ if (child_timing.paint_timing.first_paint && first_paint_.is_null()) { |
+ base::TimeDelta first_paint_since_main_frame_navigation_start = |
+ child_navigation_start + child_timing.paint_timing.first_paint.value(); |
+ first_paint_ = extra_info.navigation_start + |
+ first_paint_since_main_frame_navigation_start; |
+ |
+ if (WasStartedInForegroundOptionalEventInForeground( |
+ first_paint_since_main_frame_navigation_start, extra_info)) { |
+ PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstPaint, |
+ first_paint_since_main_frame_navigation_start); |
+ } |
+ } |
+} |
+ |
void CorePageLoadMetricsObserver::RecordTimingHistograms( |
const page_load_metrics::PageLoadTiming& timing, |
const page_load_metrics::PageLoadExtraInfo& info) { |