| 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/renderer_host/delegated_frame_host.h" | 5 #include "content/browser/renderer_host/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 813 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 824 void DelegatedFrameHost::UnlockResources() { | 824 void DelegatedFrameHost::UnlockResources() { |
| 825 DCHECK(local_surface_id_.is_valid()); | 825 DCHECK(local_surface_id_.is_valid()); |
| 826 delegated_frame_evictor_->UnlockFrame(); | 826 delegated_frame_evictor_->UnlockFrame(); |
| 827 } | 827 } |
| 828 | 828 |
| 829 void DelegatedFrameHost::OnNeedsBeginFrames(bool needs_begin_frames) { | 829 void DelegatedFrameHost::OnNeedsBeginFrames(bool needs_begin_frames) { |
| 830 needs_begin_frame_ = needs_begin_frames; | 830 needs_begin_frame_ = needs_begin_frames; |
| 831 support_->SetNeedsBeginFrame(needs_begin_frames); | 831 support_->SetNeedsBeginFrame(needs_begin_frames); |
| 832 } | 832 } |
| 833 | 833 |
| 834 void DelegatedFrameHost::OnDidFinishFrame(const cc::BeginFrameAck& ack) {} | 834 void DelegatedFrameHost::OnDidFinishFrame(const cc::BeginFrameAck& ack) { |
| 835 if (ack.source_id != latest_confirmed_begin_frame_source_id_) { |
| 836 // Source changed, we don't know our freshness anymore. |
| 837 latest_confirmed_begin_frame_sequence_number_ = |
| 838 cc::BeginFrameArgs::kInvalidFrameNumber; |
| 839 } |
| 840 |
| 841 cc::BeginFrameAck modified_ack = ack; |
| 842 if (skipped_frames_) { |
| 843 // If we skipped the last frame(s), we didn't incorporate the last |
| 844 // CompositorFrame's damage, so need to wait for the next one before |
| 845 // confirming newer sequence numbers. |
| 846 modified_ack.has_damage = false; |
| 847 modified_ack.latest_confirmed_sequence_number = |
| 848 latest_confirmed_begin_frame_sequence_number_; |
| 849 } else { |
| 850 latest_confirmed_begin_frame_source_id_ = modified_ack.source_id; |
| 851 latest_confirmed_begin_frame_sequence_number_ = |
| 852 modified_ack.latest_confirmed_sequence_number; |
| 853 } |
| 854 |
| 855 // TODO(eseckler): The interface to CompositorFrameSinkSupport should use |
| 856 // SubmitCompositorFrame and BeginFrameDidNotSwap instead of DidFinishFrame. |
| 857 support_->DidFinishFrame(modified_ack); |
| 858 } |
| 835 | 859 |
| 836 void DelegatedFrameHost::CreateCompositorFrameSinkSupport() { | 860 void DelegatedFrameHost::CreateCompositorFrameSinkSupport() { |
| 837 DCHECK(!support_); | 861 DCHECK(!support_); |
| 838 ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); | 862 ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); |
| 839 support_ = base::MakeUnique<cc::CompositorFrameSinkSupport>( | 863 support_ = base::MakeUnique<cc::CompositorFrameSinkSupport>( |
| 840 this, factory->GetContextFactoryPrivate()->GetSurfaceManager(), | 864 this, factory->GetContextFactoryPrivate()->GetSurfaceManager(), |
| 841 frame_sink_id_, false /* is_root */, | 865 frame_sink_id_, false /* is_root */, |
| 842 false /* handles_frame_sink_id_invalidation */, | 866 false /* handles_frame_sink_id_invalidation */, |
| 843 true /* needs_sync_points */); | 867 true /* needs_sync_points */); |
| 844 if (compositor_) | 868 if (compositor_) |
| 845 compositor_->AddFrameSink(frame_sink_id_); | 869 compositor_->AddFrameSink(frame_sink_id_); |
| 846 if (needs_begin_frame_) | 870 if (needs_begin_frame_) |
| 847 support_->SetNeedsBeginFrame(true); | 871 support_->SetNeedsBeginFrame(true); |
| 848 } | 872 } |
| 849 | 873 |
| 850 void DelegatedFrameHost::ResetCompositorFrameSinkSupport() { | 874 void DelegatedFrameHost::ResetCompositorFrameSinkSupport() { |
| 851 if (!support_) | 875 if (!support_) |
| 852 return; | 876 return; |
| 853 if (compositor_) | 877 if (compositor_) |
| 854 compositor_->RemoveFrameSink(frame_sink_id_); | 878 compositor_->RemoveFrameSink(frame_sink_id_); |
| 855 support_.reset(); | 879 support_.reset(); |
| 856 } | 880 } |
| 857 | 881 |
| 858 } // namespace content | 882 } // namespace content |
| OLD | NEW |