0
Files
src/content/browser/browser_main.cc
Bruce Dawson daec06d862 Record shutdown-hang related times
When investigating shutdown hangs it can be important to know key times
like when shutdown started, when a particular task was started, and when
a shutdown hang was detected. Previously this information was difficult
to obtain but this change puts these three times in local variables in
the appropriate threads, using base::debug::Alias() to lock them there.

This allows determining, for instance, how long the shutdown-hang
timeout was, and whether a task was started before or after shutdown was
initiated.

Bug: 1431378
Change-Id: Ic5a79c5e004e1b6fc11d37b1d6f409b6affac069
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4424837
Commit-Queue: Bruce Dawson <brucedawson@chromium.org>
Code-Coverage: Findit <findit-for-me@appspot.gserviceaccount.com>
Reviewed-by: Olivier Li <olivierli@chromium.org>
Reviewed-by: Francois Pierre Doray <fdoray@chromium.org>
Reviewed-by: Avi Drissman <avi@chromium.org>
Reviewed-by: Steven Holte <holte@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1133121}
2023-04-20 15:02:59 +00:00

49 lines
1.5 KiB
C++

// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/browser/browser_main.h"
#include <memory>
#include "base/debug/alias.h"
#include "base/process/current_process.h"
#include "base/time/time.h"
#include "base/trace_event/trace_event.h"
#include "content/browser/browser_main_runner_impl.h"
#include "content/common/content_constants_internal.h"
namespace content {
// Main routine for running as the Browser process.
int BrowserMain(MainFunctionParams parameters) {
TRACE_EVENT_INSTANT0("startup", "BrowserMain", TRACE_EVENT_SCOPE_THREAD);
base::CurrentProcess::GetInstance().SetProcessType(
base::CurrentProcessType::PROCESS_BROWSER);
base::trace_event::TraceLog::GetInstance()->SetProcessSortIndex(
kTraceEventBrowserProcessSortIndex);
std::unique_ptr<BrowserMainRunnerImpl> main_runner(
BrowserMainRunnerImpl::Create());
int exit_code = main_runner->Initialize(std::move(parameters));
if (exit_code >= 0)
return exit_code;
exit_code = main_runner->Run();
// Record the time shutdown started in convenient units. This can be compared
// to times stored in places like ReportThreadHang() and
// TaskAnnotator::RunTaskImpl() when analyzing hangs.
const int64_t shutdown_time =
base::TimeTicks::Now().since_origin().InSeconds();
base::debug::Alias(&shutdown_time);
main_runner->Shutdown();
return exit_code;
}
} // namespace content