OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/ozone/platform/dri/dri_surface_factory.h" | 5 #include "ui/ozone/platform/dri/dri_surface_factory.h" |
6 | 6 |
7 #include <errno.h> | 7 #include <errno.h> |
8 | 8 |
9 #include "base/debug/trace_event.h" | 9 #include "base/debug/trace_event.h" |
10 #include "third_party/skia/include/core/SkBitmap.h" | 10 #include "third_party/skia/include/core/SkBitmap.h" |
11 #include "third_party/skia/include/core/SkDevice.h" | 11 #include "third_party/skia/include/core/SkDevice.h" |
12 #include "third_party/skia/include/core/SkSurface.h" | 12 #include "third_party/skia/include/core/SkSurface.h" |
13 #include "ui/gfx/native_widget_types.h" | 13 #include "ui/gfx/native_widget_types.h" |
14 #include "ui/ozone/platform/dri/dri_buffer.h" | 14 #include "ui/ozone/platform/dri/dri_buffer.h" |
15 #include "ui/ozone/platform/dri/dri_surface.h" | 15 #include "ui/ozone/platform/dri/dri_surface.h" |
16 #include "ui/ozone/platform/dri/dri_util.h" | 16 #include "ui/ozone/platform/dri/dri_util.h" |
| 17 #include "ui/ozone/platform/dri/dri_window_delegate_impl.h" |
| 18 #include "ui/ozone/platform/dri/dri_window_manager.h" |
17 #include "ui/ozone/platform/dri/dri_wrapper.h" | 19 #include "ui/ozone/platform/dri/dri_wrapper.h" |
18 #include "ui/ozone/platform/dri/hardware_display_controller.h" | 20 #include "ui/ozone/platform/dri/hardware_display_controller.h" |
19 #include "ui/ozone/platform/dri/screen_manager.h" | 21 #include "ui/ozone/platform/dri/screen_manager.h" |
20 #include "ui/ozone/public/surface_ozone_canvas.h" | 22 #include "ui/ozone/public/surface_ozone_canvas.h" |
21 | 23 |
22 namespace ui { | 24 namespace ui { |
23 | 25 |
24 namespace { | 26 namespace { |
25 | 27 |
26 // TODO(dnicoara) Read the cursor plane size from the hardware. | 28 // TODO(dnicoara) Read the cursor plane size from the hardware. |
(...skipping 12 matching lines...) Expand all Loading... |
39 0, 0, canvas->getDeviceSize().width(), canvas->getDeviceSize().height()); | 41 0, 0, canvas->getDeviceSize().width(), canvas->getDeviceSize().height()); |
40 canvas->clipRect(clip, SkRegion::kReplace_Op); | 42 canvas->clipRect(clip, SkRegion::kReplace_Op); |
41 canvas->drawBitmapRectToRect(image, &damage, damage); | 43 canvas->drawBitmapRectToRect(image, &damage, damage); |
42 } | 44 } |
43 | 45 |
44 } // namespace | 46 } // namespace |
45 | 47 |
46 // static | 48 // static |
47 const gfx::AcceleratedWidget DriSurfaceFactory::kDefaultWidgetHandle = 1; | 49 const gfx::AcceleratedWidget DriSurfaceFactory::kDefaultWidgetHandle = 1; |
48 | 50 |
49 DriSurfaceFactory::DriSurfaceFactory( | 51 DriSurfaceFactory::DriSurfaceFactory(DriWrapper* drm, |
50 DriWrapper* drm, | 52 ScreenManager* screen_manager, |
51 ScreenManager* screen_manager) | 53 DriWindowManager* window_manager) |
52 : drm_(drm), | 54 : drm_(drm), |
53 screen_manager_(screen_manager), | 55 screen_manager_(screen_manager), |
| 56 window_manager_(window_manager), |
54 state_(UNINITIALIZED), | 57 state_(UNINITIALIZED), |
55 allocated_widgets_(0), | |
56 cursor_frontbuffer_(0) { | 58 cursor_frontbuffer_(0) { |
57 } | 59 } |
58 | 60 |
59 DriSurfaceFactory::~DriSurfaceFactory() { | 61 DriSurfaceFactory::~DriSurfaceFactory() { |
60 if (state_ == INITIALIZED) | 62 if (state_ == INITIALIZED) |
61 ShutdownHardware(); | 63 ShutdownHardware(); |
62 } | 64 } |
63 | 65 |
64 DriSurfaceFactory::HardwareState DriSurfaceFactory::InitializeHardware() { | 66 DriSurfaceFactory::HardwareState DriSurfaceFactory::InitializeHardware() { |
65 if (state_ != UNINITIALIZED) | 67 if (state_ != UNINITIALIZED) |
(...skipping 19 matching lines...) Expand all Loading... |
85 state_ = INITIALIZED; | 87 state_ = INITIALIZED; |
86 return state_; | 88 return state_; |
87 } | 89 } |
88 | 90 |
89 void DriSurfaceFactory::ShutdownHardware() { | 91 void DriSurfaceFactory::ShutdownHardware() { |
90 DCHECK(state_ == INITIALIZED); | 92 DCHECK(state_ == INITIALIZED); |
91 state_ = UNINITIALIZED; | 93 state_ = UNINITIALIZED; |
92 } | 94 } |
93 | 95 |
94 scoped_ptr<ui::SurfaceOzoneCanvas> DriSurfaceFactory::CreateCanvasForWidget( | 96 scoped_ptr<ui::SurfaceOzoneCanvas> DriSurfaceFactory::CreateCanvasForWidget( |
95 gfx::AcceleratedWidget w) { | 97 gfx::AcceleratedWidget widget) { |
96 DCHECK(state_ == INITIALIZED); | 98 DCHECK(state_ == INITIALIZED); |
97 // Initial cursor set. | 99 // Initial cursor set. |
98 ResetCursor(w); | 100 ResetCursor(widget); |
99 | 101 |
100 return scoped_ptr<ui::SurfaceOzoneCanvas>( | 102 return scoped_ptr<ui::SurfaceOzoneCanvas>( |
101 new DriSurface(drm_, screen_manager_->GetDisplayController(w))); | 103 new DriSurface(window_manager_->GetWindowDelegate(widget), drm_)); |
102 } | 104 } |
103 | 105 |
104 bool DriSurfaceFactory::LoadEGLGLES2Bindings( | 106 bool DriSurfaceFactory::LoadEGLGLES2Bindings( |
105 AddGLLibraryCallback add_gl_library, | 107 AddGLLibraryCallback add_gl_library, |
106 SetGLGetProcAddressProcCallback set_gl_get_proc_address) { | 108 SetGLGetProcAddressProcCallback set_gl_get_proc_address) { |
107 return false; | 109 return false; |
108 } | 110 } |
109 | 111 |
110 gfx::AcceleratedWidget DriSurfaceFactory::GetAcceleratedWidget() { | 112 void DriSurfaceFactory::SetHardwareCursor(gfx::AcceleratedWidget widget, |
111 DCHECK(state_ != FAILED); | |
112 | |
113 // We're not using 0 since other code assumes that a 0 AcceleratedWidget is an | |
114 // invalid widget. | |
115 return ++allocated_widgets_; | |
116 } | |
117 | |
118 gfx::Size DriSurfaceFactory::GetWidgetSize(gfx::AcceleratedWidget w) { | |
119 base::WeakPtr<HardwareDisplayController> controller = | |
120 screen_manager_->GetDisplayController(w); | |
121 if (controller) | |
122 return gfx::Size(controller->get_mode().hdisplay, | |
123 controller->get_mode().vdisplay); | |
124 | |
125 return gfx::Size(0, 0); | |
126 } | |
127 | |
128 void DriSurfaceFactory::SetHardwareCursor(gfx::AcceleratedWidget window, | |
129 const SkBitmap& image, | 113 const SkBitmap& image, |
130 const gfx::Point& location) { | 114 const gfx::Point& location) { |
131 cursor_bitmap_ = image; | 115 cursor_bitmap_ = image; |
132 cursor_location_ = location; | 116 cursor_location_ = location; |
133 | 117 |
134 if (state_ != INITIALIZED) | 118 if (state_ != INITIALIZED) |
135 return; | 119 return; |
136 | 120 |
137 ResetCursor(window); | 121 ResetCursor(widget); |
138 } | 122 } |
139 | 123 |
140 void DriSurfaceFactory::MoveHardwareCursor(gfx::AcceleratedWidget window, | 124 void DriSurfaceFactory::MoveHardwareCursor(gfx::AcceleratedWidget widget, |
141 const gfx::Point& location) { | 125 const gfx::Point& location) { |
142 cursor_location_ = location; | 126 cursor_location_ = location; |
143 | 127 |
144 if (state_ != INITIALIZED) | 128 if (state_ != INITIALIZED) |
145 return; | 129 return; |
146 | 130 |
147 base::WeakPtr<HardwareDisplayController> controller = | 131 HardwareDisplayController* controller = |
148 screen_manager_->GetDisplayController(window); | 132 window_manager_->GetWindowDelegate(widget)->GetController(); |
149 if (controller) | 133 if (controller) |
150 controller->MoveCursor(location); | 134 controller->MoveCursor(location); |
151 } | 135 } |
152 | 136 |
153 //////////////////////////////////////////////////////////////////////////////// | 137 //////////////////////////////////////////////////////////////////////////////// |
154 // DriSurfaceFactory private | 138 // DriSurfaceFactory private |
155 | 139 |
156 void DriSurfaceFactory::ResetCursor(gfx::AcceleratedWidget w) { | 140 void DriSurfaceFactory::ResetCursor(gfx::AcceleratedWidget widget) { |
157 base::WeakPtr<HardwareDisplayController> controller = | 141 HardwareDisplayController* controller = |
158 screen_manager_->GetDisplayController(w); | 142 window_manager_->GetWindowDelegate(widget)->GetController(); |
159 | 143 |
160 if (!cursor_bitmap_.empty()) { | 144 if (!cursor_bitmap_.empty()) { |
161 // Draw new cursor into backbuffer. | 145 // Draw new cursor into backbuffer. |
162 UpdateCursorImage(cursor_buffers_[cursor_frontbuffer_ ^ 1].get(), | 146 UpdateCursorImage(cursor_buffers_[cursor_frontbuffer_ ^ 1].get(), |
163 cursor_bitmap_); | 147 cursor_bitmap_); |
164 | 148 |
165 // Reset location & buffer. | 149 // Reset location & buffer. |
166 if (controller) { | 150 if (controller) { |
167 controller->MoveCursor(cursor_location_); | 151 controller->MoveCursor(cursor_location_); |
168 controller->SetCursor(cursor_buffers_[cursor_frontbuffer_ ^ 1]); | 152 controller->SetCursor(cursor_buffers_[cursor_frontbuffer_ ^ 1]); |
169 cursor_frontbuffer_ ^= 1; | 153 cursor_frontbuffer_ ^= 1; |
170 } | 154 } |
171 } else { | 155 } else { |
172 // No cursor set. | 156 // No cursor set. |
173 if (controller) | 157 if (controller) |
174 controller->UnsetCursor(); | 158 controller->UnsetCursor(); |
175 } | 159 } |
176 } | 160 } |
177 | 161 |
178 } // namespace ui | 162 } // namespace ui |
OLD | NEW |