Index: chrome/gpu/gpu_thread.cc |
=================================================================== |
--- chrome/gpu/gpu_thread.cc (revision 42644) |
+++ chrome/gpu/gpu_thread.cc (working copy) |
@@ -7,7 +7,6 @@ |
#include "build/build_config.h" |
#include "chrome/common/child_process.h" |
#include "chrome/common/gpu_messages.h" |
-#include "chrome/gpu/gpu_channel.h" |
#include "chrome/gpu/gpu_config.h" |
#if defined(OS_WIN) |
@@ -47,11 +46,28 @@ |
} |
void GpuThread::OnEstablishChannel(int renderer_id) { |
- scoped_refptr<GpuChannel> channel = |
- GpuChannel::EstablishGpuChannel(renderer_id); |
+ scoped_refptr<GpuChannel> channel; |
+ |
+ GpuChannelMap::const_iterator iter = gpu_channels_.find(renderer_id); |
+ if (iter == gpu_channels_.end()) { |
+ channel = new GpuChannel(renderer_id); |
+ } else { |
+ channel = iter->second; |
+ } |
+ |
+ DCHECK(channel != NULL); |
+ |
+ if (channel->Init()) { |
+ // TODO(apatrick): figure out when to remove channels from the map. They |
+ // will never be destroyed otherwise. |
+ gpu_channels_[renderer_id] = channel; |
+ } else { |
+ channel = NULL; |
+ } |
+ |
IPC::ChannelHandle channel_handle; |
if (channel.get()) { |
- channel_handle.name = channel->channel_name(); |
+ channel_handle.name = channel->GetChannelName(); |
#if defined(OS_POSIX) |
// On POSIX, pass the renderer-side FD. Also mark it as auto-close so that |
// it gets closed after it has been sent. |