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 "base/callback_helpers.h" | 7 #include "base/callback_helpers.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "cc/output/compositor_frame.h" | 9 #include "cc/output/compositor_frame.h" |
10 #include "cc/output/compositor_frame_ack.h" | 10 #include "cc/output/compositor_frame_ack.h" |
(...skipping 860 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
871 can_lock_compositor_ = NO_PENDING_RENDERER_FRAME; | 871 can_lock_compositor_ = NO_PENDING_RENDERER_FRAME; |
872 } | 872 } |
873 } | 873 } |
874 | 874 |
875 void DelegatedFrameHost::OnCompositingShuttingDown(ui::Compositor* compositor) { | 875 void DelegatedFrameHost::OnCompositingShuttingDown(ui::Compositor* compositor) { |
876 DCHECK_EQ(compositor, compositor_); | 876 DCHECK_EQ(compositor, compositor_); |
877 ResetCompositor(); | 877 ResetCompositor(); |
878 DCHECK(!compositor_); | 878 DCHECK(!compositor_); |
879 } | 879 } |
880 | 880 |
881 void DelegatedFrameHost::OnUpdateVSyncParameters( | 881 void DelegatedFrameHost::SetVSyncParameters(base::TimeTicks timebase, |
882 base::TimeTicks timebase, | 882 base::TimeDelta interval) { |
883 base::TimeDelta interval) { | |
884 vsync_timebase_ = timebase; | 883 vsync_timebase_ = timebase; |
885 vsync_interval_ = interval; | 884 vsync_interval_ = interval; |
886 if (client_->DelegatedFrameHostIsVisible()) | |
887 client_->DelegatedFrameHostUpdateVSyncParameters(timebase, interval); | |
888 } | 885 } |
889 | 886 |
890 //////////////////////////////////////////////////////////////////////////////// | 887 //////////////////////////////////////////////////////////////////////////////// |
891 // DelegatedFrameHost, ImageTransportFactoryObserver implementation: | 888 // DelegatedFrameHost, ImageTransportFactoryObserver implementation: |
892 | 889 |
893 void DelegatedFrameHost::OnLostResources() { | 890 void DelegatedFrameHost::OnLostResources() { |
894 if (frame_provider_.get() || !surface_id_.is_null()) | 891 if (frame_provider_.get() || !surface_id_.is_null()) |
895 EvictDelegatedFrame(); | 892 EvictDelegatedFrame(); |
896 idle_frame_subscriber_textures_.clear(); | 893 idle_frame_subscriber_textures_.clear(); |
897 yuv_readback_pipeline_.reset(); | 894 yuv_readback_pipeline_.reset(); |
898 | 895 |
899 client_->DelegatedFrameHostOnLostCompositorResources(); | 896 client_->DelegatedFrameHostOnLostCompositorResources(); |
900 } | 897 } |
901 | 898 |
902 //////////////////////////////////////////////////////////////////////////////// | 899 //////////////////////////////////////////////////////////////////////////////// |
903 // DelegatedFrameHost, private: | 900 // DelegatedFrameHost, private: |
904 | 901 |
905 DelegatedFrameHost::~DelegatedFrameHost() { | 902 DelegatedFrameHost::~DelegatedFrameHost() { |
906 DCHECK(!compositor_); | 903 DCHECK(!compositor_); |
907 ImageTransportFactory::GetInstance()->RemoveObserver(this); | 904 ImageTransportFactory::GetInstance()->RemoveObserver(this); |
908 | 905 |
909 if (!surface_id_.is_null()) | 906 if (!surface_id_.is_null()) |
910 surface_factory_->Destroy(surface_id_); | 907 surface_factory_->Destroy(surface_id_); |
911 if (resource_collection_.get()) | 908 if (resource_collection_.get()) |
912 resource_collection_->SetClient(NULL); | 909 resource_collection_->SetClient(NULL); |
913 | |
914 DCHECK(!vsync_manager_.get()); | |
915 } | 910 } |
916 | 911 |
917 void DelegatedFrameHost::RunOnCommitCallbacks() { | 912 void DelegatedFrameHost::RunOnCommitCallbacks() { |
918 for (std::vector<base::Closure>::const_iterator | 913 for (std::vector<base::Closure>::const_iterator |
919 it = on_compositing_did_commit_callbacks_.begin(); | 914 it = on_compositing_did_commit_callbacks_.begin(); |
920 it != on_compositing_did_commit_callbacks_.end(); ++it) { | 915 it != on_compositing_did_commit_callbacks_.end(); ++it) { |
921 it->Run(); | 916 it->Run(); |
922 } | 917 } |
923 on_compositing_did_commit_callbacks_.clear(); | 918 on_compositing_did_commit_callbacks_.clear(); |
924 } | 919 } |
925 | 920 |
926 void DelegatedFrameHost::AddOnCommitCallbackAndDisableLocks( | 921 void DelegatedFrameHost::AddOnCommitCallbackAndDisableLocks( |
927 const base::Closure& callback) { | 922 const base::Closure& callback) { |
928 DCHECK(compositor_); | 923 DCHECK(compositor_); |
929 | 924 |
930 can_lock_compositor_ = NO_PENDING_COMMIT; | 925 can_lock_compositor_ = NO_PENDING_COMMIT; |
931 if (!callback.is_null()) | 926 if (!callback.is_null()) |
932 on_compositing_did_commit_callbacks_.push_back(callback); | 927 on_compositing_did_commit_callbacks_.push_back(callback); |
933 } | 928 } |
934 | 929 |
935 void DelegatedFrameHost::SetCompositor(ui::Compositor* compositor) { | 930 void DelegatedFrameHost::SetCompositor(ui::Compositor* compositor) { |
936 DCHECK(!compositor_); | 931 DCHECK(!compositor_); |
937 if (!compositor) | 932 if (!compositor) |
938 return; | 933 return; |
939 compositor_ = compositor; | 934 compositor_ = compositor; |
940 compositor_->AddObserver(this); | 935 compositor_->AddObserver(this); |
941 DCHECK(!vsync_manager_.get()); | |
942 vsync_manager_ = compositor_->vsync_manager(); | |
943 vsync_manager_->AddObserver(this); | |
944 } | 936 } |
945 | 937 |
946 void DelegatedFrameHost::ResetCompositor() { | 938 void DelegatedFrameHost::ResetCompositor() { |
947 if (!compositor_) | 939 if (!compositor_) |
948 return; | 940 return; |
949 RunOnCommitCallbacks(); | 941 RunOnCommitCallbacks(); |
950 if (resize_lock_) { | 942 if (resize_lock_) { |
951 resize_lock_.reset(); | 943 resize_lock_.reset(); |
952 client_->DelegatedFrameHostResizeLockWasReleased(); | 944 client_->DelegatedFrameHostResizeLockWasReleased(); |
953 } | 945 } |
954 if (compositor_->HasObserver(this)) | 946 if (compositor_->HasObserver(this)) |
955 compositor_->RemoveObserver(this); | 947 compositor_->RemoveObserver(this); |
956 if (vsync_manager_.get()) { | |
957 vsync_manager_->RemoveObserver(this); | |
958 vsync_manager_ = NULL; | |
959 } | |
960 compositor_ = nullptr; | 948 compositor_ = nullptr; |
961 } | 949 } |
962 | 950 |
963 void DelegatedFrameHost::LockResources() { | 951 void DelegatedFrameHost::LockResources() { |
964 DCHECK(frame_provider_.get() || !surface_id_.is_null()); | 952 DCHECK(frame_provider_.get() || !surface_id_.is_null()); |
965 delegated_frame_evictor_->LockFrame(); | 953 delegated_frame_evictor_->LockFrame(); |
966 } | 954 } |
967 | 955 |
968 void DelegatedFrameHost::RequestCopyOfOutput( | 956 void DelegatedFrameHost::RequestCopyOfOutput( |
969 scoped_ptr<cc::CopyOutputRequest> request) { | 957 scoped_ptr<cc::CopyOutputRequest> request) { |
(...skipping 25 matching lines...) Expand all Loading... |
995 cc::SurfaceManager* manager = factory->GetSurfaceManager(); | 983 cc::SurfaceManager* manager = factory->GetSurfaceManager(); |
996 new_layer->SetShowSurface( | 984 new_layer->SetShowSurface( |
997 surface_id_, base::Bind(&SatisfyCallback, base::Unretained(manager)), | 985 surface_id_, base::Bind(&SatisfyCallback, base::Unretained(manager)), |
998 base::Bind(&RequireCallback, base::Unretained(manager)), | 986 base::Bind(&RequireCallback, base::Unretained(manager)), |
999 current_surface_size_, current_scale_factor_, | 987 current_surface_size_, current_scale_factor_, |
1000 current_frame_size_in_dip_); | 988 current_frame_size_in_dip_); |
1001 } | 989 } |
1002 } | 990 } |
1003 | 991 |
1004 } // namespace content | 992 } // namespace content |
OLD | NEW |