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; |
} |