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

Unified Diff: services/ui/ws/frame_generator.cc

Issue 2474113002: Mus+Ash: Unified BeginFrame Skeleton (Closed)
Patch Set: Rebase Created 4 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « services/ui/ws/frame_generator.h ('k') | services/ui/ws/platform_display.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: services/ui/ws/frame_generator.cc
diff --git a/services/ui/ws/frame_generator.cc b/services/ui/ws/frame_generator.cc
index 6722eeab7af9c07e21b842fd353f5d81da557aa4..d9333340ad44ef18123c913388d8d969e8a5c36b 100644
--- a/services/ui/ws/frame_generator.cc
+++ b/services/ui/ws/frame_generator.cc
@@ -30,7 +30,6 @@ FrameGenerator::FrameGenerator(FrameGeneratorDelegate* delegate,
WindowIdToTransportId(root_window->id()),
static_cast<uint32_t>(mojom::CompositorFrameSinkType::DEFAULT)),
root_window_(root_window),
- draw_timer_(false, false),
binding_(this),
weak_factory_(this) {
DCHECK(delegate_);
@@ -58,16 +57,16 @@ void FrameGenerator::OnGpuChannelEstablished(
channel->gpu_memory_buffer_manager(),
new SurfacesContextProvider(widget_, channel), std::move(request),
binding_.CreateInterfacePtrAndBind());
+ // TODO(fsamuel): This means we're always requesting a new BeginFrame signal
+ // even when we don't need it. Once surface ID propagation work is done,
+ // this will not be necessary because FrameGenerator will only need a
+ // BeginFrame if the window manager changes.
+ compositor_frame_sink_->SetNeedsBeginFrame(true);
} else {
gpu_channel_ = std::move(channel);
}
}
-void FrameGenerator::RequestRedraw(const gfx::Rect& redraw_region) {
- dirty_rect_.Union(redraw_region);
- WantToDraw();
-}
-
void FrameGenerator::OnAcceleratedWidgetAvailable(
gfx::AcceleratedWidget widget) {
widget_ = widget;
@@ -79,50 +78,37 @@ void FrameGenerator::OnAcceleratedWidgetAvailable(
gpu_channel_->gpu_memory_buffer_manager(),
new SurfacesContextProvider(widget_, std::move(gpu_channel_)),
std::move(request), binding_.CreateInterfacePtrAndBind());
+ // TODO(fsamuel): This means we're always requesting a new BeginFrame signal
+ // even when we don't need it. Once surface ID propagation work is done,
+ // this will not be necessary because FrameGenerator will only need a
+ // BeginFrame if the window manager changes.
+ compositor_frame_sink_->SetNeedsBeginFrame(true);
}
}
-void FrameGenerator::DidReceiveCompositorFrameAck() {
- frame_pending_ = false;
- if (!dirty_rect_.IsEmpty())
- WantToDraw();
-}
-
-void FrameGenerator::ReclaimResources(
- const cc::ReturnedResourceArray& resources) {
- // Nothing to do here because FrameGenerator CompositorFrames don't reference
- // any resources.
-}
-
-void FrameGenerator::WantToDraw() {
- if (draw_timer_.IsRunning() || frame_pending_)
- return;
-
- // TODO(rjkroege): Use vblank to kick off Draw.
- draw_timer_.Start(
- FROM_HERE, base::TimeDelta(),
- base::Bind(&FrameGenerator::Draw, weak_factory_.GetWeakPtr()));
-}
+void FrameGenerator::DidReceiveCompositorFrameAck() {}
-void FrameGenerator::Draw() {
+void FrameGenerator::OnBeginFrame(const cc::BeginFrameArgs& begin_frame_arags) {
if (!root_window_->visible())
return;
- dirty_rect_.Intersect(root_window_->bounds());
// TODO(fsamuel): We should add a trace for generating a top level frame.
cc::CompositorFrame frame(GenerateCompositorFrame(root_window_->bounds()));
- if (compositor_frame_sink_) {
- frame_pending_ = true;
+ if (compositor_frame_sink_)
compositor_frame_sink_->SubmitCompositorFrame(std::move(frame));
- }
- dirty_rect_ = gfx::Rect();
+}
+
+void FrameGenerator::ReclaimResources(
+ const cc::ReturnedResourceArray& resources) {
+ // Nothing to do here because FrameGenerator CompositorFrames don't reference
+ // any resources.
}
cc::CompositorFrame FrameGenerator::GenerateCompositorFrame(
const gfx::Rect& output_rect) {
const cc::RenderPassId render_pass_id(1, 1);
std::unique_ptr<cc::RenderPass> render_pass = cc::RenderPass::Create();
- render_pass->SetNew(render_pass_id, output_rect, dirty_rect_,
+ render_pass->SetNew(render_pass_id, output_rect, output_rect,
gfx::Transform());
DrawWindowTree(render_pass.get(), root_window_, gfx::Vector2d(), 1.0f);
@@ -131,7 +117,7 @@ cc::CompositorFrame FrameGenerator::GenerateCompositorFrame(
frame.render_pass_list.push_back(std::move(render_pass));
if (delegate_->IsInHighContrastMode()) {
std::unique_ptr<cc::RenderPass> invert_pass = cc::RenderPass::Create();
- invert_pass->SetNew(cc::RenderPassId(2, 0), output_rect, dirty_rect_,
+ invert_pass->SetNew(cc::RenderPassId(2, 0), output_rect, output_rect,
gfx::Transform());
cc::SharedQuadState* shared_state =
invert_pass->CreateAndAppendSharedQuadState();
« no previous file with comments | « services/ui/ws/frame_generator.h ('k') | services/ui/ws/platform_display.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698