| 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 "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 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 307 "PPB_Graphics2D.ReplaceContents: Image size doesn't match " | 307 "PPB_Graphics2D.ReplaceContents: Image size doesn't match " |
| 308 "Graphics2D size."); | 308 "Graphics2D size."); |
| 309 return; | 309 return; |
| 310 } | 310 } |
| 311 | 311 |
| 312 QueuedOperation operation(QueuedOperation::REPLACE); | 312 QueuedOperation operation(QueuedOperation::REPLACE); |
| 313 operation.replace_image = image_resource; | 313 operation.replace_image = image_resource; |
| 314 queued_operations_.push_back(operation); | 314 queued_operations_.push_back(operation); |
| 315 } | 315 } |
| 316 | 316 |
| 317 int32_t PPB_Graphics2D_Impl::Flush(PP_CompletionCallback callback) { | 317 int32_t PPB_Graphics2D_Impl::Flush(scoped_refptr<TrackedCallback> callback) { |
| 318 TRACE_EVENT0("pepper", "PPB_Graphics2D_Impl::Flush"); | 318 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. | 319 // Don't allow more than one pending flush at a time. |
| 323 if (HasPendingFlush()) | 320 if (HasPendingFlush()) |
| 324 return PP_ERROR_INPROGRESS; | 321 return PP_ERROR_INPROGRESS; |
| 325 | 322 |
| 326 bool nothing_visible = true; | 323 bool nothing_visible = true; |
| 327 for (size_t i = 0; i < queued_operations_.size(); i++) { | 324 for (size_t i = 0; i < queued_operations_.size(); i++) { |
| 328 QueuedOperation& operation = queued_operations_[i]; | 325 QueuedOperation& operation = queued_operations_[i]; |
| 329 gfx::Rect op_rect; | 326 gfx::Rect op_rect; |
| 330 switch (operation.type) { | 327 switch (operation.type) { |
| 331 case QueuedOperation::PAINT: | 328 case QueuedOperation::PAINT: |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 367 } else { | 364 } else { |
| 368 bound_instance_->InvalidateRect(op_rect); | 365 bound_instance_->InvalidateRect(op_rect); |
| 369 } | 366 } |
| 370 } | 367 } |
| 371 } | 368 } |
| 372 queued_operations_.clear(); | 369 queued_operations_.clear(); |
| 373 | 370 |
| 374 if (nothing_visible) { | 371 if (nothing_visible) { |
| 375 // There's nothing visible to invalidate so just schedule the callback to | 372 // There's nothing visible to invalidate so just schedule the callback to |
| 376 // execute in the next round of the message loop. | 373 // execute in the next round of the message loop. |
| 377 ScheduleOffscreenCallback(FlushCallbackData( | 374 ScheduleOffscreenCallback(FlushCallbackData(callback)); |
| 378 scoped_refptr<TrackedCallback>(new TrackedCallback(this, callback)))); | |
| 379 } else { | 375 } else { |
| 380 unpainted_flush_callback_.Set( | 376 unpainted_flush_callback_.Set(callback); |
| 381 scoped_refptr<TrackedCallback>(new TrackedCallback(this, callback))); | |
| 382 } | 377 } |
| 383 return PP_OK_COMPLETIONPENDING; | 378 return PP_OK_COMPLETIONPENDING; |
| 384 } | 379 } |
| 385 | 380 |
| 386 bool PPB_Graphics2D_Impl::ReadImageData(PP_Resource image, | 381 bool PPB_Graphics2D_Impl::ReadImageData(PP_Resource image, |
| 387 const PP_Point* top_left) { | 382 const PP_Point* top_left) { |
| 388 // Get and validate the image object to paint into. | 383 // Get and validate the image object to paint into. |
| 389 EnterResourceNoLock<PPB_ImageData_API> enter(image, true); | 384 EnterResourceNoLock<PPB_ImageData_API> enter(image, true); |
| 390 if (enter.failed()) | 385 if (enter.failed()) |
| 391 return false; | 386 return false; |
| (...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 685 } | 680 } |
| 686 | 681 |
| 687 bool PPB_Graphics2D_Impl::HasPendingFlush() const { | 682 bool PPB_Graphics2D_Impl::HasPendingFlush() const { |
| 688 return !unpainted_flush_callback_.is_null() || | 683 return !unpainted_flush_callback_.is_null() || |
| 689 !painted_flush_callback_.is_null() || | 684 !painted_flush_callback_.is_null() || |
| 690 offscreen_flush_pending_; | 685 offscreen_flush_pending_; |
| 691 } | 686 } |
| 692 | 687 |
| 693 } // namespace ppapi | 688 } // namespace ppapi |
| 694 } // namespace webkit | 689 } // namespace webkit |
| OLD | NEW |