Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(249)

Side by Side Diff: chrome/gpu/gpu_channel.cc

Issue 6343006: Route IPC through browser when creating a viewable command buffer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix nit. Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/gpu/gpu_channel.h ('k') | chrome/gpu/gpu_command_buffer_stub.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include "chrome/gpu/gpu_channel.h" 5 #include "chrome/gpu/gpu_channel.h"
6 6
7 #if defined(OS_WIN) 7 #if defined(OS_WIN)
8 #include <windows.h> 8 #include <windows.h>
9 #endif 9 #endif
10 10
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 } 64 }
65 65
66 if (!channel_.get()) { 66 if (!channel_.get()) {
67 delete message; 67 delete message;
68 return false; 68 return false;
69 } 69 }
70 70
71 return channel_->Send(message); 71 return channel_->Send(message);
72 } 72 }
73 73
74 void GpuChannel::CreateViewCommandBuffer(
75 gfx::PluginWindowHandle window,
76 int32 render_view_id,
77 const GPUCreateCommandBufferConfig& init_params,
78 int32* route_id) {
79 *route_id = MSG_ROUTING_NONE;
80
81 #if defined(ENABLE_GPU)
82 *route_id = GenerateRouteID();
83 scoped_ptr<GpuCommandBufferStub> stub(new GpuCommandBufferStub(
84 this, window, NULL, gfx::Size(), init_params.allowed_extensions,
85 init_params.attribs, 0, *route_id, renderer_id_, render_view_id));
86 router_.AddRoute(*route_id, stub.get());
87 stubs_.AddWithID(stub.release(), *route_id);
88 #endif // ENABLE_GPU
89 }
90
74 #if defined(OS_MACOSX) 91 #if defined(OS_MACOSX)
75 void GpuChannel::AcceleratedSurfaceBuffersSwapped( 92 void GpuChannel::AcceleratedSurfaceBuffersSwapped(
76 int32 route_id, uint64 swap_buffers_count) { 93 int32 route_id, uint64 swap_buffers_count) {
77 GpuCommandBufferStub* stub = stubs_.Lookup(route_id); 94 GpuCommandBufferStub* stub = stubs_.Lookup(route_id);
78 if (stub == NULL) 95 if (stub == NULL)
79 return; 96 return;
80 stub->AcceleratedSurfaceBuffersSwapped(swap_buffers_count); 97 stub->AcceleratedSurfaceBuffersSwapped(swap_buffers_count);
81 } 98 }
82 99
83 void GpuChannel::DidDestroySurface(int32 renderer_route_id) { 100 void GpuChannel::DidDestroySurface(int32 renderer_route_id) {
84 // Since acclerated views are created in the renderer process and then sent 101 // Since acclerated views are created in the renderer process and then sent
85 // to the browser process during GPU channel construction, it is possible that 102 // to the browser process during GPU channel construction, it is possible that
86 // this is called before a GpuCommandBufferStub for |renderer_route_id| was 103 // this is called before a GpuCommandBufferStub for |renderer_route_id| was
87 // put into |stubs_|. Hence, do not walk |stubs_| here but instead remember 104 // put into |stubs_|. Hence, do not walk |stubs_| here but instead remember
88 // all |renderer_route_id|s this was called for and use them later. 105 // all |renderer_route_id|s this was called for and use them later.
89 destroyed_renderer_routes_.insert(renderer_route_id); 106 destroyed_renderer_routes_.insert(renderer_route_id);
90 } 107 }
91 108
92 bool GpuChannel::IsRenderViewGone(int32 renderer_route_id) { 109 bool GpuChannel::IsRenderViewGone(int32 renderer_route_id) {
93 return destroyed_renderer_routes_.count(renderer_route_id) > 0; 110 return destroyed_renderer_routes_.count(renderer_route_id) > 0;
94 } 111 }
95 #endif 112 #endif
96 113
97 bool GpuChannel::OnControlMessageReceived(const IPC::Message& msg) { 114 bool GpuChannel::OnControlMessageReceived(const IPC::Message& msg) {
98 bool handled = true; 115 bool handled = true;
99 IPC_BEGIN_MESSAGE_MAP(GpuChannel, msg) 116 IPC_BEGIN_MESSAGE_MAP(GpuChannel, msg)
100 IPC_MESSAGE_HANDLER(GpuChannelMsg_CreateViewCommandBuffer,
101 OnCreateViewCommandBuffer)
102 IPC_MESSAGE_HANDLER(GpuChannelMsg_CreateOffscreenCommandBuffer, 117 IPC_MESSAGE_HANDLER(GpuChannelMsg_CreateOffscreenCommandBuffer,
103 OnCreateOffscreenCommandBuffer) 118 OnCreateOffscreenCommandBuffer)
104 IPC_MESSAGE_HANDLER(GpuChannelMsg_DestroyCommandBuffer, 119 IPC_MESSAGE_HANDLER(GpuChannelMsg_DestroyCommandBuffer,
105 OnDestroyCommandBuffer) 120 OnDestroyCommandBuffer)
106 IPC_MESSAGE_HANDLER(GpuChannelMsg_CreateVideoDecoder, 121 IPC_MESSAGE_HANDLER(GpuChannelMsg_CreateVideoDecoder,
107 OnCreateVideoDecoder) 122 OnCreateVideoDecoder)
108 IPC_MESSAGE_HANDLER(GpuChannelMsg_DestroyVideoDecoder, 123 IPC_MESSAGE_HANDLER(GpuChannelMsg_DestroyVideoDecoder,
109 OnDestroyVideoDecoder) 124 OnDestroyVideoDecoder)
110 IPC_MESSAGE_UNHANDLED(handled = false) 125 IPC_MESSAGE_UNHANDLED(handled = false)
111 IPC_END_MESSAGE_MAP() 126 IPC_END_MESSAGE_MAP()
112 DCHECK(handled); 127 DCHECK(handled);
113 return handled; 128 return handled;
114 } 129 }
115 130
116 int GpuChannel::GenerateRouteID() { 131 int GpuChannel::GenerateRouteID() {
117 static int last_id = 0; 132 static int last_id = 0;
118 return ++last_id; 133 return ++last_id;
119 } 134 }
120 135
121 void GpuChannel::OnCreateViewCommandBuffer(
122 gfx::NativeViewId view_id,
123 int32 render_view_id,
124 const GPUCreateCommandBufferConfig& init_params,
125 int32* route_id) {
126 *route_id = MSG_ROUTING_NONE;
127
128 #if defined(ENABLE_GPU)
129
130 gfx::PluginWindowHandle handle = gfx::kNullPluginWindow;
131 #if defined(OS_WIN)
132 // TODO(apatrick): We don't actually need the window handle on the Windows
133 // platform. At this point, it only indicates to the GpuCommandBufferStub
134 // whether onscreen or offscreen rendering is requested. The window handle
135 // that will be rendered to is the child compositor window and that window
136 // handle is provided by the browser process. Looking at what we are doing on
137 // this and other platforms, I think a redesign is in order here. Perhaps
138 // on all platforms the renderer just indicates whether it wants onscreen or
139 // offscreen rendering and the browser provides whichever platform specific
140 // "render target" the GpuCommandBufferStub targets.
141 handle = gfx::NativeViewFromId(view_id);
142 #elif defined(OS_LINUX)
143 // Ask the browser for the view's XID.
144 gpu_thread_->Send(new GpuHostMsg_GetViewXID(view_id, &handle));
145 #elif defined(OS_MACOSX)
146 // On Mac OS X we currently pass a (fake) PluginWindowHandle for the
147 // NativeViewId. We could allocate fake NativeViewIds on the browser
148 // side as well, and map between those and PluginWindowHandles, but
149 // this seems excessive.
150 handle = static_cast<gfx::PluginWindowHandle>(
151 static_cast<intptr_t>(view_id));
152 #else
153 // TODO(apatrick): This needs to be something valid for mac and linux.
154 // Offscreen rendering will work on these platforms but not rendering to the
155 // window.
156 DCHECK_EQ(view_id, 0);
157 #endif
158
159 *route_id = GenerateRouteID();
160 scoped_ptr<GpuCommandBufferStub> stub(new GpuCommandBufferStub(
161 this, handle, NULL, gfx::Size(), init_params.allowed_extensions,
162 init_params.attribs, 0, *route_id, renderer_id_, render_view_id));
163 router_.AddRoute(*route_id, stub.get());
164 stubs_.AddWithID(stub.release(), *route_id);
165 #endif // ENABLE_GPU
166 }
167
168 void GpuChannel::OnCreateOffscreenCommandBuffer( 136 void GpuChannel::OnCreateOffscreenCommandBuffer(
169 int32 parent_route_id, 137 int32 parent_route_id,
170 const gfx::Size& size, 138 const gfx::Size& size,
171 const GPUCreateCommandBufferConfig& init_params, 139 const GPUCreateCommandBufferConfig& init_params,
172 uint32 parent_texture_id, 140 uint32 parent_texture_id,
173 int32* route_id) { 141 int32* route_id) {
174 #if defined(ENABLE_GPU) 142 #if defined(ENABLE_GPU)
175 *route_id = GenerateRouteID(); 143 *route_id = GenerateRouteID();
176 GpuCommandBufferStub* parent_stub = NULL; 144 GpuCommandBufferStub* parent_stub = NULL;
177 if (parent_route_id != 0) 145 if (parent_route_id != 0)
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 #if defined(OS_POSIX) 224 #if defined(OS_POSIX)
257 int GpuChannel::GetRendererFileDescriptor() { 225 int GpuChannel::GetRendererFileDescriptor() {
258 int fd = -1; 226 int fd = -1;
259 if (channel_.get()) { 227 if (channel_.get()) {
260 fd = channel_->GetClientFileDescriptor(); 228 fd = channel_->GetClientFileDescriptor();
261 } 229 }
262 return fd; 230 return fd;
263 } 231 }
264 #endif // defined(OS_POSIX) 232 #endif // defined(OS_POSIX)
265 233
OLDNEW
« no previous file with comments | « chrome/gpu/gpu_channel.h ('k') | chrome/gpu/gpu_command_buffer_stub.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698