| Index: components/startup_metric_utils/browser/startup_metric_utils.cc
|
| diff --git a/components/startup_metric_utils/browser/startup_metric_utils.cc b/components/startup_metric_utils/browser/startup_metric_utils.cc
|
| index f1ad613d5df94bc95887beaafc255f963664c4c6..7722a5210d1f9bd1f8220c2d5e61bd52dbca50d8 100644
|
| --- a/components/startup_metric_utils/browser/startup_metric_utils.cc
|
| +++ b/components/startup_metric_utils/browser/startup_metric_utils.cc
|
| @@ -39,7 +39,7 @@ namespace {
|
|
|
| // Mark as volatile to defensively make sure usage is thread-safe.
|
| // Note that at the time of this writing, access is only on the UI thread.
|
| -volatile bool g_non_browser_ui_displayed = false;
|
| +volatile bool g_main_window_startup_interrupted = false;
|
|
|
| base::LazyInstance<base::TimeTicks>::Leaky g_process_creation_ticks =
|
| LAZY_INSTANCE_INITIALIZER;
|
| @@ -548,6 +548,11 @@ void RecordSameVersionStartupCount(PrefService* pref_service) {
|
| g_startups_with_current_version);
|
| }
|
|
|
| +bool ShouldLogProcessCreationTicksHistogram() {
|
| + return !WasMainWindowStartupInterrupted() &&
|
| + !g_process_creation_ticks.Get().is_null();
|
| +}
|
| +
|
| } // namespace
|
|
|
| void RegisterPrefs(PrefRegistrySimple* registry) {
|
| @@ -557,12 +562,16 @@ void RegisterPrefs(PrefRegistrySimple* registry) {
|
| registry->RegisterIntegerPref(prefs::kSameVersionStartupCount, 0);
|
| }
|
|
|
| -bool WasNonBrowserUIDisplayed() {
|
| - return g_non_browser_ui_displayed;
|
| +bool WasMainWindowStartupInterrupted() {
|
| + return g_main_window_startup_interrupted;
|
| }
|
|
|
| void SetNonBrowserUIDisplayed() {
|
| - g_non_browser_ui_displayed = true;
|
| + g_main_window_startup_interrupted = true;
|
| +}
|
| +
|
| +void SetBackgroundModeEnabled() {
|
| + g_main_window_startup_interrupted = true;
|
| }
|
|
|
| void RecordStartupProcessCreationTime(const base::Time& time) {
|
| @@ -662,7 +671,7 @@ void RecordBrowserWindowDisplay(const base::TimeTicks& ticks) {
|
| if (!is_first_call || ticks.is_null())
|
| return;
|
| is_first_call = false;
|
| - if (WasNonBrowserUIDisplayed() || g_process_creation_ticks.Get().is_null())
|
| + if (!ShouldLogProcessCreationTicksHistogram())
|
| return;
|
|
|
| UMA_HISTOGRAM_AND_TRACE_WITH_TEMPERATURE_AND_SAME_VERSION_COUNT(
|
| @@ -692,7 +701,7 @@ void RecordFirstWebContentsMainFrameLoad(const base::TimeTicks& ticks) {
|
| if (!is_first_call || ticks.is_null())
|
| return;
|
| is_first_call = false;
|
| - if (WasNonBrowserUIDisplayed() || g_process_creation_ticks.Get().is_null())
|
| + if (!ShouldLogProcessCreationTicksHistogram())
|
| return;
|
|
|
| UMA_HISTOGRAM_AND_TRACE_WITH_TEMPERATURE_AND_SAME_VERSION_COUNT(
|
| @@ -710,7 +719,7 @@ void RecordFirstWebContentsNonEmptyPaint(const base::TimeTicks& ticks) {
|
| // entry time and the startup temperature are known.
|
| RecordRendererMainEntryHistogram();
|
|
|
| - if (WasNonBrowserUIDisplayed() || g_process_creation_ticks.Get().is_null())
|
| + if (!ShouldLogProcessCreationTicksHistogram())
|
| return;
|
|
|
| base::StackSamplingProfiler::SetProcessMilestone(
|
| @@ -726,7 +735,7 @@ void RecordFirstWebContentsMainNavigationStart(const base::TimeTicks& ticks,
|
| if (!is_first_call || ticks.is_null())
|
| return;
|
| is_first_call = false;
|
| - if (WasNonBrowserUIDisplayed() || g_process_creation_ticks.Get().is_null())
|
| + if (!ShouldLogProcessCreationTicksHistogram())
|
| return;
|
|
|
| base::StackSamplingProfiler::SetProcessMilestone(
|
| @@ -758,7 +767,7 @@ void RecordFirstWebContentsMainNavigationFinished(
|
| if (!is_first_call || ticks.is_null())
|
| return;
|
| is_first_call = false;
|
| - if (WasNonBrowserUIDisplayed() || g_process_creation_ticks.Get().is_null())
|
| + if (!ShouldLogProcessCreationTicksHistogram())
|
| return;
|
|
|
| base::StackSamplingProfiler::SetProcessMilestone(
|
| @@ -769,6 +778,34 @@ void RecordFirstWebContentsMainNavigationFinished(
|
| g_process_creation_ticks.Get(), ticks);
|
| }
|
|
|
| +void RecordBrowserWindowFirstPaint(const base::TimeTicks& ticks) {
|
| + static bool is_first_call = true;
|
| + if (!is_first_call || ticks.is_null())
|
| + return;
|
| + is_first_call = false;
|
| + if (!ShouldLogProcessCreationTicksHistogram())
|
| + return;
|
| +
|
| + UMA_HISTOGRAM_AND_TRACE_WITH_TEMPERATURE(
|
| + UMA_HISTOGRAM_LONG_TIMES_100, "Startup.BrowserWindow.FirstPaint",
|
| + g_process_creation_ticks.Get(), ticks);
|
| +}
|
| +
|
| +void RecordBrowserWindowFirstPaintCompositingEnded(
|
| + const base::TimeTicks& ticks) {
|
| + static bool is_first_call = true;
|
| + if (!is_first_call || ticks.is_null())
|
| + return;
|
| + is_first_call = false;
|
| + if (!ShouldLogProcessCreationTicksHistogram())
|
| + return;
|
| +
|
| + UMA_HISTOGRAM_AND_TRACE_WITH_TEMPERATURE(
|
| + UMA_HISTOGRAM_LONG_TIMES_100,
|
| + "Startup.BrowserWindow.FirstPaint.CompositingEnded",
|
| + g_process_creation_ticks.Get(), ticks);
|
| +}
|
| +
|
| base::TimeTicks MainEntryPointTicks() {
|
| return g_browser_main_entry_point_ticks.Get();
|
| }
|
|
|