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 "content/browser/renderer_host/compositor_impl_android.h" | 5 #include "content/browser/renderer_host/compositor_impl_android.h" |
6 | 6 |
7 #include <android/bitmap.h> | 7 #include <android/bitmap.h> |
8 #include <android/native_window_jni.h> | 8 #include <android/native_window_jni.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 #include <unordered_set> | 10 #include <unordered_set> |
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
327 CompositorImpl::CompositorImpl(CompositorClient* client, | 327 CompositorImpl::CompositorImpl(CompositorClient* client, |
328 gfx::NativeWindow root_window) | 328 gfx::NativeWindow root_window) |
329 : frame_sink_id_( | 329 : frame_sink_id_( |
330 ui::ContextProviderFactory::GetInstance()->AllocateFrameSinkId()), | 330 ui::ContextProviderFactory::GetInstance()->AllocateFrameSinkId()), |
331 resource_manager_(root_window), | 331 resource_manager_(root_window), |
332 window_(NULL), | 332 window_(NULL), |
333 surface_handle_(gpu::kNullSurfaceHandle), | 333 surface_handle_(gpu::kNullSurfaceHandle), |
334 client_(client), | 334 client_(client), |
335 root_window_(root_window), | 335 root_window_(root_window), |
336 needs_animate_(false), | 336 needs_animate_(false), |
337 pending_swapbuffers_(0U), | 337 pending_frames_(0U), |
338 num_successive_context_creation_failures_(0), | 338 num_successive_context_creation_failures_(0), |
339 compositor_frame_sink_request_pending_(false), | 339 compositor_frame_sink_request_pending_(false), |
340 weak_factory_(this) { | 340 weak_factory_(this) { |
341 ui::ContextProviderFactory::GetInstance() | 341 ui::ContextProviderFactory::GetInstance() |
342 ->GetSurfaceManager() | 342 ->GetSurfaceManager() |
343 ->RegisterFrameSinkId(frame_sink_id_); | 343 ->RegisterFrameSinkId(frame_sink_id_); |
344 DCHECK(client); | 344 DCHECK(client); |
345 DCHECK(root_window); | 345 DCHECK(root_window); |
346 DCHECK(root_window->GetLayer() == nullptr); | 346 DCHECK(root_window->GetLayer() == nullptr); |
347 root_window->SetLayer(cc::Layer::Create()); | 347 root_window->SetLayer(cc::Layer::Create()); |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
460 | 460 |
461 // Make a best effort to try to complete pending readbacks. | 461 // Make a best effort to try to complete pending readbacks. |
462 // TODO(crbug.com/637035): Consider doing this in a better way, | 462 // TODO(crbug.com/637035): Consider doing this in a better way, |
463 // ideally with the guarantee of readbacks completing. | 463 // ideally with the guarantee of readbacks completing. |
464 if (display_.get() && HavePendingReadbacks()) | 464 if (display_.get() && HavePendingReadbacks()) |
465 display_->ForceImmediateDrawAndSwapIfPossible(); | 465 display_->ForceImmediateDrawAndSwapIfPossible(); |
466 | 466 |
467 host_->SetVisible(false); | 467 host_->SetVisible(false); |
468 host_->ReleaseCompositorFrameSink(); | 468 host_->ReleaseCompositorFrameSink(); |
469 has_compositor_frame_sink_ = false; | 469 has_compositor_frame_sink_ = false; |
470 pending_swapbuffers_ = 0; | 470 pending_frames_ = 0; |
471 display_.reset(); | 471 display_.reset(); |
472 } else { | 472 } else { |
473 host_->SetVisible(true); | 473 host_->SetVisible(true); |
474 if (compositor_frame_sink_request_pending_) | 474 if (compositor_frame_sink_request_pending_) |
475 HandlePendingCompositorFrameSinkRequest(); | 475 HandlePendingCompositorFrameSinkRequest(); |
476 } | 476 } |
477 } | 477 } |
478 | 478 |
479 void CompositorImpl::SetWindowBounds(const gfx::Size& size) { | 479 void CompositorImpl::SetWindowBounds(const gfx::Size& size) { |
480 if (size_ == size) | 480 if (size_ == size) |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
638 break; | 638 break; |
639 } | 639 } |
640 } | 640 } |
641 | 641 |
642 void CompositorImpl::InitializeDisplay( | 642 void CompositorImpl::InitializeDisplay( |
643 std::unique_ptr<cc::OutputSurface> display_output_surface, | 643 std::unique_ptr<cc::OutputSurface> display_output_surface, |
644 scoped_refptr<cc::VulkanContextProvider> vulkan_context_provider, | 644 scoped_refptr<cc::VulkanContextProvider> vulkan_context_provider, |
645 scoped_refptr<cc::ContextProvider> context_provider) { | 645 scoped_refptr<cc::ContextProvider> context_provider) { |
646 DCHECK(compositor_frame_sink_request_pending_); | 646 DCHECK(compositor_frame_sink_request_pending_); |
647 | 647 |
648 pending_swapbuffers_ = 0; | 648 pending_frames_ = 0; |
649 num_successive_context_creation_failures_ = 0; | 649 num_successive_context_creation_failures_ = 0; |
650 | 650 |
651 if (context_provider) { | 651 if (context_provider) { |
652 gpu_capabilities_ = context_provider->ContextCapabilities(); | 652 gpu_capabilities_ = context_provider->ContextCapabilities(); |
653 } else { | 653 } else { |
654 // TODO(danakj): Populate gpu_capabilities_ for VulkanContextProvider. | 654 // TODO(danakj): Populate gpu_capabilities_ for VulkanContextProvider. |
655 } | 655 } |
656 | 656 |
657 cc::SurfaceManager* manager = | 657 cc::SurfaceManager* manager = |
658 ui::ContextProviderFactory::GetInstance()->GetSurfaceManager(); | 658 ui::ContextProviderFactory::GetInstance()->GetSurfaceManager(); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
693 TRACE_EVENT0("compositor", "CompositorImpl::DeleteUIResource"); | 693 TRACE_EVENT0("compositor", "CompositorImpl::DeleteUIResource"); |
694 host_->GetUIResourceManager()->DeleteUIResource(resource_id); | 694 host_->GetUIResourceManager()->DeleteUIResource(resource_id); |
695 } | 695 } |
696 | 696 |
697 bool CompositorImpl::SupportsETC1NonPowerOfTwo() const { | 697 bool CompositorImpl::SupportsETC1NonPowerOfTwo() const { |
698 return gpu_capabilities_.texture_format_etc1_npot; | 698 return gpu_capabilities_.texture_format_etc1_npot; |
699 } | 699 } |
700 | 700 |
701 void CompositorImpl::DidSubmitCompositorFrame() { | 701 void CompositorImpl::DidSubmitCompositorFrame() { |
702 TRACE_EVENT0("compositor", "CompositorImpl::DidSubmitCompositorFrame"); | 702 TRACE_EVENT0("compositor", "CompositorImpl::DidSubmitCompositorFrame"); |
703 pending_swapbuffers_++; | 703 pending_frames_++; |
704 } | 704 } |
705 | 705 |
706 void CompositorImpl::DidReceiveCompositorFrameAck() { | 706 void CompositorImpl::DidReceiveCompositorFrameAck() { |
707 TRACE_EVENT0("compositor", "CompositorImpl::DidReceiveCompositorFrameAck"); | 707 TRACE_EVENT0("compositor", "CompositorImpl::DidReceiveCompositorFrameAck"); |
708 DCHECK_GT(pending_swapbuffers_, 0U); | 708 DCHECK_GT(pending_frames_, 0U); |
709 pending_swapbuffers_--; | 709 pending_frames_--; |
710 client_->OnSwapBuffersCompleted(pending_swapbuffers_); | 710 client_->DidSwapFrame(pending_frames_); |
711 } | 711 } |
712 | 712 |
713 void CompositorImpl::DidLoseCompositorFrameSink() { | 713 void CompositorImpl::DidLoseCompositorFrameSink() { |
714 TRACE_EVENT0("compositor", "CompositorImpl::DidLoseCompositorFrameSink"); | 714 TRACE_EVENT0("compositor", "CompositorImpl::DidLoseCompositorFrameSink"); |
715 has_compositor_frame_sink_ = false; | 715 has_compositor_frame_sink_ = false; |
716 client_->OnSwapBuffersCompleted(0); | 716 client_->DidSwapFrame(0); |
717 } | 717 } |
718 | 718 |
719 void CompositorImpl::DidCommit() { | 719 void CompositorImpl::DidCommit() { |
720 root_window_->OnCompositingDidCommit(); | 720 root_window_->OnCompositingDidCommit(); |
721 } | 721 } |
722 | 722 |
723 void CompositorImpl::AttachLayerForReadback(scoped_refptr<cc::Layer> layer) { | 723 void CompositorImpl::AttachLayerForReadback(scoped_refptr<cc::Layer> layer) { |
724 readback_layer_tree_->AddChild(layer); | 724 readback_layer_tree_->AddChild(layer); |
725 } | 725 } |
726 | 726 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
762 ui::ContextProviderFactory::GetInstance() | 762 ui::ContextProviderFactory::GetInstance() |
763 ->GetSurfaceManager() | 763 ->GetSurfaceManager() |
764 ->UnregisterFrameSinkHierarchy(frame_sink_id_, frame_sink_id); | 764 ->UnregisterFrameSinkHierarchy(frame_sink_id_, frame_sink_id); |
765 } | 765 } |
766 | 766 |
767 bool CompositorImpl::HavePendingReadbacks() { | 767 bool CompositorImpl::HavePendingReadbacks() { |
768 return !readback_layer_tree_->children().empty(); | 768 return !readback_layer_tree_->children().empty(); |
769 } | 769 } |
770 | 770 |
771 } // namespace content | 771 } // namespace content |
OLD | NEW |