diff --git a/shell/app/atom_main_delegate.cc b/shell/app/atom_main_delegate.cc index 9f33fc12e64d..9d2af64a941c 100644 --- a/shell/app/atom_main_delegate.cc +++ b/shell/app/atom_main_delegate.cc @@ -24,6 +24,7 @@ #include "ipc/ipc_buildflags.h" #include "services/service_manager/embedder/switches.h" #include "services/service_manager/sandbox/switches.h" +#include "services/tracing/public/cpp/stack_sampling/tracing_sampler_profiler.h" #include "shell/app/atom_content_client.h" #include "shell/browser/atom_browser_client.h" #include "shell/browser/atom_gpu_client.h" @@ -182,6 +183,9 @@ bool AtomMainDelegate::BasicStartupComplete(int* exit_code) { if (env->HasVar("ELECTRON_DISABLE_SANDBOX")) command_line->AppendSwitch(service_manager::switches::kNoSandbox); + tracing_sampler_profiler_ = + tracing::TracingSamplerProfiler::CreateOnMainThread(); + chrome::RegisterPathProvider(); #if defined(OS_MACOSX) diff --git a/shell/app/atom_main_delegate.h b/shell/app/atom_main_delegate.h index fa5d8fbc4bc6..708d0adcf345 100644 --- a/shell/app/atom_main_delegate.h +++ b/shell/app/atom_main_delegate.h @@ -11,6 +11,10 @@ #include "content/public/app/content_main_delegate.h" #include "content/public/common/content_client.h" +namespace tracing { +class TracingSamplerProfiler; +} + namespace electron { void LoadResourceBundle(const std::string& locale); @@ -51,6 +55,7 @@ class AtomMainDelegate : public content::ContentMainDelegate { std::unique_ptr gpu_client_; std::unique_ptr renderer_client_; std::unique_ptr utility_client_; + std::unique_ptr tracing_sampler_profiler_; DISALLOW_COPY_AND_ASSIGN(AtomMainDelegate); }; diff --git a/shell/browser/atom_browser_main_parts.cc b/shell/browser/atom_browser_main_parts.cc index f59c144afa2b..56cea191427c 100644 --- a/shell/browser/atom_browser_main_parts.cc +++ b/shell/browser/atom_browser_main_parts.cc @@ -32,6 +32,7 @@ #include "services/device/public/mojom/constants.mojom.h" #include "services/network/public/cpp/features.h" #include "services/service_manager/public/cpp/connector.h" +#include "services/tracing/public/cpp/stack_sampling/tracing_sampler_profiler.h" #include "shell/app/atom_main_delegate.h" #include "shell/browser/api/atom_api_app.h" #include "shell/browser/atom_browser_client.h" @@ -389,6 +390,12 @@ int AtomBrowserMainParts::PreCreateThreads() { return 0; } +void AtomBrowserMainParts::PostCreateThreads() { + base::PostTask( + FROM_HERE, {content::BrowserThread::IO}, + base::BindOnce(&tracing::TracingSamplerProfiler::CreateOnChildThread)); +} + void AtomBrowserMainParts::PostDestroyThreads() { #if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS) extensions_browser_client_.reset(); diff --git a/shell/browser/atom_browser_main_parts.h b/shell/browser/atom_browser_main_parts.h index f79498d3d9f3..6e852f869497 100644 --- a/shell/browser/atom_browser_main_parts.h +++ b/shell/browser/atom_browser_main_parts.h @@ -92,6 +92,7 @@ class AtomBrowserMainParts : public content::BrowserMainParts { void PostMainMessageLoopStart() override; void PostMainMessageLoopRun() override; void PreMainMessageLoopStart() override; + void PostCreateThreads() override; void PostDestroyThreads() override; private: