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

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

Issue 8625003: Revert 111040 - Reland 110355 - Use shared D3D9 texture to transport the compositor's backing buf... (Closed) Base URL: svn://svn.chromium.org/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
22 ImageTransportHelper::ImageTransportHelper(ImageTransportSurface* surface, 16 ImageTransportHelper::ImageTransportHelper(ImageTransportSurface* surface,
23 GpuChannelManager* manager, 17 GpuChannelManager* manager,
24 int32 render_view_id, 18 int32 render_view_id,
25 int32 renderer_id, 19 int32 renderer_id,
26 int32 command_buffer_id, 20 int32 command_buffer_id,
27 gfx::PluginWindowHandle handle) 21 gfx::PluginWindowHandle handle)
28 : surface_(surface), 22 : surface_(surface),
29 manager_(manager), 23 manager_(manager),
30 render_view_id_(render_view_id), 24 render_view_id_(render_view_id),
31 renderer_id_(renderer_id), 25 renderer_id_(renderer_id),
(...skipping 22 matching lines...) Expand all
54 void ImageTransportHelper::Destroy() { 48 void ImageTransportHelper::Destroy() {
55 } 49 }
56 50
57 bool ImageTransportHelper::OnMessageReceived(const IPC::Message& message) { 51 bool ImageTransportHelper::OnMessageReceived(const IPC::Message& message) {
58 bool handled = true; 52 bool handled = true;
59 IPC_BEGIN_MESSAGE_MAP(ImageTransportHelper, message) 53 IPC_BEGIN_MESSAGE_MAP(ImageTransportHelper, message)
60 IPC_MESSAGE_HANDLER(AcceleratedSurfaceMsg_BuffersSwappedACK, 54 IPC_MESSAGE_HANDLER(AcceleratedSurfaceMsg_BuffersSwappedACK,
61 OnBuffersSwappedACK) 55 OnBuffersSwappedACK)
62 IPC_MESSAGE_HANDLER(AcceleratedSurfaceMsg_NewACK, 56 IPC_MESSAGE_HANDLER(AcceleratedSurfaceMsg_NewACK,
63 OnNewSurfaceACK) 57 OnNewSurfaceACK)
64 IPC_MESSAGE_HANDLER(AcceleratedSurfaceMsg_ResizeViewACK, OnResizeViewACK);
65 IPC_MESSAGE_UNHANDLED(handled = false) 58 IPC_MESSAGE_UNHANDLED(handled = false)
66 IPC_END_MESSAGE_MAP() 59 IPC_END_MESSAGE_MAP()
67 return handled; 60 return handled;
68 } 61 }
69 62
70 void ImageTransportHelper::SendAcceleratedSurfaceRelease( 63 void ImageTransportHelper::SendAcceleratedSurfaceRelease(
71 GpuHostMsg_AcceleratedSurfaceRelease_Params params) { 64 GpuHostMsg_AcceleratedSurfaceRelease_Params params) {
72 params.renderer_id = renderer_id_; 65 params.renderer_id = renderer_id_;
73 params.render_view_id = render_view_id_; 66 params.render_view_id = render_view_id_;
74 params.route_id = route_id_; 67 params.route_id = route_id_;
(...skipping 15 matching lines...) Expand all
90 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params) { 83 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params) {
91 params.renderer_id = renderer_id_; 84 params.renderer_id = renderer_id_;
92 params.render_view_id = render_view_id_; 85 params.render_view_id = render_view_id_;
93 params.route_id = route_id_; 86 params.route_id = route_id_;
94 #if defined(OS_MACOSX) 87 #if defined(OS_MACOSX)
95 params.window = handle_; 88 params.window = handle_;
96 #endif 89 #endif
97 manager_->Send(new GpuHostMsg_AcceleratedSurfaceBuffersSwapped(params)); 90 manager_->Send(new GpuHostMsg_AcceleratedSurfaceBuffersSwapped(params));
98 } 91 }
99 92
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
107 void ImageTransportHelper::SetScheduled(bool is_scheduled) { 93 void ImageTransportHelper::SetScheduled(bool is_scheduled) {
108 gpu::GpuScheduler* scheduler = Scheduler(); 94 gpu::GpuScheduler* scheduler = Scheduler();
109 if (!scheduler) 95 if (!scheduler)
110 return; 96 return;
111 97
112 scheduler->SetScheduled(is_scheduled); 98 scheduler->SetScheduled(is_scheduled);
113 } 99 }
114 100
115 void ImageTransportHelper::DeferToFence(base::Closure task) {
116 gpu::GpuScheduler* scheduler = Scheduler();
117 DCHECK(scheduler);
118
119 scheduler->DeferToFence(task);
120 }
121
122 void ImageTransportHelper::OnBuffersSwappedACK() { 101 void ImageTransportHelper::OnBuffersSwappedACK() {
123 surface_->OnBuffersSwappedACK(); 102 surface_->OnBuffersSwappedACK();
124 } 103 }
125 104
126 void ImageTransportHelper::OnNewSurfaceACK( 105 void ImageTransportHelper::OnNewSurfaceACK(
127 uint64 surface_id, 106 uint64 surface_id,
128 TransportDIB::Handle shm_handle) { 107 TransportDIB::Handle shm_handle) {
129 surface_->OnNewSurfaceACK(surface_id, shm_handle); 108 surface_->OnNewSurfaceACK(surface_id, shm_handle);
130 } 109 }
131 110
132 void ImageTransportHelper::OnResizeViewACK() {
133 surface_->OnResizeViewACK();
134 }
135
136 void ImageTransportHelper::Resize(gfx::Size size) { 111 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
145 surface_->OnResize(size); 112 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();
164 } 113 }
165 114
166 bool ImageTransportHelper::MakeCurrent() { 115 bool ImageTransportHelper::MakeCurrent() {
167 gpu::gles2::GLES2Decoder* decoder = Decoder(); 116 gpu::gles2::GLES2Decoder* decoder = Decoder();
168 if (!decoder) 117 if (!decoder)
169 return false; 118 return false;
170 return decoder->MakeCurrent(); 119 return decoder->MakeCurrent();
171 } 120 }
172 121
173 gpu::GpuScheduler* ImageTransportHelper::Scheduler() { 122 gpu::GpuScheduler* ImageTransportHelper::Scheduler() {
(...skipping 15 matching lines...) Expand all
189 return NULL; 138 return NULL;
190 139
191 GpuCommandBufferStub* stub = 140 GpuCommandBufferStub* stub =
192 channel->LookupCommandBuffer(command_buffer_id_); 141 channel->LookupCommandBuffer(command_buffer_id_);
193 if (!stub) 142 if (!stub)
194 return NULL; 143 return NULL;
195 144
196 return stub->decoder(); 145 return stub->decoder();
197 } 146 }
198 147
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
242 #endif // defined(ENABLE_GPU) 148 #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