Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(370)

Side by Side Diff: components/exo/compositor_frame_sink_holder.cc

Issue 2610513006: exo: Implement presentation interface. (Closed)
Patch Set: dcastagna nits Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « components/exo/compositor_frame_sink_holder.h ('k') | components/exo/surface.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "components/exo/compositor_frame_sink_holder.h" 5 #include "components/exo/compositor_frame_sink_holder.h"
6 6
7 #include "cc/resources/returned_resource.h" 7 #include "cc/resources/returned_resource.h"
8 #include "components/exo/surface.h" 8 #include "components/exo/surface.h"
9 9
10 namespace exo { 10 namespace exo {
(...skipping 18 matching lines...) Expand all
29 return release_callbacks_.find(id) != release_callbacks_.end(); 29 return release_callbacks_.find(id) != release_callbacks_.end();
30 } 30 }
31 31
32 void CompositorFrameSinkHolder::SetResourceReleaseCallback( 32 void CompositorFrameSinkHolder::SetResourceReleaseCallback(
33 cc::ResourceId id, 33 cc::ResourceId id,
34 const cc::ReleaseCallback& callback) { 34 const cc::ReleaseCallback& callback) {
35 DCHECK(!callback.is_null()); 35 DCHECK(!callback.is_null());
36 release_callbacks_[id] = callback; 36 release_callbacks_[id] = callback;
37 } 37 }
38 38
39 void CompositorFrameSinkHolder::ActivateFrameCallbacks(
40 std::list<FrameCallback>* frame_callbacks) {
41 active_frame_callbacks_.splice(active_frame_callbacks_.end(),
42 *frame_callbacks);
43 UpdateNeedsBeginFrame();
44 }
45
46 void CompositorFrameSinkHolder::CancelFrameCallbacks() {
47 // Call pending frame callbacks with a null frame time to indicate that they
48 // have been cancelled.
49 for (const auto& frame_callback : active_frame_callbacks_)
50 frame_callback.Run(base::TimeTicks());
51 }
52
53 void CompositorFrameSinkHolder::SetNeedsBeginFrame(bool needs_begin_frame) { 39 void CompositorFrameSinkHolder::SetNeedsBeginFrame(bool needs_begin_frame) {
54 needs_begin_frame_ = needs_begin_frame; 40 needs_begin_frame_ = needs_begin_frame;
55 OnNeedsBeginFrames(needs_begin_frame); 41 OnNeedsBeginFrames(needs_begin_frame);
56 } 42 }
57 43
58 void CompositorFrameSinkHolder::Satisfy(const cc::SurfaceSequence& sequence) { 44 void CompositorFrameSinkHolder::Satisfy(const cc::SurfaceSequence& sequence) {
59 frame_sink_->Satisfy(sequence); 45 frame_sink_->Satisfy(sequence);
60 } 46 }
61 47
62 void CompositorFrameSinkHolder::Require(const cc::SurfaceId& id, 48 void CompositorFrameSinkHolder::Require(const cc::SurfaceId& id,
63 const cc::SurfaceSequence& sequence) { 49 const cc::SurfaceSequence& sequence) {
64 frame_sink_->Require(id.local_frame_id(), sequence); 50 frame_sink_->Require(id.local_frame_id(), sequence);
65 } 51 }
66 52
67 //////////////////////////////////////////////////////////////////////////////// 53 ////////////////////////////////////////////////////////////////////////////////
68 // cc::mojom::MojoCompositorFrameSinkClient overrides: 54 // cc::mojom::MojoCompositorFrameSinkClient overrides:
69 55
70 void CompositorFrameSinkHolder::DidReceiveCompositorFrameAck() { 56 void CompositorFrameSinkHolder::DidReceiveCompositorFrameAck() {
71 // TODO(staraz): Implement this 57 // TODO(staraz): Implement this
72 } 58 }
73 59
74 void CompositorFrameSinkHolder::OnBeginFrame(const cc::BeginFrameArgs& args) { 60 void CompositorFrameSinkHolder::OnBeginFrame(const cc::BeginFrameArgs& args) {
75 while (!active_frame_callbacks_.empty()) { 61 if (surface_)
76 active_frame_callbacks_.front().Run(args.frame_time); 62 surface_->BeginFrame(args.frame_time);
77 active_frame_callbacks_.pop_front(); 63
78 }
79 begin_frame_source_->OnBeginFrame(args); 64 begin_frame_source_->OnBeginFrame(args);
80 } 65 }
81 66
82 void CompositorFrameSinkHolder::ReclaimResources( 67 void CompositorFrameSinkHolder::ReclaimResources(
83 const cc::ReturnedResourceArray& resources) { 68 const cc::ReturnedResourceArray& resources) {
84 for (auto& resource : resources) { 69 for (auto& resource : resources) {
85 auto it = release_callbacks_.find(resource.id); 70 auto it = release_callbacks_.find(resource.id);
86 DCHECK(it != release_callbacks_.end()); 71 DCHECK(it != release_callbacks_.end());
87 if (it != release_callbacks_.end()) { 72 if (it != release_callbacks_.end()) {
88 it->second.Run(resource.sync_token, resource.lost); 73 it->second.Run(resource.sync_token, resource.lost);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 113
129 CompositorFrameSinkHolder::~CompositorFrameSinkHolder() { 114 CompositorFrameSinkHolder::~CompositorFrameSinkHolder() {
130 if (surface_) 115 if (surface_)
131 surface_->RemoveSurfaceObserver(this); 116 surface_->RemoveSurfaceObserver(this);
132 } 117 }
133 118
134 void CompositorFrameSinkHolder::UpdateNeedsBeginFrame() { 119 void CompositorFrameSinkHolder::UpdateNeedsBeginFrame() {
135 if (!begin_frame_source_) 120 if (!begin_frame_source_)
136 return; 121 return;
137 122
138 bool needs_begin_frame = !active_frame_callbacks_.empty(); 123 bool needs_begin_frame = surface_ && surface_->NeedsBeginFrame();
139 if (needs_begin_frame == needs_begin_frame_) 124 if (needs_begin_frame == needs_begin_frame_)
140 return; 125 return;
141 126
142 needs_begin_frame_ = needs_begin_frame; 127 needs_begin_frame_ = needs_begin_frame;
143 OnNeedsBeginFrames(needs_begin_frame_); 128 OnNeedsBeginFrames(needs_begin_frame_);
144 } 129 }
145 130
146 } // namespace exo 131 } // namespace exo
OLDNEW
« no previous file with comments | « components/exo/compositor_frame_sink_holder.h ('k') | components/exo/surface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698