Chromium Code Reviews| Index: ui/ozone/platform/drm/gpu/gbm_buffer.cc |
| diff --git a/ui/ozone/platform/drm/gpu/gbm_buffer.cc b/ui/ozone/platform/drm/gpu/gbm_buffer.cc |
| index 3d07983a8ee5baaa4e9269684efd229b5cc01eeb..e2e53f6a8e473c1b726b79add8c6576e2dfdf9ba 100644 |
| --- a/ui/ozone/platform/drm/gpu/gbm_buffer.cc |
| +++ b/ui/ozone/platform/drm/gpu/gbm_buffer.cc |
| @@ -14,8 +14,10 @@ |
| #include "base/trace_event/trace_event.h" |
| #include "ui/gfx/geometry/size_conversions.h" |
| #include "ui/gfx/native_pixmap_handle_ozone.h" |
| +#include "ui/ozone/platform/drm/gpu/drm_thread.h" |
| #include "ui/ozone/platform/drm/gpu/drm_window.h" |
| #include "ui/ozone/platform/drm/gpu/gbm_device.h" |
| +#include "ui/ozone/platform/drm/gpu/proxy_helpers.h" |
| namespace ui { |
| @@ -72,9 +74,8 @@ scoped_refptr<GbmBuffer> GbmBuffer::CreateBuffer( |
| } |
| GbmPixmap::GbmPixmap(const scoped_refptr<GbmBuffer>& buffer, |
| - ScreenManager* screen_manager) |
| - : buffer_(buffer), screen_manager_(screen_manager) { |
| -} |
| + DrmThread* drm_thread) |
| + : buffer_(buffer), drm_thread_(drm_thread) {} |
| bool GbmPixmap::Initialize() { |
| // We want to use the GBM API because it's going to call into libdrm |
| @@ -145,8 +146,16 @@ bool GbmPixmap::ScheduleOverlayPlane(gfx::AcceleratedWidget widget, |
| } |
| } |
| - screen_manager_->GetWindow(widget)->QueueOverlayPlane(OverlayPlane( |
| - buffer_, plane_z_order, plane_transform, display_bounds, crop_rect)); |
| + if (widget != cached_widget_) { |
| + cached_widget_ = widget; |
| + cached_window_ = drm_thread_->GetWindow(cached_widget_); |
|
spang
2015/09/18 00:46:25
How about:
(1) store window_id -> Surface map in
dnicoara
2015/09/18 17:43:08
Acknowledged.
|
| + } |
| + |
| + drm_thread_->task_runner()->PostTask( |
| + FROM_HERE, |
| + base::Bind(&DrmWindow::QueueOverlayPlane, cached_window_, |
| + OverlayPlane(buffer_, plane_z_order, plane_transform, |
| + display_bounds, crop_rect))); |
| return true; |
| } |