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

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

Issue 10081020: PPAPI: Make blocking completion callbacks work. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Updated TestURLLoader to test blocking callbacks. Created 8 years, 8 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
OLDNEW
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 "webkit/plugins/ppapi/ppb_graphics_2d_impl.h" 5 #include "webkit/plugins/ppapi/ppb_graphics_2d_impl.h"
6 6
7 #include <iterator> 7 #include <iterator>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 14 matching lines...) Expand all
25 #include "webkit/plugins/ppapi/gfx_conversion.h" 25 #include "webkit/plugins/ppapi/gfx_conversion.h"
26 #include "webkit/plugins/ppapi/ppapi_plugin_instance.h" 26 #include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
27 #include "webkit/plugins/ppapi/ppb_image_data_impl.h" 27 #include "webkit/plugins/ppapi/ppb_image_data_impl.h"
28 #include "webkit/plugins/ppapi/resource_helper.h" 28 #include "webkit/plugins/ppapi/resource_helper.h"
29 29
30 #if defined(OS_MACOSX) 30 #if defined(OS_MACOSX)
31 #include "base/mac/mac_util.h" 31 #include "base/mac/mac_util.h"
32 #include "base/mac/scoped_cftyperef.h" 32 #include "base/mac/scoped_cftyperef.h"
33 #endif 33 #endif
34 34
35 using ppapi::ApiCallbackType;
35 using ppapi::thunk::EnterResourceNoLock; 36 using ppapi::thunk::EnterResourceNoLock;
36 using ppapi::thunk::PPB_ImageData_API; 37 using ppapi::thunk::PPB_ImageData_API;
37 using ppapi::TrackedCallback; 38 using ppapi::TrackedCallback;
38 39
39 namespace webkit { 40 namespace webkit {
40 namespace ppapi { 41 namespace ppapi {
41 42
42 namespace { 43 namespace {
43 44
44 // Converts a rect inside an image of the given dimensions. The rect may be 45 // Converts a rect inside an image of the given dimensions. The rect may be
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 "PPB_Graphics2D.ReplaceContents: Image size doesn't match " 308 "PPB_Graphics2D.ReplaceContents: Image size doesn't match "
308 "Graphics2D size."); 309 "Graphics2D size.");
309 return; 310 return;
310 } 311 }
311 312
312 QueuedOperation operation(QueuedOperation::REPLACE); 313 QueuedOperation operation(QueuedOperation::REPLACE);
313 operation.replace_image = image_resource; 314 operation.replace_image = image_resource;
314 queued_operations_.push_back(operation); 315 queued_operations_.push_back(operation);
315 } 316 }
316 317
317 int32_t PPB_Graphics2D_Impl::Flush(PP_CompletionCallback callback) { 318 int32_t PPB_Graphics2D_Impl::Flush(ApiCallbackType callback) {
318 TRACE_EVENT0("pepper", "PPB_Graphics2D_Impl::Flush"); 319 TRACE_EVENT0("pepper", "PPB_Graphics2D_Impl::Flush");
319 if (!callback.func)
320 return PP_ERROR_BLOCKS_MAIN_THREAD;
321
322 // Don't allow more than one pending flush at a time. 320 // Don't allow more than one pending flush at a time.
323 if (HasPendingFlush()) 321 if (HasPendingFlush())
324 return PP_ERROR_INPROGRESS; 322 return PP_ERROR_INPROGRESS;
325 323
326 bool nothing_visible = true; 324 bool nothing_visible = true;
327 for (size_t i = 0; i < queued_operations_.size(); i++) { 325 for (size_t i = 0; i < queued_operations_.size(); i++) {
328 QueuedOperation& operation = queued_operations_[i]; 326 QueuedOperation& operation = queued_operations_[i];
329 gfx::Rect op_rect; 327 gfx::Rect op_rect;
330 switch (operation.type) { 328 switch (operation.type) {
331 case QueuedOperation::PAINT: 329 case QueuedOperation::PAINT:
(...skipping 30 matching lines...) Expand all
362 bound_instance_->InvalidateRect(visible_changed_rect); 360 bound_instance_->InvalidateRect(visible_changed_rect);
363 } 361 }
364 nothing_visible = false; 362 nothing_visible = false;
365 } 363 }
366 } 364 }
367 queued_operations_.clear(); 365 queued_operations_.clear();
368 366
369 if (nothing_visible) { 367 if (nothing_visible) {
370 // There's nothing visible to invalidate so just schedule the callback to 368 // There's nothing visible to invalidate so just schedule the callback to
371 // execute in the next round of the message loop. 369 // execute in the next round of the message loop.
372 ScheduleOffscreenCallback(FlushCallbackData( 370 ScheduleOffscreenCallback(FlushCallbackData(callback));
373 scoped_refptr<TrackedCallback>(new TrackedCallback(this, callback))));
374 } else { 371 } else {
375 unpainted_flush_callback_.Set( 372 unpainted_flush_callback_.Set(callback);
376 scoped_refptr<TrackedCallback>(new TrackedCallback(this, callback)));
377 } 373 }
378 return PP_OK_COMPLETIONPENDING; 374 return PP_OK_COMPLETIONPENDING;
379 } 375 }
380 376
381 bool PPB_Graphics2D_Impl::ReadImageData(PP_Resource image, 377 bool PPB_Graphics2D_Impl::ReadImageData(PP_Resource image,
382 const PP_Point* top_left) { 378 const PP_Point* top_left) {
383 // Get and validate the image object to paint into. 379 // Get and validate the image object to paint into.
384 EnterResourceNoLock<PPB_ImageData_API> enter(image, true); 380 EnterResourceNoLock<PPB_ImageData_API> enter(image, true);
385 if (enter.failed()) 381 if (enter.failed())
386 return false; 382 return false;
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after
680 } 676 }
681 677
682 bool PPB_Graphics2D_Impl::HasPendingFlush() const { 678 bool PPB_Graphics2D_Impl::HasPendingFlush() const {
683 return !unpainted_flush_callback_.is_null() || 679 return !unpainted_flush_callback_.is_null() ||
684 !painted_flush_callback_.is_null() || 680 !painted_flush_callback_.is_null() ||
685 offscreen_flush_pending_; 681 offscreen_flush_pending_;
686 } 682 }
687 683
688 } // namespace ppapi 684 } // namespace ppapi
689 } // namespace webkit 685 } // namespace webkit
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698