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

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

Issue 2694043003: FrameGenerator should not be created until an AcceleratedWidget is available (Closed)
Patch Set: Fix frame size Created 3 years, 10 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 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/frame_generator_unittest.cc » ('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 9dc197df89aec5933832765c4f1857f7d746f921..505ad37dbead465d23c0811143bf8ec4efdf67b0 100644
--- a/services/ui/ws/frame_generator.cc
+++ b/services/ui/ws/frame_generator.cc
@@ -23,27 +23,10 @@ namespace ui {
namespace ws {
FrameGenerator::FrameGenerator(FrameGeneratorDelegate* delegate,
- ServerWindow* root_window)
- : delegate_(delegate),
- root_window_(root_window),
- binding_(this) {
+ ServerWindow* root_window,
+ gfx::AcceleratedWidget widget)
+ : delegate_(delegate), root_window_(root_window), binding_(this) {
DCHECK(delegate_);
-}
-
-void FrameGenerator::SetDeviceScaleFactor(float device_scale_factor) {
- if (device_scale_factor_ == device_scale_factor)
- return;
- device_scale_factor_ = device_scale_factor;
- if (compositor_frame_sink_)
- compositor_frame_sink_->SetNeedsBeginFrame(true);
-}
-
-FrameGenerator::~FrameGenerator() {
- compositor_frame_sink_.reset();
-}
-
-void FrameGenerator::OnAcceleratedWidgetAvailable(
- gfx::AcceleratedWidget widget) {
DCHECK_NE(gfx::kNullAcceleratedWidget, widget);
cc::mojom::MojoCompositorFrameSinkAssociatedRequest sink_request =
mojo::MakeRequest(&compositor_frame_sink_);
@@ -54,6 +37,15 @@ void FrameGenerator::OnAcceleratedWidgetAvailable(
std::move(display_request));
}
+FrameGenerator::~FrameGenerator() = default;
+
+void FrameGenerator::SetDeviceScaleFactor(float device_scale_factor) {
+ if (device_scale_factor_ == device_scale_factor)
+ return;
+ device_scale_factor_ = device_scale_factor;
+ compositor_frame_sink_->SetNeedsBeginFrame(true);
+}
+
void FrameGenerator::OnSurfaceCreated(const cc::SurfaceInfo& surface_info) {
DCHECK(surface_info.id().is_valid());
@@ -79,24 +71,21 @@ void FrameGenerator::OnBeginFrame(const cc::BeginFrameArgs& begin_frame_arags) {
// TODO(fsamuel): We should add a trace for generating a top level frame.
cc::CompositorFrame frame(GenerateCompositorFrame(root_window_->bounds()));
- if (compositor_frame_sink_) {
- gfx::Size frame_size = last_submitted_frame_size_;
- if (!frame.render_pass_list.empty())
- frame_size = frame.render_pass_list[0]->output_rect.size();
-
- if (!local_surface_id_.is_valid() ||
- frame_size != last_submitted_frame_size_) {
- local_surface_id_ = id_allocator_.GenerateId();
- display_private_->ResizeDisplay(frame_size);
- }
-
- display_private_->SetLocalSurfaceId(local_surface_id_,
- device_scale_factor_);
- compositor_frame_sink_->SubmitCompositorFrame(local_surface_id_,
- std::move(frame));
- compositor_frame_sink_->SetNeedsBeginFrame(false);
- last_submitted_frame_size_ = frame_size;
+ gfx::Size frame_size = last_submitted_frame_size_;
+ if (!frame.render_pass_list.empty())
+ frame_size = frame.render_pass_list.back()->output_rect.size();
+
+ if (!local_surface_id_.is_valid() ||
+ frame_size != last_submitted_frame_size_) {
+ local_surface_id_ = id_allocator_.GenerateId();
+ display_private_->ResizeDisplay(frame_size);
}
+
+ display_private_->SetLocalSurfaceId(local_surface_id_, device_scale_factor_);
+ compositor_frame_sink_->SubmitCompositorFrame(local_surface_id_,
+ std::move(frame));
+ compositor_frame_sink_->SetNeedsBeginFrame(false);
+ last_submitted_frame_size_ = frame_size;
}
void FrameGenerator::ReclaimResources(
« 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