From 623c0bd198a26b6609c7545a0cce0578dbad5316 Mon Sep 17 00:00:00 2001 From: "jam@chromium.org" Date: Sat, 12 Mar 2011 01:00:41 +0000 Subject: Move chrome\gpu to content\gpu. TBR=avi Review URL: http://codereview.chromium.org/6684015 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@77903 0039d316-1c4b-4281-b951-d872f2087c98 --- content/gpu/gpu_main.cc | 87 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 content/gpu/gpu_main.cc (limited to 'content/gpu/gpu_main.cc') diff --git a/content/gpu/gpu_main.cc b/content/gpu/gpu_main.cc new file mode 100644 index 0000000..ec79ba9 --- /dev/null +++ b/content/gpu/gpu_main.cc @@ -0,0 +1,87 @@ +// Copyright (c) 2011 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 + +#if defined(OS_WIN) +#include +#endif + +#include "app/win/scoped_com_initializer.h" +#include "base/environment.h" +#include "base/message_loop.h" +#include "base/stringprintf.h" +#include "base/threading/platform_thread.h" +#include "build/build_config.h" +#include "content/common/content_switches.h" +#include "content/common/main_function_params.h" +#include "content/gpu/gpu_config.h" +#include "content/gpu/gpu_process.h" +#include "content/gpu/gpu_thread.h" + +#if defined(OS_MACOSX) +#include "content/common/chrome_application_mac.h" +#endif + +#if defined(USE_X11) +#include "ui/base/x/x11_util.h" +#endif + +// Main function for starting the Gpu process. +int GpuMain(const MainFunctionParams& parameters) { + base::Time start_time = base::Time::Now(); + + const CommandLine& command_line = parameters.command_line_; + if (command_line.HasSwitch(switches::kGpuStartupDialog)) { + ChildProcess::WaitForDebugger("Gpu"); + } + +#if defined(OS_MACOSX) + chrome_application_mac::RegisterCrApp(); +#endif + + MessageLoop main_message_loop(MessageLoop::TYPE_UI); + base::PlatformThread::SetName("CrGpuMain"); + + if (!command_line.HasSwitch(switches::kSingleProcess)) { +#if defined(OS_WIN) + // Prevent Windows from displaying a modal dialog on failures like not being + // able to load a DLL. + SetErrorMode( + SEM_FAILCRITICALERRORS | + SEM_NOGPFAULTERRORBOX | + SEM_NOOPENFILEERRORBOX); +#elif defined(USE_X11) + ui::SetDefaultX11ErrorHandlers(); +#endif + } + + app::win::ScopedCOMInitializer com_initializer; + + // We can not tolerate early returns from this code, because the + // detection of early return of a child process is implemented using + // an IPC channel error. If the IPC channel is not fully set up + // between the browser and GPU process, and the GPU process crashes + // or exits early, the browser process will never detect it. For + // this reason we defer all work related to the GPU until receiving + // the GpuMsg_Initialize message from the browser. + GpuProcess gpu_process; + + GpuThread* gpu_thread = +#if defined(OS_WIN) + new GpuThread(parameters.sandbox_info_.TargetServices()); +#else + new GpuThread; +#endif + + gpu_thread->Init(start_time); + + gpu_process.set_main_thread(gpu_thread); + + main_message_loop.Run(); + + gpu_thread->StopWatchdog(); + + return 0; +} -- cgit v1.1