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