1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "ui/ozone/platform/dri/dri_window_delegate_proxy.h"
6
7#include "ui/ozone/common/gpu/ozone_gpu_messages.h"
8#include "ui/ozone/platform/dri/gpu_platform_support_host_gbm.h"
9
10namespace ui {
11
12DriWindowDelegateProxy::DriWindowDelegateProxy(
13    gfx::AcceleratedWidget widget,
14    GpuPlatformSupportHostGbm* sender)
15    : widget_(widget), sender_(sender) {
16}
17
18DriWindowDelegateProxy::~DriWindowDelegateProxy() {
19}
20
21void DriWindowDelegateProxy::Initialize() {
22  TRACE_EVENT1("dri", "DriWindowDelegateProxy::Initialize", "widget", widget_);
23  sender_->AddChannelObserver(this);
24}
25
26void DriWindowDelegateProxy::Shutdown() {
27  TRACE_EVENT1("dri", "DriWindowDelegateProxy::Shutdown", "widget", widget_);
28  sender_->RemoveChannelObserver(this);
29  if (!sender_->IsConnected())
30    return;
31
32  bool status = sender_->Send(new OzoneGpuMsg_DestroyWindowDelegate(widget_));
33  DCHECK(status);
34}
35
36gfx::AcceleratedWidget DriWindowDelegateProxy::GetAcceleratedWidget() {
37  return widget_;
38}
39
40HardwareDisplayController* DriWindowDelegateProxy::GetController() {
41  NOTREACHED();
42  return NULL;
43}
44
45void DriWindowDelegateProxy::OnBoundsChanged(const gfx::Rect& bounds) {
46  TRACE_EVENT2("dri",
47               "DriWindowDelegateProxy::OnBoundsChanged",
48               "widget",
49               widget_,
50               "bounds",
51               bounds.ToString());
52  bounds_ = bounds;
53  if (!sender_->IsConnected())
54    return;
55
56  bool status =
57      sender_->Send(new OzoneGpuMsg_WindowBoundsChanged(widget_, bounds));
58  DCHECK(status);
59}
60
61void DriWindowDelegateProxy::OnChannelEstablished() {
62  TRACE_EVENT1(
63      "dri", "DriWindowDelegateProxy::OnChannelEstablished", "widget", widget_);
64  bool status = sender_->Send(new OzoneGpuMsg_CreateWindowDelegate(widget_));
65  DCHECK(status);
66  OnBoundsChanged(bounds_);
67}
68
69void DriWindowDelegateProxy::OnChannelDestroyed() {
70  TRACE_EVENT1(
71      "dri", "DriWindowDelegateProxy::OnChannelDestroyed", "widget", widget_);
72}
73
74}  // namespace ui
75