Index: services/ui/ws/frame_generator.cc |
diff --git a/services/ui/ws/frame_generator.cc b/services/ui/ws/frame_generator.cc |
index 9f0e5222e1340a5f7e0113a8f1c7aec27ee2c208..a2beb8bc9ed98a528ede87c66da444585e37550b 100644 |
--- a/services/ui/ws/frame_generator.cc |
+++ b/services/ui/ws/frame_generator.cc |
@@ -10,7 +10,7 @@ |
#include "cc/quads/render_pass_draw_quad.h" |
#include "cc/quads/shared_quad_state.h" |
#include "cc/quads/surface_draw_quad.h" |
-#include "services/ui/gpu/gpu_service_internal.h" |
+#include "gpu/ipc/client/gpu_channel_host.h" |
#include "services/ui/surfaces/display_compositor.h" |
#include "services/ui/ws/frame_generator_delegate.h" |
#include "services/ui/ws/server_window.h" |
@@ -37,6 +37,17 @@ FrameGenerator::~FrameGenerator() { |
display_compositor_.reset(); |
} |
+void FrameGenerator::OnGpuChannelEstablished( |
+ scoped_refptr<gpu::GpuChannelHost> channel) { |
+ if (widget_ != gfx::kNullAcceleratedWidget) { |
+ display_compositor_.reset( |
+ new DisplayCompositor(base::ThreadTaskRunnerHandle::Get(), widget_, |
+ std::move(channel), surfaces_state_)); |
+ } else { |
+ gpu_channel_ = std::move(channel); |
+ } |
+} |
+ |
void FrameGenerator::RequestRedraw(const gfx::Rect& redraw_region) { |
dirty_rect_.Union(redraw_region); |
WantToDraw(); |
@@ -44,11 +55,11 @@ void FrameGenerator::RequestRedraw(const gfx::Rect& redraw_region) { |
void FrameGenerator::OnAcceleratedWidgetAvailable( |
gfx::AcceleratedWidget widget) { |
- if (widget != gfx::kNullAcceleratedWidget) { |
- display_compositor_.reset(new DisplayCompositor( |
- base::ThreadTaskRunnerHandle::Get(), widget, |
- GpuServiceInternal::GetInstance()->gpu_channel_local(), |
- surfaces_state_)); |
+ widget_ = widget; |
+ if (gpu_channel_ && widget != gfx::kNullAcceleratedWidget) { |
+ display_compositor_.reset( |
+ new DisplayCompositor(base::ThreadTaskRunnerHandle::Get(), widget_, |
+ std::move(gpu_channel_), surfaces_state_)); |
} |
} |
@@ -85,8 +96,8 @@ void FrameGenerator::Draw() { |
// is submitted 'soon'. |
} |
} |
- frame_pending_ = true; |
if (display_compositor_) { |
+ frame_pending_ = true; |
display_compositor_->SubmitCompositorFrame( |
std::move(frame), |
base::Bind(&FrameGenerator::DidDraw, weak_factory_.GetWeakPtr())); |