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

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

Issue 2724953007: [exo] Clean up BeginFrame distribution & add acks in Surface. (Closed)
Patch Set: rename instance var. Created 3 years, 9 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 {
11 11
12 //////////////////////////////////////////////////////////////////////////////// 12 ////////////////////////////////////////////////////////////////////////////////
13 // CompositorFrameSinkHolder, public: 13 // CompositorFrameSinkHolder, public:
14 14
15 CompositorFrameSinkHolder::CompositorFrameSinkHolder( 15 CompositorFrameSinkHolder::CompositorFrameSinkHolder(
16 Surface* surface, 16 Surface* surface,
17 const cc::FrameSinkId& frame_sink_id, 17 const cc::FrameSinkId& frame_sink_id,
18 cc::SurfaceManager* surface_manager) 18 cc::SurfaceManager* surface_manager)
19 : surface_(surface), 19 : surface_(surface),
20 frame_sink_( 20 frame_sink_(
21 new CompositorFrameSink(frame_sink_id, surface_manager, this)), 21 new CompositorFrameSink(frame_sink_id, surface_manager, this)),
22 begin_frame_source_(base::MakeUnique<cc::ExternalBeginFrameSource>(this)), 22 begin_frame_source_(base::MakeUnique<cc::ExternalBeginFrameSource>(this)),
23 weak_factory_(this) { 23 weak_factory_(this) {
24 surface_->AddSurfaceObserver(this); 24 surface_->AddSurfaceObserver(this);
25 surface_->SetBeginFrameSource(begin_frame_source_.get());
25 } 26 }
26 27
27 bool CompositorFrameSinkHolder::HasReleaseCallbackForResource( 28 bool CompositorFrameSinkHolder::HasReleaseCallbackForResource(
28 cc::ResourceId id) { 29 cc::ResourceId id) {
29 return release_callbacks_.find(id) != release_callbacks_.end(); 30 return release_callbacks_.find(id) != release_callbacks_.end();
30 } 31 }
31 32
32 void CompositorFrameSinkHolder::SetResourceReleaseCallback( 33 void CompositorFrameSinkHolder::SetResourceReleaseCallback(
33 cc::ResourceId id, 34 cc::ResourceId id,
34 const cc::ReleaseCallback& callback) { 35 const cc::ReleaseCallback& callback) {
35 DCHECK(!callback.is_null()); 36 DCHECK(!callback.is_null());
36 release_callbacks_[id] = callback; 37 release_callbacks_[id] = callback;
37 } 38 }
38 39
39 void CompositorFrameSinkHolder::SetNeedsBeginFrame(bool needs_begin_frame) {
40 needs_begin_frame_ = needs_begin_frame;
41 OnNeedsBeginFrames(needs_begin_frame);
42 }
43
44 //////////////////////////////////////////////////////////////////////////////// 40 ////////////////////////////////////////////////////////////////////////////////
45 // cc::mojom::MojoCompositorFrameSinkClient overrides: 41 // cc::mojom::MojoCompositorFrameSinkClient overrides:
46 42
47 void CompositorFrameSinkHolder::DidReceiveCompositorFrameAck() { 43 void CompositorFrameSinkHolder::DidReceiveCompositorFrameAck() {
48 // TODO(staraz): Implement this 44 // TODO(staraz): Implement this
49 } 45 }
50 46
51 void CompositorFrameSinkHolder::OnBeginFrame(const cc::BeginFrameArgs& args) { 47 void CompositorFrameSinkHolder::OnBeginFrame(const cc::BeginFrameArgs& args) {
52 // TODO(eseckler): Hook up |surface_| to the ExternalBeginFrameSource.
53 if (surface_)
54 surface_->BeginFrame(args.frame_time);
55
56 begin_frame_source_->OnBeginFrame(args); 48 begin_frame_source_->OnBeginFrame(args);
57 } 49 }
58 50
59 void CompositorFrameSinkHolder::ReclaimResources( 51 void CompositorFrameSinkHolder::ReclaimResources(
60 const cc::ReturnedResourceArray& resources) { 52 const cc::ReturnedResourceArray& resources) {
61 for (auto& resource : resources) { 53 for (auto& resource : resources) {
62 auto it = release_callbacks_.find(resource.id); 54 auto it = release_callbacks_.find(resource.id);
63 DCHECK(it != release_callbacks_.end()); 55 DCHECK(it != release_callbacks_.end());
64 if (it != release_callbacks_.end()) { 56 if (it != release_callbacks_.end()) {
65 it->second.Run(resource.sync_token, resource.lost); 57 it->second.Run(resource.sync_token, resource.lost);
66 release_callbacks_.erase(it); 58 release_callbacks_.erase(it);
67 } 59 }
68 } 60 }
69 } 61 }
70 62
71 void CompositorFrameSinkHolder::WillDrawSurface( 63 void CompositorFrameSinkHolder::WillDrawSurface(
72 const cc::LocalSurfaceId& local_surface_id, 64 const cc::LocalSurfaceId& local_surface_id,
73 const gfx::Rect& damage_rect) { 65 const gfx::Rect& damage_rect) {
74 if (surface_) 66 if (surface_)
75 surface_->WillDraw(); 67 surface_->WillDraw();
76
77 UpdateNeedsBeginFrame();
78 } 68 }
79 69
80 //////////////////////////////////////////////////////////////////////////////// 70 ////////////////////////////////////////////////////////////////////////////////
81 // cc::BeginFrameObserver overrides: 71 // cc::ExternalBeginFrameSourceClient overrides:
82
83 const cc::BeginFrameArgs& CompositorFrameSinkHolder::LastUsedBeginFrameArgs()
84 const {
85 return last_begin_frame_args_;
86 }
87
88 void CompositorFrameSinkHolder::OnBeginFrameSourcePausedChanged(bool paused) {}
89
90 ////////////////////////////////////////////////////////////////////////////////
91 // cc::ExternalBeginFrameSouceClient overrides:
92 72
93 void CompositorFrameSinkHolder::OnNeedsBeginFrames(bool needs_begin_frames) { 73 void CompositorFrameSinkHolder::OnNeedsBeginFrames(bool needs_begin_frames) {
94 frame_sink_->SetNeedsBeginFrame(needs_begin_frames); 74 frame_sink_->SetNeedsBeginFrame(needs_begin_frames);
95 } 75 }
96 76
97 void CompositorFrameSinkHolder::OnDidFinishFrame(const cc::BeginFrameAck& ack) { 77 void CompositorFrameSinkHolder::OnDidFinishFrame(const cc::BeginFrameAck& ack) {
98 // TODO(eseckler): Pass on the ack to frame_sink_. 78 // TODO(eseckler): Pass on the ack to frame_sink_.
99 } 79 }
100 80
101 //////////////////////////////////////////////////////////////////////////////// 81 ////////////////////////////////////////////////////////////////////////////////
102 // SurfaceObserver overrides: 82 // SurfaceObserver overrides:
103 83
104 void CompositorFrameSinkHolder::OnSurfaceDestroying(Surface* surface) { 84 void CompositorFrameSinkHolder::OnSurfaceDestroying(Surface* surface) {
105 surface_->RemoveSurfaceObserver(this); 85 surface_->RemoveSurfaceObserver(this);
106 surface_ = nullptr; 86 surface_ = nullptr;
107 } 87 }
108 88
109 //////////////////////////////////////////////////////////////////////////////// 89 ////////////////////////////////////////////////////////////////////////////////
110 // ExoComopositorFrameSink, private: 90 // ExoComopositorFrameSink, private:
111 91
112 CompositorFrameSinkHolder::~CompositorFrameSinkHolder() { 92 CompositorFrameSinkHolder::~CompositorFrameSinkHolder() {
113 if (surface_) 93 if (surface_)
114 surface_->RemoveSurfaceObserver(this); 94 surface_->RemoveSurfaceObserver(this);
115 } 95 }
116 96
117 void CompositorFrameSinkHolder::UpdateNeedsBeginFrame() {
118 if (!begin_frame_source_)
119 return;
120
121 bool needs_begin_frame = surface_ && surface_->NeedsBeginFrame();
122 if (needs_begin_frame == needs_begin_frame_)
123 return;
124
125 needs_begin_frame_ = needs_begin_frame;
126 OnNeedsBeginFrames(needs_begin_frame_);
127 }
128
129 } // namespace exo 97 } // 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