Chromium Code Reviews| Index: ui/ozone/platform/dri/gpu_platform_support_gbm.cc |
| diff --git a/ui/ozone/platform/dri/gpu_platform_support_gbm.cc b/ui/ozone/platform/dri/gpu_platform_support_gbm.cc |
| index 051538e3b8d0900e07e8e055b1a3fad3a8237fee..a7e99c593c6f8808fd7941f90c6d7a21fd574e58 100644 |
| --- a/ui/ozone/platform/dri/gpu_platform_support_gbm.cc |
| +++ b/ui/ozone/platform/dri/gpu_platform_support_gbm.cc |
| @@ -7,11 +7,19 @@ |
| #include "ipc/ipc_message_macros.h" |
| #include "ui/ozone/common/gpu/ozone_gpu_messages.h" |
| #include "ui/ozone/platform/dri/dri_surface_factory.h" |
| +#include "ui/ozone/platform/dri/native_window_delegate_impl.h" |
| +#include "ui/ozone/platform/dri/native_window_manager.h" |
| namespace ui { |
| -GpuPlatformSupportGbm::GpuPlatformSupportGbm(DriSurfaceFactory* dri) |
| - : sender_(NULL), dri_(dri) { |
| +GpuPlatformSupportGbm::GpuPlatformSupportGbm( |
| + DriSurfaceFactory* dri, |
| + NativeWindowManager* window_manager, |
| + ScreenManager* screen_manager) |
| + : sender_(NULL), |
| + dri_(dri), |
| + window_manager_(window_manager), |
| + screen_manager_(screen_manager) { |
| } |
| GpuPlatformSupportGbm::~GpuPlatformSupportGbm() {} |
| @@ -31,6 +39,13 @@ bool GpuPlatformSupportGbm::OnMessageReceived(const IPC::Message& message) { |
| bool handled = true; |
| IPC_BEGIN_MESSAGE_MAP(GpuPlatformSupportGbm, message) |
| + IPC_MESSAGE_HANDLER(OzoneGpuMsg_CreateNativeWindowDelegate, |
| + OnCreateNativeWindowDelegate) |
| + IPC_MESSAGE_HANDLER(OzoneGpuMsg_DestoryNativeWindowDelegate, |
| + OnDestoryNativeWindowDelegate) |
| + IPC_MESSAGE_HANDLER(OzoneGpuMsg_NativeWindowBoundsChanged, |
| + OnNativeWindowBoundsChanged) |
| + |
| IPC_MESSAGE_HANDLER(OzoneGpuMsg_CursorSet, OnCursorSet) |
| IPC_MESSAGE_HANDLER(OzoneGpuMsg_CursorMove, OnCursorMove) |
| IPC_MESSAGE_UNHANDLED(handled = false); |
| @@ -44,6 +59,29 @@ bool GpuPlatformSupportGbm::OnMessageReceived(const IPC::Message& message) { |
| return false; |
| } |
| +void GpuPlatformSupportGbm::OnCreateNativeWindowDelegate( |
| + gfx::AcceleratedWidget widget) { |
| + // Due to how the GPU process starts up this IPC call may happen after the IPC |
| + // to create a surface. Since a surface wants to know the window associated |
| + // with it, we create it ahead of time. So when this call happens we do not |
| + // create a delegate if it already exists. |
| + // Note: NativeWindowDelegateImpl registers itself with |window_manager_| on |
| + // allocation, so we don't need to keep track of it further. |
| + if (!window_manager_->HasNativeWindowDelegate(widget)) |
| + new NativeWindowDelegateImpl(widget, window_manager_, screen_manager_); |
|
alexst (slow to review)
2014/08/18 17:43:47
Can you make the registration with window manager
dnicoara
2014/08/18 18:55:24
I think this is better since the object registers
alexst (slow to review)
2014/08/18 20:30:34
I disagree. All I see is "new Stuff()" This requir
spang
2014/08/18 23:48:46
This does look like a memory leak to me as well. "
dnicoara
2014/08/19 15:53:38
Fine, updated.
|
| +} |
| + |
| +void GpuPlatformSupportGbm::OnDestoryNativeWindowDelegate( |
| + gfx::AcceleratedWidget widget) { |
| + scoped_ptr<NativeWindowDelegate> delegate( |
|
alexst (slow to review)
2014/08/18 17:43:47
DCHECK that it exists and remove it explicitly ple
dnicoara
2014/08/18 18:55:24
NativeWindowManager is doing all the DCHECKs, so I
|
| + window_manager_->GetNativeWindowDelegate(widget)); |
| +} |
| + |
| +void GpuPlatformSupportGbm::OnNativeWindowBoundsChanged( |
| + gfx::AcceleratedWidget widget, const gfx::Rect& bounds) { |
| + window_manager_->GetNativeWindowDelegate(widget)->OnBoundsChanged(bounds); |
|
alexst (slow to review)
2014/08/18 17:43:47
DCHECK here please.
dnicoara
2014/08/18 18:55:24
See above comment.
|
| +} |
| + |
| void GpuPlatformSupportGbm::OnCursorSet(gfx::AcceleratedWidget widget, |
| const SkBitmap& bitmap, |
| const gfx::Point& location) { |