Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "chrome/browser/page_load_metrics/observers/previews_page_load_metrics_ observer.h" | |
| 6 | |
| 7 #include <string> | |
| 8 | |
| 9 #include "base/optional.h" | |
| 10 #include "base/time/time.h" | |
| 11 #include "chrome/browser/page_load_metrics/page_load_metrics_util.h" | |
| 12 #include "chrome/common/features.h" | |
| 13 #include "chrome/common/page_load_metrics/page_load_timing.h" | |
| 14 #include "content/public/browser/navigation_handle.h" | |
| 15 #include "content/public/browser/web_contents.h" | |
| 16 | |
| 17 #if BUILDFLAG(ANDROID_JAVA_UI) | |
| 18 #include "chrome/browser/android/offline_pages/offline_page_tab_helper.h" | |
| 19 #endif // BUILDFLAG(ANDROID_JAVA_UI) | |
| 20 | |
| 21 namespace previews { | |
| 22 | |
| 23 namespace internal { | |
| 24 | |
| 25 const char kHistogramOfflinePreviewsPrefix[] = | |
|
Charlie Harrison
2016/08/19 20:00:22
Performing string appends at runtime for these met
RyanSturm
2016/08/19 20:21:27
Done. In the future, we'll add other previews, so
| |
| 26 "PageLoad.Clients.Previews.OfflinePages."; | |
| 27 const char kHistogramDOMContentLoadedEventFiredSuffix[] = | |
| 28 "DocumentTiming.NavigationToDOMContentLoadedEventFired"; | |
| 29 const char kHistogramFirstLayoutSuffix[] = | |
| 30 "DocumentTiming.NavigationToFirstLayout"; | |
| 31 const char kHistogramLoadEventFiredSuffix[] = | |
| 32 "DocumentTiming.NavigationToLoadEventFired"; | |
| 33 const char kHistogramFirstContentfulPaintSuffix[] = | |
| 34 "PaintTiming.NavigationToFirstContentfulPaint"; | |
| 35 const char kHistogramFirstImagePaintSuffix[] = | |
| 36 "PaintTiming.NavigationToFirstImagePaint"; | |
| 37 const char kHistogramFirstPaintSuffix[] = "PaintTiming.NavigationToFirstPaint"; | |
| 38 const char kHistogramFirstTextPaintSuffix[] = | |
| 39 "PaintTiming.NavigationToFirstTextPaint"; | |
| 40 const char kHistogramParseStartSuffix[] = "ParseTiming.NavigationToParseStart"; | |
| 41 | |
| 42 } // namespace internal | |
| 43 | |
| 44 PreviewsPageLoadMetricsObserver::PreviewsPageLoadMetricsObserver() | |
| 45 : is_offline_preview_(false) {} | |
| 46 | |
| 47 PreviewsPageLoadMetricsObserver::~PreviewsPageLoadMetricsObserver() {} | |
| 48 | |
| 49 void PreviewsPageLoadMetricsObserver::OnCommit( | |
| 50 content::NavigationHandle* navigation_handle) { | |
| 51 is_offline_preview_ = IsOfflinePreview(navigation_handle->GetWebContents()); | |
| 52 } | |
| 53 | |
| 54 void PreviewsPageLoadMetricsObserver::OnDomContentLoadedEventStart( | |
| 55 const page_load_metrics::PageLoadTiming& timing, | |
| 56 const page_load_metrics::PageLoadExtraInfo& info) { | |
| 57 if (!is_offline_preview_ || | |
| 58 !WasStartedInForegroundOptionalEventInForeground( | |
| 59 timing.dom_content_loaded_event_start, info)) { | |
| 60 return; | |
| 61 } | |
| 62 PAGE_LOAD_HISTOGRAM( | |
| 63 std::string(internal::kHistogramOfflinePreviewsPrefix) | |
| 64 .append(internal::kHistogramDOMContentLoadedEventFiredSuffix), | |
| 65 timing.dom_content_loaded_event_start.value()); | |
| 66 } | |
| 67 | |
| 68 void PreviewsPageLoadMetricsObserver::OnLoadEventStart( | |
| 69 const page_load_metrics::PageLoadTiming& timing, | |
| 70 const page_load_metrics::PageLoadExtraInfo& info) { | |
| 71 if (!is_offline_preview_ || | |
| 72 !WasStartedInForegroundOptionalEventInForeground( | |
| 73 timing.dom_content_loaded_event_start, info)) { | |
| 74 return; | |
| 75 } | |
| 76 PAGE_LOAD_HISTOGRAM(std::string(internal::kHistogramOfflinePreviewsPrefix) | |
| 77 .append(internal::kHistogramLoadEventFiredSuffix), | |
| 78 timing.load_event_start.value()); | |
| 79 } | |
| 80 | |
| 81 void PreviewsPageLoadMetricsObserver::OnFirstLayout( | |
| 82 const page_load_metrics::PageLoadTiming& timing, | |
| 83 const page_load_metrics::PageLoadExtraInfo& info) { | |
| 84 if (!is_offline_preview_ || | |
| 85 !WasStartedInForegroundOptionalEventInForeground( | |
| 86 timing.dom_content_loaded_event_start, info)) { | |
| 87 return; | |
| 88 } | |
| 89 PAGE_LOAD_HISTOGRAM(std::string(internal::kHistogramOfflinePreviewsPrefix) | |
| 90 .append(internal::kHistogramFirstLayoutSuffix), | |
| 91 timing.first_layout.value()); | |
| 92 } | |
| 93 | |
| 94 void PreviewsPageLoadMetricsObserver::OnFirstPaint( | |
| 95 const page_load_metrics::PageLoadTiming& timing, | |
| 96 const page_load_metrics::PageLoadExtraInfo& info) { | |
| 97 if (!is_offline_preview_ || | |
| 98 !WasStartedInForegroundOptionalEventInForeground( | |
| 99 timing.dom_content_loaded_event_start, info)) { | |
| 100 return; | |
| 101 } | |
| 102 PAGE_LOAD_HISTOGRAM(std::string(internal::kHistogramOfflinePreviewsPrefix) | |
| 103 .append(internal::kHistogramFirstPaintSuffix), | |
| 104 timing.first_paint.value()); | |
| 105 } | |
| 106 | |
| 107 void PreviewsPageLoadMetricsObserver::OnFirstTextPaint( | |
| 108 const page_load_metrics::PageLoadTiming& timing, | |
| 109 const page_load_metrics::PageLoadExtraInfo& info) { | |
| 110 if (!is_offline_preview_ || | |
| 111 !WasStartedInForegroundOptionalEventInForeground( | |
| 112 timing.dom_content_loaded_event_start, info)) { | |
| 113 return; | |
| 114 } | |
| 115 PAGE_LOAD_HISTOGRAM(std::string(internal::kHistogramOfflinePreviewsPrefix) | |
| 116 .append(internal::kHistogramFirstTextPaintSuffix), | |
| 117 timing.first_text_paint.value()); | |
| 118 } | |
| 119 | |
| 120 void PreviewsPageLoadMetricsObserver::OnFirstImagePaint( | |
| 121 const page_load_metrics::PageLoadTiming& timing, | |
| 122 const page_load_metrics::PageLoadExtraInfo& info) { | |
| 123 if (!is_offline_preview_ || | |
| 124 !WasStartedInForegroundOptionalEventInForeground( | |
| 125 timing.dom_content_loaded_event_start, info)) { | |
| 126 return; | |
| 127 } | |
| 128 PAGE_LOAD_HISTOGRAM(std::string(internal::kHistogramOfflinePreviewsPrefix) | |
| 129 .append(internal::kHistogramFirstImagePaintSuffix), | |
| 130 timing.first_image_paint.value()); | |
| 131 } | |
| 132 | |
| 133 void PreviewsPageLoadMetricsObserver::OnFirstContentfulPaint( | |
| 134 const page_load_metrics::PageLoadTiming& timing, | |
| 135 const page_load_metrics::PageLoadExtraInfo& info) { | |
| 136 if (!is_offline_preview_ || | |
| 137 !WasStartedInForegroundOptionalEventInForeground( | |
| 138 timing.dom_content_loaded_event_start, info)) { | |
| 139 return; | |
| 140 } | |
| 141 PAGE_LOAD_HISTOGRAM( | |
| 142 std::string(internal::kHistogramOfflinePreviewsPrefix) | |
| 143 .append(internal::kHistogramFirstContentfulPaintSuffix), | |
| 144 timing.first_contentful_paint.value()); | |
| 145 } | |
| 146 | |
| 147 void PreviewsPageLoadMetricsObserver::OnParseStart( | |
| 148 const page_load_metrics::PageLoadTiming& timing, | |
| 149 const page_load_metrics::PageLoadExtraInfo& info) { | |
| 150 if (!is_offline_preview_ || | |
| 151 !WasStartedInForegroundOptionalEventInForeground( | |
| 152 timing.dom_content_loaded_event_start, info)) { | |
| 153 return; | |
| 154 } | |
| 155 PAGE_LOAD_HISTOGRAM(std::string(internal::kHistogramOfflinePreviewsPrefix) | |
| 156 .append(internal::kHistogramParseStartSuffix), | |
| 157 timing.parse_start.value()); | |
| 158 } | |
| 159 | |
| 160 bool PreviewsPageLoadMetricsObserver::IsOfflinePreview( | |
| 161 content::WebContents* web_contents) const { | |
| 162 #if BUILDFLAG(ANDROID_JAVA_UI) | |
| 163 offline_pages::OfflinePageTabHelper* tab_helper = | |
| 164 offline_pages::OfflinePageTabHelper::FromWebContents(web_contents); | |
| 165 return tab_helper && tab_helper->is_offline_preview(); | |
| 166 #else | |
| 167 return false; | |
| 168 #endif // BUILDFLAG(ANDROID_JAVA_UI) | |
| 169 } | |
| 170 | |
| 171 } // namespace previews | |
| OLD | NEW |