
On Windows there is a 5ms gap[0] during startup traces between BrowserMainLoop::PostCreateMainMessageLoop & BrowserMainLoop::CreateStartupTasks. This CL adds an annotation to ui::InitializeInputMethod to fill this gap[1]. For StartProcessWithAccess we can annotate this with the sandbox delegate's tag which is quick to obtain and always available. This makes it easier to see which process is being created in these traces. [0] https://ui.perfetto.dev/#!/?s=60a6ea3da5fd33c0506f3c2efa6766fb83ef23e4 [1] https://ui.perfetto.dev/#!/?s=4162f79bf5da02557e13e0d98f91778c686f1154 Bug: N/A Change-Id: I42869a6dd9f6ed223b302c8ec8a0e19eeebad45c Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6094412 Reviewed-by: Will Harris <wfh@chromium.org> Reviewed-by: Yuichiro Hanada <yhanada@chromium.org> Commit-Queue: Alex Gough <ajgo@chromium.org> Cr-Commit-Position: refs/heads/main@{#1396588}
54 lines
2.1 KiB
C++
54 lines
2.1 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/public/common/sandbox_init_win.h"
|
|
|
|
#include <string>
|
|
|
|
#include "base/base_switches.h"
|
|
#include "base/command_line.h"
|
|
#include "base/trace_event/trace_event.h"
|
|
#include "base/win/scoped_process_information.h"
|
|
#include "content/public/common/content_switches.h"
|
|
#include "content/public/common/sandboxed_process_launcher_delegate.h"
|
|
#include "sandbox/policy/mojom/sandbox.mojom.h"
|
|
#include "sandbox/policy/sandbox.h"
|
|
#include "sandbox/policy/win/sandbox_win.h"
|
|
#include "sandbox/win/src/sandbox.h"
|
|
#include "sandbox/win/src/sandbox_types.h"
|
|
|
|
namespace content {
|
|
|
|
sandbox::ResultCode StartSandboxedProcess(
|
|
SandboxedProcessLauncherDelegate* delegate,
|
|
const base::CommandLine& target_command_line,
|
|
const base::HandlesToInheritVector& handles_to_inherit,
|
|
sandbox::StartSandboxedProcessCallback result_callback) {
|
|
std::string type_str =
|
|
target_command_line.GetSwitchValueASCII(switches::kProcessType);
|
|
TRACE_EVENT2("startup", "StartProcessWithAccess", "type", type_str, "tag",
|
|
delegate->GetSandboxTag());
|
|
|
|
// Updates the command line arguments with debug-related flags. If debug
|
|
// flags have been used with this process, they will be filtered and added
|
|
// to full_command_line as needed.
|
|
const base::CommandLine& current_command_line =
|
|
*base::CommandLine::ForCurrentProcess();
|
|
base::CommandLine full_command_line = target_command_line;
|
|
if (current_command_line.HasSwitch(switches::kWaitForDebuggerChildren)) {
|
|
std::string value = current_command_line.GetSwitchValueASCII(
|
|
switches::kWaitForDebuggerChildren);
|
|
full_command_line.AppendSwitchASCII(switches::kWaitForDebuggerChildren,
|
|
value);
|
|
if (value.empty() || value == type_str)
|
|
full_command_line.AppendSwitch(switches::kWaitForDebugger);
|
|
}
|
|
|
|
return sandbox::policy::SandboxWin::StartSandboxedProcess(
|
|
full_command_line, handles_to_inherit, delegate,
|
|
std::move(result_callback));
|
|
}
|
|
|
|
} // namespace content
|