mirror of
				https://bitbucket.org/chromiumembedded/cef
				synced 2025-06-05 21:39:12 +02:00 
			
		
		
		
	- Linux ARM builds require use_vaapi=false (see https://crbug.com/1185348) - Windows official builds require use_thin_lto=false (see https://crbug.com/1177001)
		
			
				
	
	
		
			203 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			203 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
diff --git content/app/content_main.cc content/app/content_main.cc
 | 
						|
index 2aba28d210db..00edc202e2c4 100644
 | 
						|
--- content/app/content_main.cc
 | 
						|
+++ content/app/content_main.cc
 | 
						|
@@ -205,15 +205,10 @@ void InitializeMojo(mojo::core::Configuration* config) {
 | 
						|
 
 | 
						|
 }  // namespace
 | 
						|
 
 | 
						|
-int RunContentProcess(const ContentMainParams& params,
 | 
						|
-                      ContentMainRunner* content_main_runner) {
 | 
						|
-  ContentMainParams content_main_params(params);
 | 
						|
-
 | 
						|
+int ContentMainInitialize(ContentMainParams& params,
 | 
						|
+                          ContentMainRunner* content_main_runner) {
 | 
						|
   int exit_code = -1;
 | 
						|
   base::debug::GlobalActivityTracker* tracker = nullptr;
 | 
						|
-#if defined(OS_MAC)
 | 
						|
-  std::unique_ptr<base::mac::ScopedNSAutoreleasePool> autorelease_pool;
 | 
						|
-#endif
 | 
						|
 
 | 
						|
   // A flag to indicate whether Main() has been called before. On Android, we
 | 
						|
   // may re-run Main() without restarting the browser process. This flag
 | 
						|
@@ -295,12 +290,6 @@ int RunContentProcess(const ContentMainParams& params,
 | 
						|
 #endif
 | 
						|
 
 | 
						|
 #if defined(OS_MAC)
 | 
						|
-    // We need this pool for all the objects created before we get to the event
 | 
						|
-    // loop, but we don't want to leave them hanging around until the app quits.
 | 
						|
-    // Each "main" needs to flush this pool right before it goes into its main
 | 
						|
-    // event loop to get rid of the cruft.
 | 
						|
-    autorelease_pool = std::make_unique<base::mac::ScopedNSAutoreleasePool>();
 | 
						|
-    content_main_params.autorelease_pool = autorelease_pool.get();
 | 
						|
     InitializeMac();
 | 
						|
 #endif
 | 
						|
 
 | 
						|
@@ -310,7 +299,7 @@ int RunContentProcess(const ContentMainParams& params,
 | 
						|
 
 | 
						|
     ui::RegisterPathProvider();
 | 
						|
     tracker = base::debug::GlobalActivityTracker::Get();
 | 
						|
-    exit_code = content_main_runner->Initialize(content_main_params);
 | 
						|
+    exit_code = content_main_runner->Initialize(params);
 | 
						|
 
 | 
						|
     if (exit_code >= 0) {
 | 
						|
       if (tracker) {
 | 
						|
@@ -369,8 +358,16 @@ int RunContentProcess(const ContentMainParams& params,
 | 
						|
 
 | 
						|
   if (IsSubprocess())
 | 
						|
     CommonSubprocessInit();
 | 
						|
-  exit_code = content_main_runner->Run(params.minimal_browser_mode);
 | 
						|
 
 | 
						|
+  return exit_code;
 | 
						|
+}
 | 
						|
+
 | 
						|
+int ContentMainRun(ContentMainParams& params,
 | 
						|
+                   ContentMainRunner* content_main_runner) {
 | 
						|
+  int exit_code = content_main_runner->Run(params.minimal_browser_mode);
 | 
						|
+
 | 
						|
+  base::debug::GlobalActivityTracker* tracker =
 | 
						|
+      base::debug::GlobalActivityTracker::Get();
 | 
						|
   if (tracker) {
 | 
						|
     if (exit_code == 0) {
 | 
						|
       tracker->SetProcessPhaseIfEnabled(
 | 
						|
@@ -381,19 +378,45 @@ int RunContentProcess(const ContentMainParams& params,
 | 
						|
       tracker->process_data().SetInt("exit-code", exit_code);
 | 
						|
     }
 | 
						|
   }
 | 
						|
+  
 | 
						|
+  return exit_code;
 | 
						|
+}
 | 
						|
 
 | 
						|
+void ContentMainShutdown(ContentMainParams& params,
 | 
						|
+                         ContentMainRunner* content_main_runner) {
 | 
						|
+#if !defined(OS_ANDROID)
 | 
						|
+  content_main_runner->Shutdown();
 | 
						|
+#endif
 | 
						|
+}
 | 
						|
+
 | 
						|
+int RunContentProcess(ContentMainParams& params,
 | 
						|
+                      ContentMainRunner* content_main_runner) {
 | 
						|
 #if defined(OS_MAC)
 | 
						|
-  autorelease_pool.reset();
 | 
						|
+  // We need this pool for all the objects created before we get to the event
 | 
						|
+  // loop, but we don't want to leave them hanging around until the app quits.
 | 
						|
+  // Each "main" needs to flush this pool right before it goes into its main
 | 
						|
+  // event loop to get rid of the cruft.
 | 
						|
+  std::unique_ptr<base::mac::ScopedNSAutoreleasePool> autorelease_pool =
 | 
						|
+      std::make_unique<base::mac::ScopedNSAutoreleasePool>();
 | 
						|
+  params.autorelease_pool = autorelease_pool.get();
 | 
						|
 #endif
 | 
						|
 
 | 
						|
-#if !defined(OS_ANDROID)
 | 
						|
-  content_main_runner->Shutdown();
 | 
						|
+  int exit_code = ContentMainInitialize(params, content_main_runner);
 | 
						|
+  if (exit_code >= 0)
 | 
						|
+    return exit_code;
 | 
						|
+  exit_code = ContentMainRun(params, content_main_runner);
 | 
						|
+
 | 
						|
+#if defined(OS_MAC)
 | 
						|
+  params.autorelease_pool = nullptr;
 | 
						|
+  autorelease_pool.reset();
 | 
						|
 #endif
 | 
						|
 
 | 
						|
+  ContentMainShutdown(params, content_main_runner);
 | 
						|
+
 | 
						|
   return exit_code;
 | 
						|
 }
 | 
						|
 
 | 
						|
-int ContentMain(const ContentMainParams& params) {
 | 
						|
+int ContentMain(ContentMainParams& params) {
 | 
						|
   auto runner = ContentMainRunner::Create();
 | 
						|
   return RunContentProcess(params, runner.get());
 | 
						|
 }
 | 
						|
diff --git content/app/content_main_runner_impl.cc content/app/content_main_runner_impl.cc
 | 
						|
index 7873fad0a61b..425c30a56699 100644
 | 
						|
--- content/app/content_main_runner_impl.cc
 | 
						|
+++ content/app/content_main_runner_impl.cc
 | 
						|
@@ -44,6 +44,7 @@
 | 
						|
 #include "base/task/thread_pool/thread_pool_instance.h"
 | 
						|
 #include "base/threading/hang_watcher.h"
 | 
						|
 #include "base/threading/platform_thread.h"
 | 
						|
+#include "base/threading/thread_restrictions.h"
 | 
						|
 #include "base/time/time.h"
 | 
						|
 #include "base/trace_event/trace_event.h"
 | 
						|
 #include "build/build_config.h"
 | 
						|
@@ -1092,6 +1093,11 @@ void ContentMainRunnerImpl::Shutdown() {
 | 
						|
   is_shutdown_ = true;
 | 
						|
 }
 | 
						|
 
 | 
						|
+void ContentMainRunnerImpl::ShutdownOnUIThread() {
 | 
						|
+  base::ScopedAllowBaseSyncPrimitivesForTesting allow_wait;
 | 
						|
+  discardable_shared_memory_manager_.reset();
 | 
						|
+}
 | 
						|
+
 | 
						|
 // static
 | 
						|
 std::unique_ptr<ContentMainRunner> ContentMainRunner::Create() {
 | 
						|
   return ContentMainRunnerImpl::Create();
 | 
						|
diff --git content/app/content_main_runner_impl.h content/app/content_main_runner_impl.h
 | 
						|
index 86c624e53cf9..090171f7db22 100644
 | 
						|
--- content/app/content_main_runner_impl.h
 | 
						|
+++ content/app/content_main_runner_impl.h
 | 
						|
@@ -39,7 +39,7 @@ class ContentMainDelegate;
 | 
						|
 class MojoIpcSupport;
 | 
						|
 struct ContentMainParams;
 | 
						|
 
 | 
						|
-class ContentMainRunnerImpl : public ContentMainRunner {
 | 
						|
+class CONTENT_EXPORT ContentMainRunnerImpl : public ContentMainRunner {
 | 
						|
  public:
 | 
						|
   static std::unique_ptr<ContentMainRunnerImpl> Create();
 | 
						|
 
 | 
						|
@@ -53,6 +53,8 @@ class ContentMainRunnerImpl : public ContentMainRunner {
 | 
						|
   int Run(bool start_minimal_browser) override;
 | 
						|
   void Shutdown() override;
 | 
						|
 
 | 
						|
+  void ShutdownOnUIThread();
 | 
						|
+
 | 
						|
  private:
 | 
						|
   int RunBrowser(MainFunctionParams& main_function_params,
 | 
						|
                  bool start_minimal_browser);
 | 
						|
diff --git content/common/set_process_title.cc content/common/set_process_title.cc
 | 
						|
index 8b829a488773..a69a08869728 100644
 | 
						|
--- content/common/set_process_title.cc
 | 
						|
+++ content/common/set_process_title.cc
 | 
						|
@@ -54,7 +54,7 @@ void SetProcessTitleFromCommandLine(const char** main_argv) {
 | 
						|
   bool have_argv0 = false;
 | 
						|
 
 | 
						|
 #if defined(OS_LINUX) || defined(OS_CHROMEOS)
 | 
						|
-  DCHECK_EQ(base::PlatformThread::CurrentId(), getpid());
 | 
						|
+  // DCHECK_EQ(base::PlatformThread::CurrentId(), getpid());
 | 
						|
 
 | 
						|
   if (main_argv)
 | 
						|
     setproctitle_init(main_argv);
 | 
						|
diff --git content/public/app/content_main.h content/public/app/content_main.h
 | 
						|
index 97aac3d0c758..fc795ae0287f 100644
 | 
						|
--- content/public/app/content_main.h
 | 
						|
+++ content/public/app/content_main.h
 | 
						|
@@ -68,7 +68,16 @@ struct ContentMainParams {
 | 
						|
 #endif
 | 
						|
 };
 | 
						|
 
 | 
						|
-CONTENT_EXPORT int RunContentProcess(const ContentMainParams& params,
 | 
						|
+// Split RunContentProcess() into separate stages.
 | 
						|
+CONTENT_EXPORT int ContentMainInitialize(
 | 
						|
+    ContentMainParams& params,
 | 
						|
+    ContentMainRunner* content_main_runner);
 | 
						|
+CONTENT_EXPORT int ContentMainRun(ContentMainParams& params,
 | 
						|
+                                  ContentMainRunner* content_main_runner);
 | 
						|
+CONTENT_EXPORT void ContentMainShutdown(ContentMainParams& params,
 | 
						|
+                                        ContentMainRunner* content_main_runner);
 | 
						|
+
 | 
						|
+CONTENT_EXPORT int RunContentProcess(ContentMainParams& params,
 | 
						|
                                      ContentMainRunner* content_main_runner);
 | 
						|
 
 | 
						|
 #if defined(OS_ANDROID)
 | 
						|
@@ -91,7 +100,7 @@ ContentMainDelegate* GetContentMainDelegate();
 | 
						|
 // initial setup for every process. The embedder has a chance to customize
 | 
						|
 // startup using the ContentMainDelegate interface. The embedder can also pass
 | 
						|
 // in null for |delegate| if they don't want to override default startup.
 | 
						|
-CONTENT_EXPORT int ContentMain(const ContentMainParams& params);
 | 
						|
+CONTENT_EXPORT int ContentMain(ContentMainParams& params);
 | 
						|
 #endif
 | 
						|
 
 | 
						|
 }  // namespace content
 |