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

Side by Side Diff: webkit/plugins/ppapi/ppb_graphics_3d_impl.cc

Issue 5835007: Revert 69511 - Make Graphics3D::SwapBuffers take a completion callback... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 10 years 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 | « webkit/plugins/ppapi/ppb_graphics_3d_impl.h ('k') | no next file » | 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 "webkit/plugins/ppapi/ppb_graphics_3d_impl.h" 5 #include "webkit/plugins/ppapi/ppb_graphics_3d_impl.h"
6 6
7 #include "gpu/command_buffer/common/command_buffer.h" 7 #include "gpu/command_buffer/common/command_buffer.h"
8 #include "base/lazy_instance.h" 8 #include "base/lazy_instance.h"
9 #include "base/thread_local.h" 9 #include "base/thread_local.h"
10 #include "ppapi/c/dev/ppb_graphics_3d_dev.h" 10 #include "ppapi/c/dev/ppb_graphics_3d_dev.h"
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 Resource::GetAs<PPB_Graphics3D_Impl>(graphics3d)); 90 Resource::GetAs<PPB_Graphics3D_Impl>(graphics3d));
91 return BoolToPPBool(context.get() && context->MakeCurrent()); 91 return BoolToPPBool(context.get() && context->MakeCurrent());
92 } 92 }
93 } 93 }
94 94
95 PP_Resource GetCurrentContext() { 95 PP_Resource GetCurrentContext() {
96 PPB_Graphics3D_Impl* current_context = PPB_Graphics3D_Impl::GetCurrent(); 96 PPB_Graphics3D_Impl* current_context = PPB_Graphics3D_Impl::GetCurrent();
97 return current_context ? current_context->GetReference() : 0; 97 return current_context ? current_context->GetReference() : 0;
98 } 98 }
99 99
100 PP_Bool SwapBuffers(PP_Resource graphics3d, PP_CompletionCallback callback) { 100 PP_Bool SwapBuffers(PP_Resource graphics3d) {
101 scoped_refptr<PPB_Graphics3D_Impl> context( 101 scoped_refptr<PPB_Graphics3D_Impl> context(
102 Resource::GetAs<PPB_Graphics3D_Impl>(graphics3d)); 102 Resource::GetAs<PPB_Graphics3D_Impl>(graphics3d));
103 return BoolToPPBool(context && context->SwapBuffers(callback)); 103 return BoolToPPBool(context && context->SwapBuffers());
104 } 104 }
105 105
106 uint32_t GetError() { 106 uint32_t GetError() {
107 // Technically, this should return the last error that occurred on the current 107 // Technically, this should return the last error that occurred on the current
108 // thread, rather than an error associated with a particular context. 108 // thread, rather than an error associated with a particular context.
109 // TODO(apatrick): Fix this. 109 // TODO(apatrick): Fix this.
110 PPB_Graphics3D_Impl* current_context = PPB_Graphics3D_Impl::GetCurrent(); 110 PPB_Graphics3D_Impl* current_context = PPB_Graphics3D_Impl::GetCurrent();
111 if (!current_context) 111 if (!current_context)
112 return 0; 112 return 0;
113 113
(...skipping 11 matching lines...) Expand all
125 &MakeCurrent, 125 &MakeCurrent,
126 &GetCurrentContext, 126 &GetCurrentContext,
127 &SwapBuffers, 127 &SwapBuffers,
128 &GetError 128 &GetError
129 }; 129 };
130 130
131 } // namespace 131 } // namespace
132 132
133 PPB_Graphics3D_Impl::PPB_Graphics3D_Impl(PluginModule* module) 133 PPB_Graphics3D_Impl::PPB_Graphics3D_Impl(PluginModule* module)
134 : Resource(module), 134 : Resource(module),
135 bound_instance_(NULL), 135 bound_instance_(NULL) {
136 swap_initiated_(false),
137 swap_callback_(PP_BlockUntilComplete()) {
138 } 136 }
139 137
140 const PPB_Graphics3D_Dev* PPB_Graphics3D_Impl::GetInterface() { 138 const PPB_Graphics3D_Dev* PPB_Graphics3D_Impl::GetInterface() {
141 return &ppb_graphics3d; 139 return &ppb_graphics3d;
142 } 140 }
143 141
144 PPB_Graphics3D_Impl* PPB_Graphics3D_Impl::GetCurrent() { 142 PPB_Graphics3D_Impl* PPB_Graphics3D_Impl::GetCurrent() {
145 return g_current_context_key.Get().Get(); 143 return g_current_context_key.Get().Get();
146 } 144 }
147 145
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 bool PPB_Graphics3D_Impl::MakeCurrent() { 206 bool PPB_Graphics3D_Impl::MakeCurrent() {
209 if (!platform_context_.get()) 207 if (!platform_context_.get())
210 return false; 208 return false;
211 209
212 g_current_context_key.Get().Set(this); 210 g_current_context_key.Get().Set(this);
213 211
214 // TODO(apatrick): Return false on context lost. 212 // TODO(apatrick): Return false on context lost.
215 return true; 213 return true;
216 } 214 }
217 215
218 bool PPB_Graphics3D_Impl::SwapBuffers(PP_CompletionCallback callback) { 216 bool PPB_Graphics3D_Impl::SwapBuffers() {
219 if (!platform_context_.get()) 217 if (!platform_context_.get())
220 return false; 218 return false;
221 219
222 if (swap_callback_.func) {
223 // Already a pending SwapBuffers that hasn't returned yet.
224 return false;
225 }
226
227 swap_callback_ = callback;
228 return platform_context_->SwapBuffers(); 220 return platform_context_->SwapBuffers();
229 } 221 }
230 222
231 unsigned PPB_Graphics3D_Impl::GetError() { 223 unsigned PPB_Graphics3D_Impl::GetError() {
232 if (!platform_context_.get()) 224 if (!platform_context_.get())
233 return 0; 225 return 0;
234 226
235 return platform_context_->GetError(); 227 return platform_context_->GetError();
236 } 228 }
237 229
238 void PPB_Graphics3D_Impl::ResizeBackingTexture(const gfx::Size& size) { 230 void PPB_Graphics3D_Impl::ResizeBackingTexture(const gfx::Size& size) {
239 if (!platform_context_.get()) 231 if (!platform_context_.get())
240 return; 232 return;
241 233
242 platform_context_->ResizeBackingTexture(size); 234 platform_context_->ResizeBackingTexture(size);
243 } 235 }
244 236
245 void PPB_Graphics3D_Impl::SetSwapBuffersCallback(Callback0::Type* callback) { 237 void PPB_Graphics3D_Impl::SetSwapBuffersCallback(Callback0::Type* callback) {
246 if (!platform_context_.get()) 238 if (!platform_context_.get())
247 return; 239 return;
248 240
249 platform_context_->SetSwapBuffersCallback(callback); 241 platform_context_->SetSwapBuffersCallback(callback);
250 } 242 }
251 243
252 void PPB_Graphics3D_Impl::ViewInitiatedPaint() {
253 if (swap_callback_.func) {
254 swap_initiated_ = true;
255 }
256 }
257
258 void PPB_Graphics3D_Impl::ViewFlushedPaint() {
259 // Notify any "painted" callback. See |unpainted_flush_callback_| in the
260 // header for more.
261 if (swap_initiated_ && swap_callback_.func) {
262 // We must clear swap_callback_ before issuing the callback. It will be
263 // common for the plugin to issue another SwapBuffers in response to the
264 // callback, and we don't want to think that a callback is already pending.
265 PP_CompletionCallback callback = PP_BlockUntilComplete();
266 std::swap(callback, swap_callback_);
267 swap_initiated_ = false;
268 PP_RunCompletionCallback(&callback, PP_OK);
269 }
270 }
271
272 unsigned PPB_Graphics3D_Impl::GetBackingTextureId() { 244 unsigned PPB_Graphics3D_Impl::GetBackingTextureId() {
273 if (!platform_context_.get()) 245 if (!platform_context_.get())
274 return 0; 246 return 0;
275 247
276 return platform_context_->GetBackingTextureId(); 248 return platform_context_->GetBackingTextureId();
277 } 249 }
278 250
279 void PPB_Graphics3D_Impl::Destroy() { 251 void PPB_Graphics3D_Impl::Destroy() {
280 if (GetCurrent() == this) { 252 if (GetCurrent() == this) {
281 ResetCurrent(); 253 ResetCurrent();
282 } 254 }
283 255
284 gles2_implementation_ = NULL; 256 gles2_implementation_ = NULL;
285 257
286 platform_context_.reset(); 258 platform_context_.reset();
287 } 259 }
288 260
289 } // namespace ppapi 261 } // namespace ppapi
290 } // namespace webkit 262 } // namespace webkit
291 263
OLDNEW
« no previous file with comments | « webkit/plugins/ppapi/ppb_graphics_3d_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698