| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "platform/graphics/OffscreenCanvasFrameDispatcherImpl.h" | 5 #include "platform/graphics/OffscreenCanvasFrameDispatcherImpl.h" |
| 6 | 6 |
| 7 #include "cc/output/compositor_frame.h" | 7 #include "cc/output/compositor_frame.h" |
| 8 #include "cc/quads/texture_draw_quad.h" | 8 #include "cc/quads/texture_draw_quad.h" |
| 9 #include "gpu/command_buffer/client/gles2_interface.h" | 9 #include "gpu/command_buffer/client/gles2_interface.h" |
| 10 #include "platform/CrossThreadFunctional.h" | 10 #include "platform/CrossThreadFunctional.h" |
| (...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 392 break; | 392 break; |
| 393 case kOffscreenCanvasCommitTypeCount: | 393 case kOffscreenCanvasCommitTypeCount: |
| 394 NOTREACHED(); | 394 NOTREACHED(); |
| 395 } | 395 } |
| 396 | 396 |
| 397 if (change_size_for_next_commit_) { | 397 if (change_size_for_next_commit_) { |
| 398 current_local_surface_id_ = local_surface_id_allocator_.GenerateId(); | 398 current_local_surface_id_ = local_surface_id_allocator_.GenerateId(); |
| 399 change_size_for_next_commit_ = false; | 399 change_size_for_next_commit_ = false; |
| 400 } | 400 } |
| 401 | 401 |
| 402 compositor_has_pending_frame_ = true; |
| 402 sink_->SubmitCompositorFrame(current_local_surface_id_, std::move(frame)); | 403 sink_->SubmitCompositorFrame(current_local_surface_id_, std::move(frame)); |
| 403 } | 404 } |
| 404 | 405 |
| 405 void OffscreenCanvasFrameDispatcherImpl::DidReceiveCompositorFrameAck( | 406 void OffscreenCanvasFrameDispatcherImpl::DidReceiveCompositorFrameAck( |
| 406 const cc::ReturnedResourceArray& resources) { | 407 const cc::ReturnedResourceArray& resources) { |
| 407 ReclaimResources(resources); | 408 ReclaimResources(resources); |
| 408 // TODO(fsamuel): Implement this. | 409 compositor_has_pending_frame_ = false; |
| 409 } | 410 } |
| 410 | 411 |
| 411 void OffscreenCanvasFrameDispatcherImpl::SetNeedsBeginFrame( | 412 void OffscreenCanvasFrameDispatcherImpl::SetNeedsBeginFrame( |
| 412 bool needs_begin_frame) { | 413 bool needs_begin_frame) { |
| 413 if (sink_ && needs_begin_frame != needs_begin_frame_) { | 414 if (sink_ && needs_begin_frame != needs_begin_frame_) { |
| 414 needs_begin_frame_ = needs_begin_frame; | 415 needs_begin_frame_ = needs_begin_frame; |
| 415 sink_->SetNeedsBeginFrame(needs_begin_frame); | 416 sink_->SetNeedsBeginFrame(needs_begin_frame); |
| 416 } | 417 } |
| 417 } | 418 } |
| 418 | 419 |
| 419 void OffscreenCanvasFrameDispatcherImpl::OnBeginFrame( | 420 void OffscreenCanvasFrameDispatcherImpl::OnBeginFrame( |
| 420 const cc::BeginFrameArgs& begin_frame_args) { | 421 const cc::BeginFrameArgs& begin_frame_args) { |
| 421 DCHECK(Client()); | 422 DCHECK(Client()); |
| 423 |
| 422 // TODO(eseckler): Set correct |latest_confirmed_sequence_number|. | 424 // TODO(eseckler): Set correct |latest_confirmed_sequence_number|. |
| 423 current_begin_frame_ack_ = cc::BeginFrameAck( | 425 current_begin_frame_ack_ = cc::BeginFrameAck( |
| 424 begin_frame_args.source_id, begin_frame_args.sequence_number, | 426 begin_frame_args.source_id, begin_frame_args.sequence_number, |
| 425 begin_frame_args.sequence_number, false); | 427 begin_frame_args.sequence_number, false); |
| 428 |
| 429 if (compositor_has_pending_frame_ || |
| 430 (begin_frame_args.type == cc::BeginFrameArgs::MISSED && |
| 431 base::TimeTicks::Now() > begin_frame_args.deadline)) { |
| 432 sink_->BeginFrameDidNotSwap(current_begin_frame_ack_); |
| 433 return; |
| 434 } |
| 435 |
| 426 Client()->BeginFrame(); | 436 Client()->BeginFrame(); |
| 427 // TODO(eseckler): Tell |m_sink| if we did not draw during the BeginFrame. | 437 // TODO(eseckler): Tell |m_sink| if we did not draw during the BeginFrame. |
| 428 current_begin_frame_ack_.sequence_number = | 438 current_begin_frame_ack_.sequence_number = |
| 429 cc::BeginFrameArgs::kInvalidFrameNumber; | 439 cc::BeginFrameArgs::kInvalidFrameNumber; |
| 430 } | 440 } |
| 431 | 441 |
| 432 void OffscreenCanvasFrameDispatcherImpl::ReclaimResources( | 442 void OffscreenCanvasFrameDispatcherImpl::ReclaimResources( |
| 433 const cc::ReturnedResourceArray& resources) { | 443 const cc::ReturnedResourceArray& resources) { |
| 434 for (const auto& resource : resources) { | 444 for (const auto& resource : resources) { |
| 435 RefPtr<StaticBitmapImage> image = cached_images_.at(resource.id); | 445 RefPtr<StaticBitmapImage> image = cached_images_.at(resource.id); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 477 | 487 |
| 478 void OffscreenCanvasFrameDispatcherImpl::Reshape(int width, int height) { | 488 void OffscreenCanvasFrameDispatcherImpl::Reshape(int width, int height) { |
| 479 if (width_ != width || height_ != height) { | 489 if (width_ != width || height_ != height) { |
| 480 width_ = width; | 490 width_ = width; |
| 481 height_ = height; | 491 height_ = height; |
| 482 change_size_for_next_commit_ = true; | 492 change_size_for_next_commit_ = true; |
| 483 } | 493 } |
| 484 } | 494 } |
| 485 | 495 |
| 486 } // namespace blink | 496 } // namespace blink |
| OLD | NEW |