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 365e64360349be42c935ce1dd3e07832083130ad..354e50651d0189f1aa531936d96a5389cf84731f 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 |
@@ -12,6 +12,7 @@ |
#include "components/page_load_metrics/browser/page_load_metrics_util.h" |
#include "components/rappor/rappor_service.h" |
#include "components/rappor/rappor_utils.h" |
+#include "ui/base/page_transition_types.h" |
namespace { |
@@ -38,6 +39,29 @@ uint64_t RapporHistogramBucketIndex(base::TimeDelta time) { |
return 5; |
} |
+// TODO(bmcquade): If other observers want to log histograms based on load type, |
+// promote this enum to page_load_metrics_observer.h. |
+enum PageLoadType { |
+ LOAD_TYPE_NONE = 0, |
+ LOAD_TYPE_RELOAD, |
+ LOAD_TYPE_FORWARD_BACK, |
+ LOAD_TYPE_NEW_NAVIGATION |
+}; |
+ |
+PageLoadType GetPageLoadType(ui::PageTransition transition) { |
+ if (ui::PageTransitionCoreTypeIs(transition, ui::PAGE_TRANSITION_RELOAD)) { |
+ return LOAD_TYPE_RELOAD; |
+ } |
+ if (transition & ui::PAGE_TRANSITION_FORWARD_BACK) { |
Bryan McQuade
2016/06/27 11:46:44
regarding your comment about incorrectly accountin
|
+ return LOAD_TYPE_FORWARD_BACK; |
+ } |
+ if (ui::PageTransitionIsNewNavigation(transition)) { |
+ return LOAD_TYPE_NEW_NAVIGATION; |
+ } |
+ NOTREACHED() << "Received PageTransition with no matching PageLoadType."; |
+ return LOAD_TYPE_NONE; |
+} |
+ |
} // namespace |
namespace internal { |
@@ -153,6 +177,19 @@ const char |
"PageLoad.ParseTiming.ParseBlockedOnScriptLoadFromDocumentWrite." |
"Background"; |
+const char kHistogramLoadTypeFirstContentfulPaintReload[] = |
+ "PageLoad.PaintTiming.NavigationToFirstContentfulPaint.LoadType." |
+ "Reload"; |
+const char kHistogramLoadTypeFirstContentfulPaintReloadByGesture[] = |
+ "PageLoad.PaintTiming.NavigationToFirstContentfulPaint.LoadType." |
+ "Reload.UserGesture"; |
+const char kHistogramLoadTypeFirstContentfulPaintForwardBack[] = |
+ "PageLoad.PaintTiming.NavigationToFirstContentfulPaint.LoadType." |
+ "ForwardBackNavigation"; |
+const char kHistogramLoadTypeFirstContentfulPaintNewNavigation[] = |
+ "PageLoad.PaintTiming.NavigationToFirstContentfulPaint.LoadType." |
+ "NewNavigation"; |
+ |
const char kHistogramFirstContentfulPaintHigh[] = |
"PageLoad.Timing2.NavigationToFirstContentfulPaint.HighResolutionClock"; |
const char kHistogramFirstContentfulPaintLow[] = |
@@ -180,10 +217,18 @@ const char kRapporMetricsNameCoarseTiming[] = |
} // namespace internal |
-CorePageLoadMetricsObserver::CorePageLoadMetricsObserver() {} |
+CorePageLoadMetricsObserver::CorePageLoadMetricsObserver() |
+ : transition_(ui::PAGE_TRANSITION_LINK), |
+ initiated_by_user_gesture_(false) {} |
CorePageLoadMetricsObserver::~CorePageLoadMetricsObserver() {} |
+void CorePageLoadMetricsObserver::OnCommit( |
+ content::NavigationHandle* navigation_handle) { |
+ transition_ = navigation_handle->GetPageTransition(); |
+ initiated_by_user_gesture_ = navigation_handle->HasUserGesture(); |
+} |
+ |
void CorePageLoadMetricsObserver::OnDomContentLoadedEventStart( |
const page_load_metrics::PageLoadTiming& timing, |
const page_load_metrics::PageLoadExtraInfo& info) { |
@@ -267,6 +312,32 @@ void CorePageLoadMetricsObserver::OnFirstContentfulPaint( |
PAGE_LOAD_HISTOGRAM( |
internal::kHistogramParseStartToFirstContentfulPaintImmediate, |
timing.first_contentful_paint - timing.parse_start); |
+ |
+ switch (GetPageLoadType(transition_)) { |
+ case LOAD_TYPE_RELOAD: |
+ PAGE_LOAD_HISTOGRAM( |
+ internal::kHistogramLoadTypeFirstContentfulPaintReload, |
+ timing.first_contentful_paint); |
+ if (initiated_by_user_gesture_) { |
+ PAGE_LOAD_HISTOGRAM( |
+ internal::kHistogramLoadTypeFirstContentfulPaintReloadByGesture, |
+ timing.first_contentful_paint); |
+ } |
+ break; |
+ case LOAD_TYPE_FORWARD_BACK: |
+ PAGE_LOAD_HISTOGRAM( |
+ internal::kHistogramLoadTypeFirstContentfulPaintForwardBack, |
+ timing.first_contentful_paint); |
+ break; |
+ case LOAD_TYPE_NEW_NAVIGATION: |
+ PAGE_LOAD_HISTOGRAM( |
+ internal::kHistogramLoadTypeFirstContentfulPaintNewNavigation, |
+ timing.first_contentful_paint); |
+ break; |
+ case LOAD_TYPE_NONE: |
+ NOTREACHED(); |
+ break; |
+ } |
} else { |
PAGE_LOAD_HISTOGRAM( |
internal::kBackgroundHistogramFirstContentfulPaintImmediate, |