OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "cc/surfaces/compositor_frame_sink_support.h" | 5 #include "cc/surfaces/compositor_frame_sink_support.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "cc/output/compositor_frame.h" | 10 #include "cc/output/compositor_frame.h" |
(...skipping 27 matching lines...) Expand all Loading... |
38 // Unregister |this| as a BeginFrameObserver so that the BeginFrameSource does | 38 // Unregister |this| as a BeginFrameObserver so that the BeginFrameSource does |
39 // not call into |this| after it's deleted. | 39 // not call into |this| after it's deleted. |
40 SetNeedsBeginFrame(false); | 40 SetNeedsBeginFrame(false); |
41 | 41 |
42 // For display root surfaces, the surface is no longer going to be visible | 42 // For display root surfaces, the surface is no longer going to be visible |
43 // so make it unreachable from the top-level root. | 43 // so make it unreachable from the top-level root. |
44 if (surface_manager_->using_surface_references() && is_root_ && | 44 if (surface_manager_->using_surface_references() && is_root_ && |
45 reference_tracker_.current_surface_id().is_valid()) | 45 reference_tracker_.current_surface_id().is_valid()) |
46 RemoveTopLevelRootReference(reference_tracker_.current_surface_id()); | 46 RemoveTopLevelRootReference(reference_tracker_.current_surface_id()); |
47 | 47 |
48 EvictFrame(); | 48 EvictCurrentSurface(); |
49 surface_manager_->UnregisterFrameSinkManagerClient(frame_sink_id_); | 49 surface_manager_->UnregisterFrameSinkManagerClient(frame_sink_id_); |
50 if (handles_frame_sink_id_invalidation_) | 50 if (handles_frame_sink_id_invalidation_) |
51 surface_manager_->InvalidateFrameSinkId(frame_sink_id_); | 51 surface_manager_->InvalidateFrameSinkId(frame_sink_id_); |
52 } | 52 } |
53 | 53 |
54 void CompositorFrameSinkSupport::ReturnResources( | 54 void CompositorFrameSinkSupport::ReturnResources( |
55 const ReturnedResourceArray& resources) { | 55 const ReturnedResourceArray& resources) { |
56 if (resources.empty()) | 56 if (resources.empty()) |
57 return; | 57 return; |
58 if (!ack_pending_count_ && client_) { | 58 if (!ack_pending_count_ && client_) { |
59 client_->ReclaimResources(resources); | 59 client_->ReclaimResources(resources); |
60 return; | 60 return; |
61 } | 61 } |
62 | 62 |
63 std::copy(resources.begin(), resources.end(), | 63 std::copy(resources.begin(), resources.end(), |
64 std::back_inserter(surface_returned_resources_)); | 64 std::back_inserter(surface_returned_resources_)); |
65 } | 65 } |
66 | 66 |
67 void CompositorFrameSinkSupport::SetBeginFrameSource( | 67 void CompositorFrameSinkSupport::SetBeginFrameSource( |
68 BeginFrameSource* begin_frame_source) { | 68 BeginFrameSource* begin_frame_source) { |
69 if (begin_frame_source_ && added_frame_observer_) { | 69 if (begin_frame_source_ && added_frame_observer_) { |
70 begin_frame_source_->RemoveObserver(this); | 70 begin_frame_source_->RemoveObserver(this); |
71 added_frame_observer_ = false; | 71 added_frame_observer_ = false; |
72 } | 72 } |
73 begin_frame_source_ = begin_frame_source; | 73 begin_frame_source_ = begin_frame_source; |
74 UpdateNeedsBeginFramesInternal(); | 74 UpdateNeedsBeginFramesInternal(); |
75 } | 75 } |
76 | 76 |
77 void CompositorFrameSinkSupport::EvictFrame() { | 77 void CompositorFrameSinkSupport::EvictCurrentSurface() { |
78 if (!current_surface_) | 78 if (!current_surface_) |
79 return; | 79 return; |
80 DestroyCurrentSurface(); | 80 DestroyCurrentSurface(); |
81 } | 81 } |
82 | 82 |
83 void CompositorFrameSinkSupport::SetNeedsBeginFrame(bool needs_begin_frame) { | 83 void CompositorFrameSinkSupport::SetNeedsBeginFrame(bool needs_begin_frame) { |
84 needs_begin_frame_ = needs_begin_frame; | 84 needs_begin_frame_ = needs_begin_frame; |
85 UpdateNeedsBeginFramesInternal(); | 85 UpdateNeedsBeginFramesInternal(); |
86 } | 86 } |
87 | 87 |
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
347 std::unique_ptr<CopyOutputRequest> copy_request) { | 347 std::unique_ptr<CopyOutputRequest> copy_request) { |
348 if (!current_surface_) | 348 if (!current_surface_) |
349 return; | 349 return; |
350 | 350 |
351 DCHECK(current_surface_->compositor_frame_sink_support().get() == this); | 351 DCHECK(current_surface_->compositor_frame_sink_support().get() == this); |
352 current_surface_->RequestCopyOfOutput(std::move(copy_request)); | 352 current_surface_->RequestCopyOfOutput(std::move(copy_request)); |
353 surface_manager_->SurfaceModified(current_surface_->surface_id()); | 353 surface_manager_->SurfaceModified(current_surface_->surface_id()); |
354 } | 354 } |
355 | 355 |
356 } // namespace cc | 356 } // namespace cc |
OLD | NEW |