OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/common/gpu/gpu_channel_manager.h" | 5 #include "content/common/gpu/gpu_channel_manager.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "content/common/gpu/gpu_channel.h" | 9 #include "content/common/gpu/gpu_channel.h" |
10 #include "content/common/gpu/gpu_memory_buffer_factory.h" | 10 #include "content/common/gpu/gpu_memory_buffer_factory.h" |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
107 gpu_memory_buffer_factory_( | 107 gpu_memory_buffer_factory_( |
108 GpuMemoryBufferFactory::Create(GetGpuMemoryBufferFactoryType())), | 108 GpuMemoryBufferFactory::Create(GetGpuMemoryBufferFactoryType())), |
109 channel_(channel), | 109 channel_(channel), |
110 filter_( | 110 filter_( |
111 new GpuChannelManagerMessageFilter(gpu_memory_buffer_factory_.get())), | 111 new GpuChannelManagerMessageFilter(gpu_memory_buffer_factory_.get())), |
112 weak_factory_(this) { | 112 weak_factory_(this) { |
113 DCHECK(router_); | 113 DCHECK(router_); |
114 DCHECK(io_message_loop); | 114 DCHECK(io_message_loop); |
115 DCHECK(shutdown_event); | 115 DCHECK(shutdown_event); |
116 channel_->AddFilter(filter_.get()); | 116 channel_->AddFilter(filter_.get()); |
| 117 subscription_ref_set_ = new gpu::gles2::SubscriptionRefSet(); |
| 118 subscription_ref_set_->AddObserver(this); |
117 } | 119 } |
118 | 120 |
119 GpuChannelManager::~GpuChannelManager() { | 121 GpuChannelManager::~GpuChannelManager() { |
120 gpu_channels_.clear(); | 122 gpu_channels_.clear(); |
| 123 subscription_ref_set_->RemoveObserver(this); |
121 if (default_offscreen_surface_.get()) { | 124 if (default_offscreen_surface_.get()) { |
122 default_offscreen_surface_->Destroy(); | 125 default_offscreen_surface_->Destroy(); |
123 default_offscreen_surface_ = NULL; | 126 default_offscreen_surface_ = NULL; |
124 } | 127 } |
125 } | 128 } |
126 | 129 |
127 gpu::gles2::ProgramCache* GpuChannelManager::program_cache() { | 130 gpu::gles2::ProgramCache* GpuChannelManager::program_cache() { |
128 if (!program_cache_.get() && | 131 if (!program_cache_.get() && |
129 (gfx::g_driver_gl.ext.b_GL_ARB_get_program_binary || | 132 (gfx::g_driver_gl.ext.b_GL_ARB_get_program_binary || |
130 gfx::g_driver_gl.ext.b_GL_OES_get_program_binary) && | 133 gfx::g_driver_gl.ext.b_GL_OES_get_program_binary) && |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
179 IPC_MESSAGE_HANDLER(GpuMsg_LoadedShader, OnLoadedShader) | 182 IPC_MESSAGE_HANDLER(GpuMsg_LoadedShader, OnLoadedShader) |
180 IPC_MESSAGE_HANDLER(GpuMsg_RelinquishResources, OnRelinquishResources) | 183 IPC_MESSAGE_HANDLER(GpuMsg_RelinquishResources, OnRelinquishResources) |
181 IPC_MESSAGE_HANDLER(GpuMsg_UpdateValueState, OnUpdateValueState) | 184 IPC_MESSAGE_HANDLER(GpuMsg_UpdateValueState, OnUpdateValueState) |
182 IPC_MESSAGE_UNHANDLED(handled = false) | 185 IPC_MESSAGE_UNHANDLED(handled = false) |
183 IPC_END_MESSAGE_MAP() | 186 IPC_END_MESSAGE_MAP() |
184 return handled; | 187 return handled; |
185 } | 188 } |
186 | 189 |
187 bool GpuChannelManager::Send(IPC::Message* msg) { return router_->Send(msg); } | 190 bool GpuChannelManager::Send(IPC::Message* msg) { return router_->Send(msg); } |
188 | 191 |
| 192 void GpuChannelManager::OnAddSubscription(unsigned int target) { |
| 193 Send(new GpuHostMsg_AddSubscription(target)); |
| 194 } |
| 195 |
| 196 void GpuChannelManager::OnRemoveSubscription(unsigned int target) { |
| 197 Send(new GpuHostMsg_RemoveSubscription(target)); |
| 198 } |
| 199 |
189 void GpuChannelManager::OnEstablishChannel(int client_id, | 200 void GpuChannelManager::OnEstablishChannel(int client_id, |
190 bool share_context, | 201 bool share_context, |
191 bool allow_future_sync_points) { | 202 bool allow_future_sync_points) { |
192 IPC::ChannelHandle channel_handle; | 203 IPC::ChannelHandle channel_handle; |
193 | 204 |
194 gfx::GLShareGroup* share_group = NULL; | 205 gfx::GLShareGroup* share_group = NULL; |
195 gpu::gles2::MailboxManager* mailbox_manager = NULL; | 206 gpu::gles2::MailboxManager* mailbox_manager = NULL; |
196 if (share_context) { | 207 if (share_context) { |
197 if (!share_group_.get()) { | 208 if (!share_group_.get()) { |
198 share_group_ = new gfx::GLShareGroup; | 209 share_group_ = new gfx::GLShareGroup; |
199 DCHECK(!mailbox_manager_.get()); | 210 DCHECK(!mailbox_manager_.get()); |
200 mailbox_manager_ = new gpu::gles2::MailboxManagerImpl; | 211 mailbox_manager_ = new gpu::gles2::MailboxManagerImpl; |
201 } | 212 } |
202 share_group = share_group_.get(); | 213 share_group = share_group_.get(); |
203 mailbox_manager = mailbox_manager_.get(); | 214 mailbox_manager = mailbox_manager_.get(); |
204 } | 215 } |
205 | 216 |
206 scoped_ptr<GpuChannel> channel(new GpuChannel(this, | 217 scoped_ptr<GpuChannel> channel(new GpuChannel(this, |
207 watchdog_, | 218 watchdog_, |
208 share_group, | 219 share_group, |
209 mailbox_manager, | 220 mailbox_manager, |
| 221 subscription_ref_set_.get(), |
210 client_id, | 222 client_id, |
211 false, | 223 false, |
212 allow_future_sync_points)); | 224 allow_future_sync_points)); |
213 channel->Init(io_message_loop_.get(), shutdown_event_); | 225 channel->Init(io_message_loop_.get(), shutdown_event_); |
214 channel_handle.name = channel->GetChannelName(); | 226 channel_handle.name = channel->GetChannelName(); |
215 | 227 |
216 #if defined(OS_POSIX) | 228 #if defined(OS_POSIX) |
217 // On POSIX, pass the renderer-side FD. Also mark it as auto-close so | 229 // On POSIX, pass the renderer-side FD. Also mark it as auto-close so |
218 // that it gets closed after it has been sent. | 230 // that it gets closed after it has been sent. |
219 base::ScopedFD renderer_fd = channel->TakeRendererFileDescriptor(); | 231 base::ScopedFD renderer_fd = channel->TakeRendererFileDescriptor(); |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
359 #else | 371 #else |
360 OnResourcesRelinquished(); | 372 OnResourcesRelinquished(); |
361 #endif | 373 #endif |
362 } | 374 } |
363 | 375 |
364 void GpuChannelManager::OnResourcesRelinquished() { | 376 void GpuChannelManager::OnResourcesRelinquished() { |
365 Send(new GpuHostMsg_ResourcesRelinquished()); | 377 Send(new GpuHostMsg_ResourcesRelinquished()); |
366 } | 378 } |
367 | 379 |
368 } // namespace content | 380 } // namespace content |
OLD | NEW |