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