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

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

Issue 2763623002: [ui/ws] Acknowledge BeginFrames in FrameGenerator + add tests. (Closed)
Patch Set: 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
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 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 const gfx::Rect& viewport, 86 const gfx::Rect& viewport,
87 bool resourceless_software_draw) {} 87 bool resourceless_software_draw) {}
88 88
89 void FrameGenerator::SetMemoryPolicy(const cc::ManagedMemoryPolicy& policy) {} 89 void FrameGenerator::SetMemoryPolicy(const cc::ManagedMemoryPolicy& policy) {}
90 90
91 void FrameGenerator::SetExternalTilePriorityConstraints( 91 void FrameGenerator::SetExternalTilePriorityConstraints(
92 const gfx::Rect& viewport_rect, 92 const gfx::Rect& viewport_rect,
93 const gfx::Transform& transform) {} 93 const gfx::Transform& transform) {}
94 94
95 void FrameGenerator::OnBeginFrame(const cc::BeginFrameArgs& begin_frame_args) { 95 void FrameGenerator::OnBeginFrame(const cc::BeginFrameArgs& begin_frame_args) {
96 current_begin_frame_ack_ = cc::BeginFrameAck(
97 begin_frame_args.source_id, begin_frame_args.sequence_number,
98 begin_frame_args.sequence_number, 0, false);
96 if (!root_window_->visible() || 99 if (!root_window_->visible() ||
97 begin_frame_args.type == cc::BeginFrameArgs::MISSED) { 100 begin_frame_args.type == cc::BeginFrameArgs::MISSED) {
101 begin_frame_source_->DidFinishFrame(this, current_begin_frame_ack_);
98 return; 102 return;
99 } 103 }
100 104
105 current_begin_frame_ack_.has_damage = true;
106 last_begin_frame_args_ = begin_frame_args;
107
101 // TODO(fsamuel): We should add a trace for generating a top level frame. 108 // TODO(fsamuel): We should add a trace for generating a top level frame.
102 cc::CompositorFrame frame(GenerateCompositorFrame(root_window_->bounds())); 109 cc::CompositorFrame frame(GenerateCompositorFrame(root_window_->bounds()));
110 compositor_frame_sink_->SubmitCompositorFrame(std::move(frame));
103 111
104 compositor_frame_sink_->SubmitCompositorFrame(std::move(frame)); 112 begin_frame_source_->DidFinishFrame(this, current_begin_frame_ack_);
105 SetNeedsBeginFrame(false); 113 SetNeedsBeginFrame(false);
106 last_begin_frame_args_ = begin_frame_args;
107 } 114 }
108 115
109 const cc::BeginFrameArgs& FrameGenerator::LastUsedBeginFrameArgs() const { 116 const cc::BeginFrameArgs& FrameGenerator::LastUsedBeginFrameArgs() const {
110 return last_begin_frame_args_; 117 return last_begin_frame_args_;
111 } 118 }
112 119
113 void FrameGenerator::OnBeginFrameSourcePausedChanged(bool paused) {} 120 void FrameGenerator::OnBeginFrameSourcePausedChanged(bool paused) {}
114 121
115 cc::CompositorFrame FrameGenerator::GenerateCompositorFrame( 122 cc::CompositorFrame FrameGenerator::GenerateCompositorFrame(
116 const gfx::Rect& output_rect) { 123 const gfx::Rect& output_rect) {
(...skipping 20 matching lines...) Expand all
137 render_pass->filters.Append(cc::FilterOperation::CreateInvertFilter(1.f)); 144 render_pass->filters.Append(cc::FilterOperation::CreateInvertFilter(1.f));
138 quad->SetNew(shared_state, output_rect, output_rect, render_pass_id, 145 quad->SetNew(shared_state, output_rect, output_rect, render_pass_id,
139 0 /* mask_resource_id */, gfx::RectF() /* mask_uv_rect */, 146 0 /* mask_resource_id */, gfx::RectF() /* mask_uv_rect */,
140 gfx::Size() /* mask_texture_size */, 147 gfx::Size() /* mask_texture_size */,
141 gfx::Vector2dF() /* filters_scale */, 148 gfx::Vector2dF() /* filters_scale */,
142 gfx::PointF() /* filters_origin */, 149 gfx::PointF() /* filters_origin */,
143 gfx::RectF() /* tex_coord_rect */); 150 gfx::RectF() /* tex_coord_rect */);
144 frame.render_pass_list.push_back(std::move(invert_pass)); 151 frame.render_pass_list.push_back(std::move(invert_pass));
145 } 152 }
146 frame.metadata.device_scale_factor = device_scale_factor_; 153 frame.metadata.device_scale_factor = device_scale_factor_;
154 frame.metadata.begin_frame_ack = current_begin_frame_ack_;
147 155
148 if (window_manager_surface_info_.is_valid()) { 156 if (window_manager_surface_info_.is_valid()) {
149 frame.metadata.referenced_surfaces.push_back( 157 frame.metadata.referenced_surfaces.push_back(
150 window_manager_surface_info_.id()); 158 window_manager_surface_info_.id());
151 } 159 }
152 160
153 return frame; 161 return frame;
154 } 162 }
155 163
156 void FrameGenerator::DrawWindow(cc::RenderPass* pass) { 164 void FrameGenerator::DrawWindow(cc::RenderPass* pass) {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 observing_begin_frames_ = needs_begin_frame; 199 observing_begin_frames_ = needs_begin_frame;
192 if (needs_begin_frame) 200 if (needs_begin_frame)
193 begin_frame_source_->AddObserver(this); 201 begin_frame_source_->AddObserver(this);
194 else 202 else
195 begin_frame_source_->RemoveObserver(this); 203 begin_frame_source_->RemoveObserver(this);
196 } 204 }
197 205
198 } // namespace ws 206 } // namespace ws
199 207
200 } // namespace ui 208 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698