| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 #if !defined(OS_ANDROID) | 5 #if !defined(OS_ANDROID) |
| 6 | 6 |
| 7 #include "chrome/browser/metrics/first_web_contents_profiler.h" | 7 #include "chrome/browser/metrics/first_web_contents_profiler.h" |
| 8 | 8 |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 } | 34 } |
| 35 } | 35 } |
| 36 } | 36 } |
| 37 | 37 |
| 38 FirstWebContentsProfiler::FirstWebContentsProfiler( | 38 FirstWebContentsProfiler::FirstWebContentsProfiler( |
| 39 content::WebContents* web_contents) | 39 content::WebContents* web_contents) |
| 40 : content::WebContentsObserver(web_contents), | 40 : content::WebContentsObserver(web_contents), |
| 41 collected_paint_metric_(false), | 41 collected_paint_metric_(false), |
| 42 collected_load_metric_(false), | 42 collected_load_metric_(false), |
| 43 collected_main_navigation_start_metric_(false), | 43 collected_main_navigation_start_metric_(false), |
| 44 collected_main_navigation_finished_metric_(false), | 44 collected_main_navigation_finished_metric_(false) {} |
| 45 finished_(false) {} | |
| 46 | 45 |
| 47 void FirstWebContentsProfiler::DidFirstVisuallyNonEmptyPaint() { | 46 void FirstWebContentsProfiler::DidFirstVisuallyNonEmptyPaint() { |
| 48 if (collected_paint_metric_) | 47 if (collected_paint_metric_) |
| 49 return; | 48 return; |
| 50 if (startup_metric_utils::WasNonBrowserUIDisplayed()) { | 49 if (startup_metric_utils::WasNonBrowserUIDisplayed()) { |
| 51 FinishedCollectingMetrics(FinishReason::ABANDON_BLOCKING_UI); | 50 FinishedCollectingMetrics(FinishReason::ABANDON_BLOCKING_UI); |
| 52 return; | 51 return; |
| 53 } | 52 } |
| 54 | 53 |
| 55 collected_paint_metric_ = true; | 54 collected_paint_metric_ = true; |
| 56 const base::TimeTicks now = base::TimeTicks::Now(); | 55 startup_metric_utils::RecordFirstWebContentsNonEmptyPaint( |
| 57 // Record the old metric unconditionally. | 56 base::TimeTicks::Now()); |
| 58 startup_metric_utils::RecordDeprecatedFirstWebContentsNonEmptyPaint(now); | |
| 59 if (!finished_) | |
| 60 startup_metric_utils::RecordFirstWebContentsNonEmptyPaint(now); | |
| 61 | 57 |
| 62 metrics::TrackingSynchronizer::OnProfilingPhaseCompleted( | 58 metrics::TrackingSynchronizer::OnProfilingPhaseCompleted( |
| 63 metrics::ProfilerEventProto::EVENT_FIRST_NONEMPTY_PAINT); | 59 metrics::ProfilerEventProto::EVENT_FIRST_NONEMPTY_PAINT); |
| 64 | 60 |
| 65 if (IsFinishedCollectingMetrics()) | 61 if (IsFinishedCollectingMetrics()) |
| 66 FinishedCollectingMetrics(FinishReason::DONE); | 62 FinishedCollectingMetrics(FinishReason::DONE); |
| 67 } | 63 } |
| 68 | 64 |
| 69 void FirstWebContentsProfiler::DocumentOnLoadCompletedInMainFrame() { | 65 void FirstWebContentsProfiler::DocumentOnLoadCompletedInMainFrame() { |
| 70 if (collected_load_metric_) | 66 if (collected_load_metric_) |
| 71 return; | 67 return; |
| 72 if (startup_metric_utils::WasNonBrowserUIDisplayed()) { | 68 if (startup_metric_utils::WasNonBrowserUIDisplayed()) { |
| 73 FinishedCollectingMetrics(FinishReason::ABANDON_BLOCKING_UI); | 69 FinishedCollectingMetrics(FinishReason::ABANDON_BLOCKING_UI); |
| 74 return; | 70 return; |
| 75 } | 71 } |
| 76 | 72 |
| 77 collected_load_metric_ = true; | 73 collected_load_metric_ = true; |
| 78 const base::TimeTicks now = base::TimeTicks::Now(); | 74 startup_metric_utils::RecordFirstWebContentsMainFrameLoad( |
| 79 // Record the old metric unconditionally. | 75 base::TimeTicks::Now()); |
| 80 startup_metric_utils::RecordDeprecatedFirstWebContentsMainFrameLoad(now); | |
| 81 if (!finished_) | |
| 82 startup_metric_utils::RecordFirstWebContentsMainFrameLoad(now); | |
| 83 | 76 |
| 84 if (IsFinishedCollectingMetrics()) | 77 if (IsFinishedCollectingMetrics()) |
| 85 FinishedCollectingMetrics(FinishReason::DONE); | 78 FinishedCollectingMetrics(FinishReason::DONE); |
| 86 } | 79 } |
| 87 | 80 |
| 88 void FirstWebContentsProfiler::DidStartNavigation( | 81 void FirstWebContentsProfiler::DidStartNavigation( |
| 89 content::NavigationHandle* navigation_handle) { | 82 content::NavigationHandle* navigation_handle) { |
| 90 if (collected_main_navigation_start_metric_) | 83 if (collected_main_navigation_start_metric_) |
| 91 return; | 84 return; |
| 92 if (startup_metric_utils::WasNonBrowserUIDisplayed()) { | 85 if (startup_metric_utils::WasNonBrowserUIDisplayed()) { |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 147 void FirstWebContentsProfiler::WebContentsDestroyed() { | 140 void FirstWebContentsProfiler::WebContentsDestroyed() { |
| 148 FinishedCollectingMetrics(FinishReason::ABANDON_CONTENT_DESTROYED); | 141 FinishedCollectingMetrics(FinishReason::ABANDON_CONTENT_DESTROYED); |
| 149 } | 142 } |
| 150 | 143 |
| 151 bool FirstWebContentsProfiler::IsFinishedCollectingMetrics() { | 144 bool FirstWebContentsProfiler::IsFinishedCollectingMetrics() { |
| 152 return collected_paint_metric_ && collected_load_metric_; | 145 return collected_paint_metric_ && collected_load_metric_; |
| 153 } | 146 } |
| 154 | 147 |
| 155 void FirstWebContentsProfiler::FinishedCollectingMetrics( | 148 void FirstWebContentsProfiler::FinishedCollectingMetrics( |
| 156 FinishReason finish_reason) { | 149 FinishReason finish_reason) { |
| 157 if (!finished_) { | 150 UMA_HISTOGRAM_ENUMERATION("Startup.FirstWebContents.FinishReason", |
| 158 UMA_HISTOGRAM_ENUMERATION("Startup.FirstWebContents.FinishReason", | 151 finish_reason, FinishReason::ENUM_MAX); |
| 152 if (!collected_paint_metric_) { |
| 153 UMA_HISTOGRAM_ENUMERATION("Startup.FirstWebContents.FinishReason_NoPaint", |
| 159 finish_reason, FinishReason::ENUM_MAX); | 154 finish_reason, FinishReason::ENUM_MAX); |
| 160 if (!collected_paint_metric_) { | 155 } |
| 161 UMA_HISTOGRAM_ENUMERATION("Startup.FirstWebContents.FinishReason_NoPaint", | 156 if (!collected_load_metric_) { |
| 162 finish_reason, FinishReason::ENUM_MAX); | 157 UMA_HISTOGRAM_ENUMERATION("Startup.FirstWebContents.FinishReason_NoLoad", |
| 163 } | 158 finish_reason, FinishReason::ENUM_MAX); |
| 164 if (!collected_load_metric_) { | |
| 165 UMA_HISTOGRAM_ENUMERATION("Startup.FirstWebContents.FinishReason_NoLoad", | |
| 166 finish_reason, FinishReason::ENUM_MAX); | |
| 167 } | |
| 168 finished_ = true; | |
| 169 } | 159 } |
| 170 | 160 |
| 171 // Continue recording deprecated v1 stats (see |finished_|) except in | 161 delete this; |
| 172 // scenarios where stats collection was already being abandonned previously. | |
| 173 // TODO(gab): Delete right away when getting rid of |finished_|. | |
| 174 if (IsFinishedCollectingMetrics() || | |
| 175 finish_reason == FinishReason::ABANDON_CONTENT_DESTROYED || | |
| 176 finish_reason == FinishReason::ABANDON_BLOCKING_UI) { | |
| 177 delete this; | |
| 178 } | |
| 179 } | 162 } |
| 180 | 163 |
| 181 #endif // !defined(OS_ANDROID) | 164 #endif // !defined(OS_ANDROID) |
| OLD | NEW |