OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/compositor/delegated_frame_host.h" | 5 #include "content/browser/compositor/delegated_frame_host.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <string> | 8 #include <string> |
9 #include <utility> | 9 #include <utility> |
10 #include <vector> | 10 #include <vector> |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 | 64 |
65 DelegatedFrameHost::DelegatedFrameHost(DelegatedFrameHostClient* client) | 65 DelegatedFrameHost::DelegatedFrameHost(DelegatedFrameHostClient* client) |
66 : client_(client), | 66 : client_(client), |
67 compositor_(nullptr), | 67 compositor_(nullptr), |
68 tick_clock_(new base::DefaultTickClock()), | 68 tick_clock_(new base::DefaultTickClock()), |
69 last_output_surface_id_(0), | 69 last_output_surface_id_(0), |
70 pending_delegated_ack_count_(0), | 70 pending_delegated_ack_count_(0), |
71 skipped_frames_(false), | 71 skipped_frames_(false), |
72 current_scale_factor_(1.f), | 72 current_scale_factor_(1.f), |
73 can_lock_compositor_(YES_CAN_LOCK), | 73 can_lock_compositor_(YES_CAN_LOCK), |
74 delegated_frame_evictor_(new DelegatedFrameEvictor(this)) { | 74 delegated_frame_evictor_(new DelegatedFrameEvictor(this)), |
| 75 begin_frame_source_(nullptr) { |
75 ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); | 76 ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); |
76 factory->AddObserver(this); | 77 factory->AddObserver(this); |
77 id_allocator_ = factory->GetContextFactory()->CreateSurfaceIdAllocator(); | 78 id_allocator_ = factory->GetContextFactory()->CreateSurfaceIdAllocator(); |
| 79 factory->GetSurfaceManager()->RegisterSurfaceFactoryClient( |
| 80 id_allocator_->id_namespace(), this); |
78 } | 81 } |
79 | 82 |
80 void DelegatedFrameHost::WasShown(const ui::LatencyInfo& latency_info) { | 83 void DelegatedFrameHost::WasShown(const ui::LatencyInfo& latency_info) { |
81 delegated_frame_evictor_->SetVisible(true); | 84 delegated_frame_evictor_->SetVisible(true); |
82 | 85 |
83 if (surface_id_.is_null() && | 86 if (surface_id_.is_null() && |
84 !released_front_lock_.get()) { | 87 !released_front_lock_.get()) { |
85 if (compositor_) | 88 if (compositor_) |
86 released_front_lock_ = compositor_->GetCompositorLock(); | 89 released_front_lock_ = compositor_->GetCompositorLock(); |
87 } | 90 } |
(...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
505 } | 508 } |
506 | 509 |
507 void DelegatedFrameHost::WillDrawSurface(cc::SurfaceId id, | 510 void DelegatedFrameHost::WillDrawSurface(cc::SurfaceId id, |
508 const gfx::Rect& damage_rect) { | 511 const gfx::Rect& damage_rect) { |
509 if (id != surface_id_) | 512 if (id != surface_id_) |
510 return; | 513 return; |
511 AttemptFrameSubscriberCapture(damage_rect); | 514 AttemptFrameSubscriberCapture(damage_rect); |
512 } | 515 } |
513 | 516 |
514 void DelegatedFrameHost::SetBeginFrameSource( | 517 void DelegatedFrameHost::SetBeginFrameSource( |
515 cc::SurfaceId surface_id, | |
516 cc::BeginFrameSource* begin_frame_source) { | 518 cc::BeginFrameSource* begin_frame_source) { |
517 // TODO(tansell): Hook this up. | 519 // TODO(enne): forward this to DelegatedFrameHostClient to observe and then to |
| 520 // the renderer as an external begin frame source. |
518 } | 521 } |
519 | 522 |
520 void DelegatedFrameHost::EvictDelegatedFrame() { | 523 void DelegatedFrameHost::EvictDelegatedFrame() { |
521 client_->DelegatedFrameHostGetLayer()->SetShowSolidColorContent(); | 524 client_->DelegatedFrameHostGetLayer()->SetShowSolidColorContent(); |
522 if (!surface_id_.is_null()) { | 525 if (!surface_id_.is_null()) { |
523 surface_factory_->Destroy(surface_id_); | 526 surface_factory_->Destroy(surface_id_); |
524 surface_id_ = cc::SurfaceId(); | 527 surface_id_ = cc::SurfaceId(); |
525 } | 528 } |
526 delegated_frame_evictor_->DiscardedFrame(); | 529 delegated_frame_evictor_->DiscardedFrame(); |
527 } | 530 } |
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
755 yuv_readback_pipeline_.reset(); | 758 yuv_readback_pipeline_.reset(); |
756 | 759 |
757 client_->DelegatedFrameHostOnLostCompositorResources(); | 760 client_->DelegatedFrameHostOnLostCompositorResources(); |
758 } | 761 } |
759 | 762 |
760 //////////////////////////////////////////////////////////////////////////////// | 763 //////////////////////////////////////////////////////////////////////////////// |
761 // DelegatedFrameHost, private: | 764 // DelegatedFrameHost, private: |
762 | 765 |
763 DelegatedFrameHost::~DelegatedFrameHost() { | 766 DelegatedFrameHost::~DelegatedFrameHost() { |
764 DCHECK(!compositor_); | 767 DCHECK(!compositor_); |
765 ImageTransportFactory::GetInstance()->RemoveObserver(this); | 768 ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); |
| 769 factory->RemoveObserver(this); |
766 | 770 |
767 if (!surface_id_.is_null()) | 771 if (!surface_id_.is_null()) |
768 surface_factory_->Destroy(surface_id_); | 772 surface_factory_->Destroy(surface_id_); |
| 773 factory->GetSurfaceManager()->UnregisterSurfaceFactoryClient( |
| 774 id_allocator_->id_namespace()); |
769 | 775 |
770 DCHECK(!vsync_manager_.get()); | 776 DCHECK(!vsync_manager_.get()); |
771 } | 777 } |
772 | 778 |
773 void DelegatedFrameHost::SetCompositor(ui::Compositor* compositor) { | 779 void DelegatedFrameHost::SetCompositor(ui::Compositor* compositor) { |
774 DCHECK(!compositor_); | 780 DCHECK(!compositor_); |
775 if (!compositor) | 781 if (!compositor) |
776 return; | 782 return; |
777 compositor_ = compositor; | 783 compositor_ = compositor; |
778 compositor_->AddObserver(this); | 784 compositor_->AddObserver(this); |
779 DCHECK(!vsync_manager_.get()); | 785 DCHECK(!vsync_manager_.get()); |
780 vsync_manager_ = compositor_->vsync_manager(); | 786 vsync_manager_ = compositor_->vsync_manager(); |
781 vsync_manager_->AddObserver(this); | 787 vsync_manager_->AddObserver(this); |
| 788 |
| 789 ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); |
| 790 uint32_t parent = compositor->surface_id_allocator()->id_namespace(); |
| 791 factory->GetSurfaceManager()->RegisterSurfaceNamespaceHierarchy( |
| 792 parent, id_allocator_->id_namespace()); |
782 } | 793 } |
783 | 794 |
784 void DelegatedFrameHost::ResetCompositor() { | 795 void DelegatedFrameHost::ResetCompositor() { |
785 if (!compositor_) | 796 if (!compositor_) |
786 return; | 797 return; |
787 if (resize_lock_) { | 798 if (resize_lock_) { |
788 resize_lock_.reset(); | 799 resize_lock_.reset(); |
789 client_->DelegatedFrameHostResizeLockWasReleased(); | 800 client_->DelegatedFrameHostResizeLockWasReleased(); |
790 } | 801 } |
791 if (compositor_->HasObserver(this)) | 802 if (compositor_->HasObserver(this)) |
792 compositor_->RemoveObserver(this); | 803 compositor_->RemoveObserver(this); |
793 if (vsync_manager_.get()) { | 804 if (vsync_manager_.get()) { |
794 vsync_manager_->RemoveObserver(this); | 805 vsync_manager_->RemoveObserver(this); |
795 vsync_manager_ = NULL; | 806 vsync_manager_ = NULL; |
796 } | 807 } |
| 808 |
| 809 ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); |
| 810 uint32_t parent = compositor_->surface_id_allocator()->id_namespace(); |
| 811 factory->GetSurfaceManager()->UnregisterSurfaceNamespaceHierarchy( |
| 812 parent, id_allocator_->id_namespace()); |
| 813 |
797 compositor_ = nullptr; | 814 compositor_ = nullptr; |
798 } | 815 } |
799 | 816 |
800 void DelegatedFrameHost::SetVSyncParameters(const base::TimeTicks& timebase, | 817 void DelegatedFrameHost::SetVSyncParameters(const base::TimeTicks& timebase, |
801 const base::TimeDelta& interval) { | 818 const base::TimeDelta& interval) { |
802 vsync_timebase_ = timebase; | 819 vsync_timebase_ = timebase; |
803 vsync_interval_ = interval; | 820 vsync_interval_ = interval; |
804 } | 821 } |
805 | 822 |
806 void DelegatedFrameHost::LockResources() { | 823 void DelegatedFrameHost::LockResources() { |
(...skipping 29 matching lines...) Expand all Loading... |
836 cc::SurfaceManager* manager = factory->GetSurfaceManager(); | 853 cc::SurfaceManager* manager = factory->GetSurfaceManager(); |
837 new_layer->SetShowSurface( | 854 new_layer->SetShowSurface( |
838 surface_id_, base::Bind(&SatisfyCallback, base::Unretained(manager)), | 855 surface_id_, base::Bind(&SatisfyCallback, base::Unretained(manager)), |
839 base::Bind(&RequireCallback, base::Unretained(manager)), | 856 base::Bind(&RequireCallback, base::Unretained(manager)), |
840 current_surface_size_, current_scale_factor_, | 857 current_surface_size_, current_scale_factor_, |
841 current_frame_size_in_dip_); | 858 current_frame_size_in_dip_); |
842 } | 859 } |
843 } | 860 } |
844 | 861 |
845 } // namespace content | 862 } // namespace content |
OLD | NEW |