| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #if defined(OS_WIN) | 5 #if defined(OS_WIN) |
| 6 #include <windows.h> | 6 #include <windows.h> |
| 7 #endif | 7 #endif |
| 8 | 8 |
| 9 #include "chrome/gpu/gpu_channel.h" | 9 #include "chrome/gpu/gpu_channel.h" |
| 10 | 10 |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 93 IPC_MESSAGE_UNHANDLED_ERROR() | 93 IPC_MESSAGE_UNHANDLED_ERROR() |
| 94 IPC_END_MESSAGE_MAP() | 94 IPC_END_MESSAGE_MAP() |
| 95 } | 95 } |
| 96 | 96 |
| 97 int GpuChannel::GenerateRouteID() { | 97 int GpuChannel::GenerateRouteID() { |
| 98 static int last_id = 0; | 98 static int last_id = 0; |
| 99 return ++last_id; | 99 return ++last_id; |
| 100 } | 100 } |
| 101 | 101 |
| 102 void GpuChannel::OnCreateViewCommandBuffer(gfx::NativeViewId view_id, | 102 void GpuChannel::OnCreateViewCommandBuffer(gfx::NativeViewId view_id, |
| 103 int32 render_view_id, |
| 103 int32* route_id) { | 104 int32* route_id) { |
| 104 *route_id = 0; | 105 *route_id = 0; |
| 105 | 106 |
| 106 #if defined(ENABLE_GPU) | 107 #if defined(ENABLE_GPU) |
| 107 | 108 |
| 108 gfx::PluginWindowHandle handle = gfx::kNullPluginWindow; | 109 gfx::PluginWindowHandle handle = gfx::kNullPluginWindow; |
| 109 #if defined(OS_WIN) | 110 #if defined(OS_WIN) |
| 110 gfx::NativeView view = gfx::NativeViewFromId(view_id); | 111 gfx::NativeView view = gfx::NativeViewFromId(view_id); |
| 111 | 112 |
| 112 // Check that the calling renderer is allowed to render to this window. | 113 // Check that the calling renderer is allowed to render to this window. |
| 113 // TODO(apatrick): consider killing the renderer process rather than failing. | 114 // TODO(apatrick): consider killing the renderer process rather than failing. |
| 114 int view_renderer_id = reinterpret_cast<int>( | 115 int view_renderer_id = reinterpret_cast<int>( |
| 115 GetProp(view, chrome::kChromiumRendererIdProperty)); | 116 GetProp(view, chrome::kChromiumRendererIdProperty)); |
| 116 if (view_renderer_id != renderer_id_) | 117 if (view_renderer_id != renderer_id_) |
| 117 return; | 118 return; |
| 118 handle = view; | 119 handle = view; |
| 119 #elif defined(OS_LINUX) | 120 #elif defined(OS_LINUX) |
| 120 ChildThread* gpu_thread = ChildThread::current(); | 121 ChildThread* gpu_thread = ChildThread::current(); |
| 121 // Ask the browser for the view's XID. | 122 // Ask the browser for the view's XID. |
| 122 // TODO(piman): This assumes that it doesn't change. It can change however | 123 // TODO(piman): This assumes that it doesn't change. It can change however |
| 123 // when tearing off tabs. This needs a fix in the browser UI code. A possible | 124 // when tearing off tabs. This needs a fix in the browser UI code. A possible |
| 124 // alternative would be to add a socket/plug pair like with plugins but that | 125 // alternative would be to add a socket/plug pair like with plugins but that |
| 125 // has issues with events and focus. | 126 // has issues with events and focus. |
| 126 gpu_thread->Send(new GpuHostMsg_GetViewXID(view_id, &handle)); | 127 gpu_thread->Send(new GpuHostMsg_GetViewXID(view_id, &handle)); |
| 128 #elif defined(OS_MACOSX) |
| 129 // On Mac OS X we currently pass a (fake) PluginWindowHandle for the |
| 130 // NativeViewId. We could allocate fake NativeViewIds on the browser |
| 131 // side as well, and map between those and PluginWindowHandles, but |
| 132 // this seems excessive. |
| 133 handle = static_cast<gfx::PluginWindowHandle>( |
| 134 static_cast<intptr_t>(view_id)); |
| 127 #else | 135 #else |
| 128 // TODO(apatrick): This needs to be something valid for mac and linux. | 136 // TODO(apatrick): This needs to be something valid for mac and linux. |
| 129 // Offscreen rendering will work on these platforms but not rendering to the | 137 // Offscreen rendering will work on these platforms but not rendering to the |
| 130 // window. | 138 // window. |
| 131 DCHECK_EQ(view_id, 0); | 139 DCHECK_EQ(view_id, 0); |
| 132 #endif | 140 #endif |
| 133 | 141 |
| 134 *route_id = GenerateRouteID(); | 142 *route_id = GenerateRouteID(); |
| 135 scoped_ptr<GpuCommandBufferStub> stub(new GpuCommandBufferStub( | 143 scoped_ptr<GpuCommandBufferStub> stub(new GpuCommandBufferStub( |
| 136 this, handle, NULL, gfx::Size(), 0, *route_id)); | 144 this, handle, NULL, gfx::Size(), 0, *route_id, |
| 145 renderer_id_, render_view_id)); |
| 137 router_.AddRoute(*route_id, stub.get()); | 146 router_.AddRoute(*route_id, stub.get()); |
| 138 stubs_.AddWithID(stub.release(), *route_id); | 147 stubs_.AddWithID(stub.release(), *route_id); |
| 139 #endif // ENABLE_GPU | 148 #endif // ENABLE_GPU |
| 140 } | 149 } |
| 141 | 150 |
| 142 void GpuChannel::OnCreateOffscreenCommandBuffer(int32 parent_route_id, | 151 void GpuChannel::OnCreateOffscreenCommandBuffer(int32 parent_route_id, |
| 143 const gfx::Size& size, | 152 const gfx::Size& size, |
| 144 uint32 parent_texture_id, | 153 uint32 parent_texture_id, |
| 145 int32* route_id) { | 154 int32* route_id) { |
| 146 #if defined(ENABLE_GPU) | 155 #if defined(ENABLE_GPU) |
| 147 *route_id = GenerateRouteID(); | 156 *route_id = GenerateRouteID(); |
| 148 GpuCommandBufferStub* parent_stub = NULL; | 157 GpuCommandBufferStub* parent_stub = NULL; |
| 149 if (parent_route_id != 0) | 158 if (parent_route_id != 0) |
| 150 parent_stub = stubs_.Lookup(parent_route_id); | 159 parent_stub = stubs_.Lookup(parent_route_id); |
| 151 | 160 |
| 152 scoped_ptr<GpuCommandBufferStub> stub(new GpuCommandBufferStub( | 161 scoped_ptr<GpuCommandBufferStub> stub(new GpuCommandBufferStub( |
| 153 this, | 162 this, |
| 154 gfx::kNullPluginWindow, | 163 gfx::kNullPluginWindow, |
| 155 parent_stub, | 164 parent_stub, |
| 156 size, | 165 size, |
| 157 parent_texture_id, | 166 parent_texture_id, |
| 158 *route_id)); | 167 *route_id, |
| 168 0, 0)); |
| 159 router_.AddRoute(*route_id, stub.get()); | 169 router_.AddRoute(*route_id, stub.get()); |
| 160 stubs_.AddWithID(stub.release(), *route_id); | 170 stubs_.AddWithID(stub.release(), *route_id); |
| 161 #else | 171 #else |
| 162 *route_id = 0; | 172 *route_id = 0; |
| 163 #endif | 173 #endif |
| 164 } | 174 } |
| 165 | 175 |
| 166 void GpuChannel::OnDestroyCommandBuffer(int32 route_id) { | 176 void GpuChannel::OnDestroyCommandBuffer(int32 route_id) { |
| 167 #if defined(ENABLE_GPU) | 177 #if defined(ENABLE_GPU) |
| 168 router_.RemoveRoute(route_id); | 178 router_.RemoveRoute(route_id); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 189 channel_.reset(new IPC::SyncChannel( | 199 channel_.reset(new IPC::SyncChannel( |
| 190 channel_name, IPC::Channel::MODE_SERVER, this, NULL, | 200 channel_name, IPC::Channel::MODE_SERVER, this, NULL, |
| 191 ChildProcess::current()->io_message_loop(), false, | 201 ChildProcess::current()->io_message_loop(), false, |
| 192 ChildProcess::current()->GetShutDownEvent())); | 202 ChildProcess::current()->GetShutDownEvent())); |
| 193 return true; | 203 return true; |
| 194 } | 204 } |
| 195 | 205 |
| 196 std::string GpuChannel::GetChannelName() { | 206 std::string GpuChannel::GetChannelName() { |
| 197 return StringPrintf("%d.r%d", base::GetCurrentProcId(), renderer_id_); | 207 return StringPrintf("%d.r%d", base::GetCurrentProcId(), renderer_id_); |
| 198 } | 208 } |
| OLD | NEW |