| 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 |