OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "components/exo/display.h" | 5 #include "components/exo/display.h" |
6 | 6 |
7 #include <iterator> | 7 #include <iterator> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "ash/common/shell_window_ids.h" | 10 #include "ash/common/shell_window_ids.h" |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 } | 48 } |
49 | 49 |
50 std::unique_ptr<SharedMemory> Display::CreateSharedMemory( | 50 std::unique_ptr<SharedMemory> Display::CreateSharedMemory( |
51 const base::SharedMemoryHandle& handle, | 51 const base::SharedMemoryHandle& handle, |
52 size_t size) { | 52 size_t size) { |
53 TRACE_EVENT1("exo", "Display::CreateSharedMemory", "size", size); | 53 TRACE_EVENT1("exo", "Display::CreateSharedMemory", "size", size); |
54 | 54 |
55 if (!base::SharedMemory::IsHandleValid(handle)) | 55 if (!base::SharedMemory::IsHandleValid(handle)) |
56 return nullptr; | 56 return nullptr; |
57 | 57 |
58 return base::WrapUnique(new SharedMemory(handle)); | 58 return base::MakeUnique<SharedMemory>(handle); |
59 } | 59 } |
60 | 60 |
61 #if defined(USE_OZONE) | 61 #if defined(USE_OZONE) |
62 std::unique_ptr<Buffer> Display::CreateLinuxDMABufBuffer( | 62 std::unique_ptr<Buffer> Display::CreateLinuxDMABufBuffer( |
63 const gfx::Size& size, | 63 const gfx::Size& size, |
64 gfx::BufferFormat format, | 64 gfx::BufferFormat format, |
65 const std::vector<gfx::NativePixmapPlane>& planes, | 65 const std::vector<gfx::NativePixmapPlane>& planes, |
66 std::vector<base::ScopedFD>&& fds) { | 66 std::vector<base::ScopedFD>&& fds) { |
67 TRACE_EVENT1("exo", "Display::CreateLinuxDMABufBuffer", "size", | 67 TRACE_EVENT1("exo", "Display::CreateLinuxDMABufBuffer", "size", |
68 size.ToString()); | 68 size.ToString()); |
(...skipping 20 matching lines...) Expand all Loading... |
89 bool use_zero_copy = true; | 89 bool use_zero_copy = true; |
90 | 90 |
91 // List of overlay formats that are known to be supported. | 91 // List of overlay formats that are known to be supported. |
92 // TODO(reveman): Determine this at runtime. | 92 // TODO(reveman): Determine this at runtime. |
93 const gfx::BufferFormat kOverlayFormats[] = {gfx::BufferFormat::RGBA_8888, | 93 const gfx::BufferFormat kOverlayFormats[] = {gfx::BufferFormat::RGBA_8888, |
94 gfx::BufferFormat::RGBX_8888}; | 94 gfx::BufferFormat::RGBX_8888}; |
95 bool is_overlay_candidate = | 95 bool is_overlay_candidate = |
96 std::find(std::begin(kOverlayFormats), std::end(kOverlayFormats), | 96 std::find(std::begin(kOverlayFormats), std::end(kOverlayFormats), |
97 format) != std::end(kOverlayFormats); | 97 format) != std::end(kOverlayFormats); |
98 | 98 |
99 return base::WrapUnique(new Buffer( | 99 return base::MakeUnique<Buffer>( |
100 std::move(gpu_memory_buffer), GL_TEXTURE_EXTERNAL_OES, | 100 std::move(gpu_memory_buffer), GL_TEXTURE_EXTERNAL_OES, |
101 // COMMANDS_COMPLETED queries are required by native pixmaps. | 101 // COMMANDS_COMPLETED queries are required by native pixmaps. |
102 GL_COMMANDS_COMPLETED_CHROMIUM, use_zero_copy, is_overlay_candidate)); | 102 GL_COMMANDS_COMPLETED_CHROMIUM, use_zero_copy, is_overlay_candidate); |
103 } | 103 } |
104 #endif | 104 #endif |
105 | 105 |
106 std::unique_ptr<ShellSurface> Display::CreateShellSurface(Surface* surface) { | 106 std::unique_ptr<ShellSurface> Display::CreateShellSurface(Surface* surface) { |
107 TRACE_EVENT1("exo", "Display::CreateShellSurface", "surface", | 107 TRACE_EVENT1("exo", "Display::CreateShellSurface", "surface", |
108 surface->AsTracedValue()); | 108 surface->AsTracedValue()); |
109 | 109 |
110 if (surface->HasSurfaceDelegate()) { | 110 if (surface->HasSurfaceDelegate()) { |
111 DLOG(ERROR) << "Surface has already been assigned a role"; | 111 DLOG(ERROR) << "Surface has already been assigned a role"; |
112 return nullptr; | 112 return nullptr; |
113 } | 113 } |
114 | 114 |
115 return base::WrapUnique( | 115 return base::MakeUnique<ShellSurface>(surface, nullptr, gfx::Rect(), |
116 new ShellSurface(surface, nullptr, gfx::Rect(), true /* activatable */, | 116 true /* activatable */, |
117 ash::kShellWindowId_DefaultContainer)); | 117 ash::kShellWindowId_DefaultContainer); |
118 } | 118 } |
119 | 119 |
120 std::unique_ptr<ShellSurface> Display::CreatePopupShellSurface( | 120 std::unique_ptr<ShellSurface> Display::CreatePopupShellSurface( |
121 Surface* surface, | 121 Surface* surface, |
122 ShellSurface* parent, | 122 ShellSurface* parent, |
123 const gfx::Point& position) { | 123 const gfx::Point& position) { |
124 TRACE_EVENT2("exo", "Display::CreatePopupShellSurface", "surface", | 124 TRACE_EVENT2("exo", "Display::CreatePopupShellSurface", "surface", |
125 surface->AsTracedValue(), "parent", parent->AsTracedValue()); | 125 surface->AsTracedValue(), "parent", parent->AsTracedValue()); |
126 | 126 |
127 if (surface->window()->Contains(parent->GetWidget()->GetNativeWindow())) { | 127 if (surface->window()->Contains(parent->GetWidget()->GetNativeWindow())) { |
128 DLOG(ERROR) << "Parent is contained within surface's hierarchy"; | 128 DLOG(ERROR) << "Parent is contained within surface's hierarchy"; |
129 return nullptr; | 129 return nullptr; |
130 } | 130 } |
131 | 131 |
132 if (surface->HasSurfaceDelegate()) { | 132 if (surface->HasSurfaceDelegate()) { |
133 DLOG(ERROR) << "Surface has already been assigned a role"; | 133 DLOG(ERROR) << "Surface has already been assigned a role"; |
134 return nullptr; | 134 return nullptr; |
135 } | 135 } |
136 | 136 |
137 // Determine the initial bounds for popup. |position| is relative to the | 137 // Determine the initial bounds for popup. |position| is relative to the |
138 // parent's main surface origin and initial bounds are relative to the | 138 // parent's main surface origin and initial bounds are relative to the |
139 // container origin. | 139 // container origin. |
140 gfx::Rect initial_bounds(position, gfx::Size(1, 1)); | 140 gfx::Rect initial_bounds(position, gfx::Size(1, 1)); |
141 aura::Window::ConvertRectToTarget( | 141 aura::Window::ConvertRectToTarget( |
142 ShellSurface::GetMainSurface(parent->GetWidget()->GetNativeWindow()) | 142 ShellSurface::GetMainSurface(parent->GetWidget()->GetNativeWindow()) |
143 ->window(), | 143 ->window(), |
144 parent->GetWidget()->GetNativeWindow()->parent(), &initial_bounds); | 144 parent->GetWidget()->GetNativeWindow()->parent(), &initial_bounds); |
145 | 145 |
146 return base::WrapUnique( | 146 return base::MakeUnique<ShellSurface>(surface, parent, initial_bounds, |
147 new ShellSurface(surface, parent, initial_bounds, false /* activatable */, | 147 false /* activatable */, |
148 ash::kShellWindowId_DefaultContainer)); | 148 ash::kShellWindowId_DefaultContainer); |
149 } | 149 } |
150 | 150 |
151 std::unique_ptr<ShellSurface> Display::CreateRemoteShellSurface( | 151 std::unique_ptr<ShellSurface> Display::CreateRemoteShellSurface( |
152 Surface* surface, | 152 Surface* surface, |
153 int container) { | 153 int container) { |
154 TRACE_EVENT2("exo", "Display::CreateRemoteShellSurface", "surface", | 154 TRACE_EVENT2("exo", "Display::CreateRemoteShellSurface", "surface", |
155 surface->AsTracedValue(), "container", container); | 155 surface->AsTracedValue(), "container", container); |
156 | 156 |
157 if (surface->HasSurfaceDelegate()) { | 157 if (surface->HasSurfaceDelegate()) { |
158 DLOG(ERROR) << "Surface has already been assigned a role"; | 158 DLOG(ERROR) << "Surface has already been assigned a role"; |
159 return nullptr; | 159 return nullptr; |
160 } | 160 } |
161 | 161 |
162 return base::WrapUnique(new ShellSurface(surface, nullptr, gfx::Rect(1, 1), | 162 return base::MakeUnique<ShellSurface>(surface, nullptr, gfx::Rect(1, 1), |
163 true /* activatable */, container)); | 163 true /* activatable */, container); |
164 } | 164 } |
165 | 165 |
166 std::unique_ptr<SubSurface> Display::CreateSubSurface(Surface* surface, | 166 std::unique_ptr<SubSurface> Display::CreateSubSurface(Surface* surface, |
167 Surface* parent) { | 167 Surface* parent) { |
168 TRACE_EVENT2("exo", "Display::CreateSubSurface", "surface", | 168 TRACE_EVENT2("exo", "Display::CreateSubSurface", "surface", |
169 surface->AsTracedValue(), "parent", parent->AsTracedValue()); | 169 surface->AsTracedValue(), "parent", parent->AsTracedValue()); |
170 | 170 |
171 if (surface->window()->Contains(parent->window())) { | 171 if (surface->window()->Contains(parent->window())) { |
172 DLOG(ERROR) << "Parent is contained within surface's hierarchy"; | 172 DLOG(ERROR) << "Parent is contained within surface's hierarchy"; |
173 return nullptr; | 173 return nullptr; |
174 } | 174 } |
175 | 175 |
176 if (surface->HasSurfaceDelegate()) { | 176 if (surface->HasSurfaceDelegate()) { |
177 DLOG(ERROR) << "Surface has already been assigned a role"; | 177 DLOG(ERROR) << "Surface has already been assigned a role"; |
178 return nullptr; | 178 return nullptr; |
179 } | 179 } |
180 | 180 |
181 return base::WrapUnique(new SubSurface(surface, parent)); | 181 return base::MakeUnique<SubSurface>(surface, parent); |
182 } | 182 } |
183 | 183 |
184 std::unique_ptr<NotificationSurface> Display::CreateNotificationSurface( | 184 std::unique_ptr<NotificationSurface> Display::CreateNotificationSurface( |
185 Surface* surface, | 185 Surface* surface, |
186 const std::string& notification_id) { | 186 const std::string& notification_id) { |
187 TRACE_EVENT2("exo", "Display::CreateNotificationSurface", "surface", | 187 TRACE_EVENT2("exo", "Display::CreateNotificationSurface", "surface", |
188 surface->AsTracedValue(), "notification_id", notification_id); | 188 surface->AsTracedValue(), "notification_id", notification_id); |
189 | 189 |
190 if (!notification_surface_manager_ || | 190 if (!notification_surface_manager_ || |
191 notification_surface_manager_->GetSurface(notification_id)) { | 191 notification_surface_manager_->GetSurface(notification_id)) { |
192 DLOG(ERROR) << "Invalid notification id, id=" << notification_id; | 192 DLOG(ERROR) << "Invalid notification id, id=" << notification_id; |
193 return nullptr; | 193 return nullptr; |
194 } | 194 } |
195 | 195 |
196 return base::MakeUnique<NotificationSurface>(notification_surface_manager_, | 196 return base::MakeUnique<NotificationSurface>(notification_surface_manager_, |
197 surface, notification_id); | 197 surface, notification_id); |
198 } | 198 } |
199 | 199 |
200 } // namespace exo | 200 } // namespace exo |
OLD | NEW |