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

Side by Side Diff: content/common/gpu/image_transport_surface.cc

Issue 8060045: Use shared D3D9 texture to transport the compositor's backing buffer to the browser... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 1 month 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
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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(ENABLE_GPU) 5 #if defined(ENABLE_GPU)
6 6
7 #include "content/common/gpu/image_transport_surface.h" 7 #include "content/common/gpu/image_transport_surface.h"
8 8
9 #include "base/callback.h" 9 #include "base/callback.h"
10 #include "content/common/gpu/gpu_channel.h" 10 #include "content/common/gpu/gpu_channel.h"
11 #include "content/common/gpu/gpu_channel_manager.h" 11 #include "content/common/gpu/gpu_channel_manager.h"
12 #include "content/common/gpu/gpu_command_buffer_stub.h" 12 #include "content/common/gpu/gpu_command_buffer_stub.h"
13 #include "content/common/gpu/gpu_messages.h" 13 #include "content/common/gpu/gpu_messages.h"
14 #include "gpu/command_buffer/service/gpu_scheduler.h" 14 #include "gpu/command_buffer/service/gpu_scheduler.h"
15 15
16 ImageTransportSurface::ImageTransportSurface() {
17 }
18
19 ImageTransportSurface::~ImageTransportSurface() {
20 }
21
16 ImageTransportHelper::ImageTransportHelper(ImageTransportSurface* surface, 22 ImageTransportHelper::ImageTransportHelper(ImageTransportSurface* surface,
17 GpuChannelManager* manager, 23 GpuChannelManager* manager,
18 int32 render_view_id, 24 int32 render_view_id,
19 int32 renderer_id, 25 int32 renderer_id,
20 int32 command_buffer_id, 26 int32 command_buffer_id,
21 gfx::PluginWindowHandle handle) 27 gfx::PluginWindowHandle handle)
22 : surface_(surface), 28 : surface_(surface),
23 manager_(manager), 29 manager_(manager),
24 render_view_id_(render_view_id), 30 render_view_id_(render_view_id),
25 renderer_id_(renderer_id), 31 renderer_id_(renderer_id),
(...skipping 22 matching lines...) Expand all
48 void ImageTransportHelper::Destroy() { 54 void ImageTransportHelper::Destroy() {
49 } 55 }
50 56
51 bool ImageTransportHelper::OnMessageReceived(const IPC::Message& message) { 57 bool ImageTransportHelper::OnMessageReceived(const IPC::Message& message) {
52 bool handled = true; 58 bool handled = true;
53 IPC_BEGIN_MESSAGE_MAP(ImageTransportHelper, message) 59 IPC_BEGIN_MESSAGE_MAP(ImageTransportHelper, message)
54 IPC_MESSAGE_HANDLER(AcceleratedSurfaceMsg_BuffersSwappedACK, 60 IPC_MESSAGE_HANDLER(AcceleratedSurfaceMsg_BuffersSwappedACK,
55 OnBuffersSwappedACK) 61 OnBuffersSwappedACK)
56 IPC_MESSAGE_HANDLER(AcceleratedSurfaceMsg_NewACK, 62 IPC_MESSAGE_HANDLER(AcceleratedSurfaceMsg_NewACK,
57 OnNewSurfaceACK) 63 OnNewSurfaceACK)
64 IPC_MESSAGE_HANDLER(AcceleratedSurfaceMsg_ResizeViewACK, OnResizeViewACK);
58 IPC_MESSAGE_UNHANDLED(handled = false) 65 IPC_MESSAGE_UNHANDLED(handled = false)
59 IPC_END_MESSAGE_MAP() 66 IPC_END_MESSAGE_MAP()
60 return handled; 67 return handled;
61 } 68 }
62 69
63 void ImageTransportHelper::SendAcceleratedSurfaceRelease( 70 void ImageTransportHelper::SendAcceleratedSurfaceRelease(
64 GpuHostMsg_AcceleratedSurfaceRelease_Params params) { 71 GpuHostMsg_AcceleratedSurfaceRelease_Params params) {
65 params.renderer_id = renderer_id_; 72 params.renderer_id = renderer_id_;
66 params.render_view_id = render_view_id_; 73 params.render_view_id = render_view_id_;
67 params.route_id = route_id_; 74 params.route_id = route_id_;
(...skipping 15 matching lines...) Expand all
83 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params) { 90 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params) {
84 params.renderer_id = renderer_id_; 91 params.renderer_id = renderer_id_;
85 params.render_view_id = render_view_id_; 92 params.render_view_id = render_view_id_;
86 params.route_id = route_id_; 93 params.route_id = route_id_;
87 #if defined(OS_MACOSX) 94 #if defined(OS_MACOSX)
88 params.window = handle_; 95 params.window = handle_;
89 #endif 96 #endif
90 manager_->Send(new GpuHostMsg_AcceleratedSurfaceBuffersSwapped(params)); 97 manager_->Send(new GpuHostMsg_AcceleratedSurfaceBuffersSwapped(params));
91 } 98 }
92 99
100 void ImageTransportHelper::SendResizeView(const gfx::Size& size) {
101 manager_->Send(new GpuHostMsg_ResizeView(renderer_id_,
102 render_view_id_,
103 route_id_,
104 size));
105 }
106
93 void ImageTransportHelper::SetScheduled(bool is_scheduled) { 107 void ImageTransportHelper::SetScheduled(bool is_scheduled) {
94 gpu::GpuScheduler* scheduler = Scheduler(); 108 gpu::GpuScheduler* scheduler = Scheduler();
95 if (!scheduler) 109 if (!scheduler)
96 return; 110 return;
97 111
98 scheduler->SetScheduled(is_scheduled); 112 scheduler->SetScheduled(is_scheduled);
99 } 113 }
100 114
115 void ImageTransportHelper::DeferToFence(base::Closure task) {
116 gpu::GpuScheduler* scheduler = Scheduler();
117 DCHECK(scheduler);
118
119 scheduler->DeferToFence(task);
120 }
121
101 void ImageTransportHelper::OnBuffersSwappedACK() { 122 void ImageTransportHelper::OnBuffersSwappedACK() {
102 surface_->OnBuffersSwappedACK(); 123 surface_->OnBuffersSwappedACK();
103 } 124 }
104 125
105 void ImageTransportHelper::OnNewSurfaceACK( 126 void ImageTransportHelper::OnNewSurfaceACK(
106 uint64 surface_id, 127 uint64 surface_id,
107 TransportDIB::Handle shm_handle) { 128 TransportDIB::Handle shm_handle) {
108 surface_->OnNewSurfaceACK(surface_id, shm_handle); 129 surface_->OnNewSurfaceACK(surface_id, shm_handle);
109 } 130 }
110 131
132 void ImageTransportHelper::OnResizeViewACK() {
133 surface_->OnResizeViewACK();
134 }
135
111 void ImageTransportHelper::Resize(gfx::Size size) { 136 void ImageTransportHelper::Resize(gfx::Size size) {
137 // On windows, the surface is recreated and, in case the newly allocated
138 // surface happens to have the same address, it should be invalidated on the
139 // decoder so that future calls to MakeCurrent do not early out on the
140 // assumption that neither the context or surface have actually changed.
141 #if defined(OS_WIN)
142 Decoder()->ReleaseCurrent();
143 #endif
144
112 surface_->OnResize(size); 145 surface_->OnResize(size);
146
147 #if defined(OS_WIN)
148 Decoder()->MakeCurrent();
149 SetSwapInterval();
150 #endif
151 }
152
153 void ImageTransportHelper::SetSwapInterval() {
154 GpuChannel* channel = manager_->LookupChannel(renderer_id_);
155 if (!channel)
156 return;
157
158 GpuCommandBufferStub* stub =
159 channel->LookupCommandBuffer(command_buffer_id_);
160 if (!stub)
161 return;
162
163 stub->SetSwapInterval();
113 } 164 }
114 165
115 bool ImageTransportHelper::MakeCurrent() { 166 bool ImageTransportHelper::MakeCurrent() {
116 gpu::gles2::GLES2Decoder* decoder = Decoder(); 167 gpu::gles2::GLES2Decoder* decoder = Decoder();
117 if (!decoder) 168 if (!decoder)
118 return false; 169 return false;
119 return decoder->MakeCurrent(); 170 return decoder->MakeCurrent();
120 } 171 }
121 172
122 gpu::GpuScheduler* ImageTransportHelper::Scheduler() { 173 gpu::GpuScheduler* ImageTransportHelper::Scheduler() {
(...skipping 15 matching lines...) Expand all
138 return NULL; 189 return NULL;
139 190
140 GpuCommandBufferStub* stub = 191 GpuCommandBufferStub* stub =
141 channel->LookupCommandBuffer(command_buffer_id_); 192 channel->LookupCommandBuffer(command_buffer_id_);
142 if (!stub) 193 if (!stub)
143 return NULL; 194 return NULL;
144 195
145 return stub->decoder(); 196 return stub->decoder();
146 } 197 }
147 198
199 PassThroughImageTransportSurface::PassThroughImageTransportSurface(
200 GpuChannelManager* manager,
201 int32 render_view_id,
202 int32 renderer_id,
203 int32 command_buffer_id,
204 gfx::GLSurface* surface) : GLSurfaceAdapter(surface) {
205 helper_.reset(new ImageTransportHelper(this,
206 manager,
207 render_view_id,
208 renderer_id,
209 command_buffer_id,
210 gfx::kNullPluginWindow));
211 }
212
213 PassThroughImageTransportSurface::~PassThroughImageTransportSurface() {
214 }
215
216 bool PassThroughImageTransportSurface::Initialize() {
217 // The surface is assumed to have already been initialized.
218 return helper_->Initialize();
219 }
220
221 void PassThroughImageTransportSurface::Destroy() {
222 helper_->Destroy();
223 GLSurfaceAdapter::Destroy();
224 }
225
226 void PassThroughImageTransportSurface::OnNewSurfaceACK(
227 uint64 surface_id, TransportDIB::Handle surface_handle) {
228 }
229
230 void PassThroughImageTransportSurface::OnBuffersSwappedACK() {
231 }
232
233 void PassThroughImageTransportSurface::OnResizeViewACK() {
234 helper_->SetScheduled(true);
235 }
236
237 void PassThroughImageTransportSurface::OnResize(gfx::Size size) {
238 helper_->SendResizeView(size);
239 helper_->SetScheduled(false);
240 }
241
148 #endif // defined(ENABLE_GPU) 242 #endif // defined(ENABLE_GPU)
OLDNEW
« no previous file with comments | « content/common/gpu/image_transport_surface.h ('k') | content/common/gpu/image_transport_surface_linux.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698