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

Side by Side Diff: services/ui/ws/frame_generator.cc

Issue 2763623002: [ui/ws] Acknowledge BeginFrames in FrameGenerator + add tests. (Closed)
Patch Set: address comments 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 | « services/ui/ws/frame_generator.h ('k') | services/ui/ws/frame_generator_unittest.cc » ('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 "services/ui/ws/frame_generator.h" 5 #include "services/ui/ws/frame_generator.h"
6 6
7 #include <utility> 7 #include <utility>
8 #include <vector> 8 #include <vector>
9 9
10 #include "cc/output/compositor_frame.h" 10 #include "cc/output/compositor_frame.h"
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 const gfx::Rect& viewport, 91 const gfx::Rect& viewport,
92 bool resourceless_software_draw) {} 92 bool resourceless_software_draw) {}
93 93
94 void FrameGenerator::SetMemoryPolicy(const cc::ManagedMemoryPolicy& policy) {} 94 void FrameGenerator::SetMemoryPolicy(const cc::ManagedMemoryPolicy& policy) {}
95 95
96 void FrameGenerator::SetExternalTilePriorityConstraints( 96 void FrameGenerator::SetExternalTilePriorityConstraints(
97 const gfx::Rect& viewport_rect, 97 const gfx::Rect& viewport_rect,
98 const gfx::Transform& transform) {} 98 const gfx::Transform& transform) {}
99 99
100 void FrameGenerator::OnBeginFrame(const cc::BeginFrameArgs& begin_frame_args) { 100 void FrameGenerator::OnBeginFrame(const cc::BeginFrameArgs& begin_frame_args) {
101 current_begin_frame_ack_ = cc::BeginFrameAck(
102 begin_frame_args.source_id, begin_frame_args.sequence_number,
103 begin_frame_args.sequence_number, 0, false);
101 if (!root_window_->visible() || 104 if (!root_window_->visible() ||
102 begin_frame_args.type == cc::BeginFrameArgs::MISSED) { 105 begin_frame_args.type == cc::BeginFrameArgs::MISSED) {
106 begin_frame_source_->DidFinishFrame(this, current_begin_frame_ack_);
103 return; 107 return;
104 } 108 }
105 109
110 current_begin_frame_ack_.has_damage = true;
111 last_begin_frame_args_ = begin_frame_args;
112
106 // TODO(fsamuel): We should add a trace for generating a top level frame. 113 // TODO(fsamuel): We should add a trace for generating a top level frame.
107 cc::CompositorFrame frame(GenerateCompositorFrame(root_window_->bounds())); 114 cc::CompositorFrame frame(GenerateCompositorFrame(root_window_->bounds()));
115 compositor_frame_sink_->SubmitCompositorFrame(std::move(frame));
108 116
109 compositor_frame_sink_->SubmitCompositorFrame(std::move(frame)); 117 begin_frame_source_->DidFinishFrame(this, current_begin_frame_ack_);
110 SetNeedsBeginFrame(false); 118 SetNeedsBeginFrame(false);
111 last_begin_frame_args_ = begin_frame_args;
112 } 119 }
113 120
114 const cc::BeginFrameArgs& FrameGenerator::LastUsedBeginFrameArgs() const { 121 const cc::BeginFrameArgs& FrameGenerator::LastUsedBeginFrameArgs() const {
115 return last_begin_frame_args_; 122 return last_begin_frame_args_;
116 } 123 }
117 124
118 void FrameGenerator::OnBeginFrameSourcePausedChanged(bool paused) {} 125 void FrameGenerator::OnBeginFrameSourcePausedChanged(bool paused) {}
119 126
120 cc::CompositorFrame FrameGenerator::GenerateCompositorFrame( 127 cc::CompositorFrame FrameGenerator::GenerateCompositorFrame(
121 const gfx::Rect& output_rect) { 128 const gfx::Rect& output_rect) {
(...skipping 21 matching lines...) Expand all
143 cc::FilterOperation::CreateInvertFilter(1.f)); 150 cc::FilterOperation::CreateInvertFilter(1.f));
144 quad->SetNew(shared_state, output_rect, output_rect, render_pass_id, 151 quad->SetNew(shared_state, output_rect, output_rect, render_pass_id,
145 0 /* mask_resource_id */, gfx::RectF() /* mask_uv_rect */, 152 0 /* mask_resource_id */, gfx::RectF() /* mask_uv_rect */,
146 gfx::Size() /* mask_texture_size */, 153 gfx::Size() /* mask_texture_size */,
147 gfx::Vector2dF() /* filters_scale */, 154 gfx::Vector2dF() /* filters_scale */,
148 gfx::PointF() /* filters_origin */, 155 gfx::PointF() /* filters_origin */,
149 gfx::RectF() /* tex_coord_rect */); 156 gfx::RectF() /* tex_coord_rect */);
150 frame.render_pass_list.push_back(std::move(invert_pass)); 157 frame.render_pass_list.push_back(std::move(invert_pass));
151 } 158 }
152 frame.metadata.device_scale_factor = device_scale_factor_; 159 frame.metadata.device_scale_factor = device_scale_factor_;
160 frame.metadata.begin_frame_ack = current_begin_frame_ack_;
153 161
154 if (window_manager_surface_info_.is_valid()) { 162 if (window_manager_surface_info_.is_valid()) {
155 frame.metadata.referenced_surfaces.push_back( 163 frame.metadata.referenced_surfaces.push_back(
156 window_manager_surface_info_.id()); 164 window_manager_surface_info_.id());
157 } 165 }
158 166
159 return frame; 167 return frame;
160 } 168 }
161 169
162 void FrameGenerator::DrawWindow(cc::RenderPass* pass) { 170 void FrameGenerator::DrawWindow(cc::RenderPass* pass) {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 observing_begin_frames_ = needs_begin_frame; 205 observing_begin_frames_ = needs_begin_frame;
198 if (needs_begin_frame) 206 if (needs_begin_frame)
199 begin_frame_source_->AddObserver(this); 207 begin_frame_source_->AddObserver(this);
200 else 208 else
201 begin_frame_source_->RemoveObserver(this); 209 begin_frame_source_->RemoveObserver(this);
202 } 210 }
203 211
204 } // namespace ws 212 } // namespace ws
205 213
206 } // namespace ui 214 } // namespace ui
OLDNEW
« no previous file with comments | « services/ui/ws/frame_generator.h ('k') | services/ui/ws/frame_generator_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698