blob: 42e05903c4bfa37a31a0c0ebf66a37871f92361c [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <set>
#include "base/metrics/histogram_samples.h"
#include "base/metrics/statistics_recorder.h"
#include "base/run_loop.h"
#include "build/build_config.h"
#include "chrome/browser/browser_process.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "components/startup_metric_utils/browser/startup_metric_utils.h"
using StartupMetricsTest = InProcessBrowserTest;
namespace {
constexpr const char* kStartupMetrics[] = {
"Startup.BrowserMainToRendererMain",
"Startup.BrowserMessageLoopStartTime",
"Startup.BrowserMessageLoopStartTimeFromMainEntry3",
"Startup.BrowserOpenTabs",
"Startup.BrowserWindow.FirstPaint",
"Startup.BrowserWindow.FirstPaint.CompositingEnded",
"Startup.BrowserWindowDisplay",
"Startup.FirstWebContents.MainFrameLoad2",
"Startup.FirstWebContents.MainNavigationFinished",
"Startup.FirstWebContents.MainNavigationStart",
"Startup.FirstWebContents.NonEmptyPaint2",
"Startup.FirstWebContents.RenderProcessHostInit.ToNonEmptyPaint",
"Startup.LoadTime.ExeMainToDllMain2",
"Startup.LoadTime.ProcessCreateToDllMain2",
"Startup.LoadTime.ProcessCreateToExeMain2",
"Startup.SystemUptime",
#if defined(OS_WIN)
"Startup.BrowserMessageLoopStartHardFaultCount",
"Startup.Temperature",
#endif
};
} // namespace
// Verify that startup histograms are logged on browser startup.
IN_PROC_BROWSER_TEST_F(StartupMetricsTest, ReportsValues) {
// This is usually done from the constructor of ChromeMainDelegate.
startup_metric_utils::RecordExeMainEntryPointTicks(base::TimeTicks::Now());
// This is usually done from ChromeBrowserMainParts::MainMessageLoopRun().
startup_metric_utils::RecordBrowserMainMessageLoopStart(
base::TimeTicks::Now(), false /* is_first_run */,
g_browser_process->local_state());
// Wait for all histograms to be recorded. The test will hang if an histogram
// is not recorded.
for (auto* const histogram : kStartupMetrics) {
while (!base::StatisticsRecorder::FindHistogram(histogram))
base::RunLoop().RunUntilIdle();
}
}