| Index: content/gpu/gpu_main.cc
|
| diff --git a/content/gpu/gpu_main.cc b/content/gpu/gpu_main.cc
|
| index 51c2868899c077360575fbf89cab0518e99bc7a0..a529db776818dba3ba9a39c0baf9ff2ca58d5c60 100644
|
| --- a/content/gpu/gpu_main.cc
|
| +++ b/content/gpu/gpu_main.cc
|
| @@ -193,31 +193,41 @@ int GpuMain(const MainFunctionParams& parameters) {
|
|
|
| logging::SetLogMessageHandler(GpuProcessLogMessageHandler);
|
|
|
| + // We are experiencing what appear to be memory-stomp issues in the GPU
|
| + // process. These issues seem to be impacting the message loop and listeners
|
| + // registered to it. Create the message loop on the heap to guard against
|
| + // this.
|
| + // TODO(ericrk): Revisit this once we assess its impact on crbug.com/662802
|
| + // and crbug.com/609252.
|
| + std::unique_ptr<base::MessageLoop> main_message_loop;
|
| +
|
| #if defined(OS_WIN)
|
| // OK to use default non-UI message loop because all GPU windows run on
|
| // dedicated thread.
|
| - base::MessageLoop main_message_loop(base::MessageLoop::TYPE_DEFAULT);
|
| + main_message_loop.reset(
|
| + new base::MessageLoop(base::MessageLoop::TYPE_DEFAULT));
|
| #elif defined(USE_X11)
|
| // We need a UI loop so that we can grab the Expose events. See GLSurfaceGLX
|
| // and https://crbug.com/326995.
|
| - base::MessageLoop main_message_loop(base::MessageLoop::TYPE_UI);
|
| + main_message_loop.reset(new base::MessageLoop(base::MessageLoop::TYPE_UI));
|
| std::unique_ptr<ui::PlatformEventSource> event_source =
|
| ui::PlatformEventSource::CreateDefault();
|
| #elif defined(USE_OZONE) && defined(OZONE_X11)
|
| // If we might be running Ozone X11 we need a UI loop to grab Expose events.
|
| // See GLSurfaceGLX and https://crbug.com/326995.
|
| - base::MessageLoop main_message_loop(base::MessageLoop::TYPE_UI);
|
| + main_message_loop.reset(new base::MessageLoop(base::MessageLoop::TYPE_UI));
|
| #elif defined(USE_OZONE)
|
| - base::MessageLoop main_message_loop(base::MessageLoop::TYPE_DEFAULT);
|
| + main_message_loop.reset(
|
| + new base::MessageLoop(base::MessageLoop::TYPE_DEFAULT));
|
| #elif defined(OS_LINUX)
|
| #error "Unsupported Linux platform."
|
| #elif defined(OS_MACOSX)
|
| // This is necessary for CoreAnimation layers hosted in the GPU process to be
|
| // drawn. See http://crbug.com/312462.
|
| std::unique_ptr<base::MessagePump> pump(new base::MessagePumpCFRunLoop());
|
| - base::MessageLoop main_message_loop(std::move(pump));
|
| + main_message_loop.reset(new base::MessageLoop(std::move(pump)));
|
| #else
|
| - base::MessageLoop main_message_loop(base::MessageLoop::TYPE_IO);
|
| + main_message_loop.reset(new base::MessageLoop(base::MessageLoop::TYPE_IO));
|
| #endif
|
|
|
| base::PlatformThread::SetName("CrGpuMain");
|
|
|