| 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 <utility> | 5 #include <utility> |
| 6 | 6 |
| 7 #include "base/at_exit.h" | 7 #include "base/at_exit.h" |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "base/macros.h" | 9 #include "base/macros.h" |
| 10 #include "base/memory/ptr_util.h" |
| 10 #include "base/memory/scoped_vector.h" | 11 #include "base/memory/scoped_vector.h" |
| 11 #include "base/message_loop/message_loop.h" | 12 #include "base/message_loop/message_loop.h" |
| 12 #include "base/run_loop.h" | 13 #include "base/run_loop.h" |
| 13 #include "base/thread_task_runner_handle.h" | 14 #include "base/thread_task_runner_handle.h" |
| 14 #include "ui/display/types/display_snapshot.h" | 15 #include "ui/display/types/display_snapshot.h" |
| 15 #include "ui/display/types/native_display_delegate.h" | 16 #include "ui/display/types/native_display_delegate.h" |
| 16 #include "ui/display/types/native_display_observer.h" | 17 #include "ui/display/types/native_display_observer.h" |
| 17 #include "ui/events/event.h" | 18 #include "ui/events/event.h" |
| 18 #include "ui/events/keycodes/dom/dom_code.h" | 19 #include "ui/events/keycodes/dom/dom_code.h" |
| 19 #include "ui/events/ozone/layout/keyboard_layout_engine.h" | 20 #include "ui/events/ozone/layout/keyboard_layout_engine.h" |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 54 public: | 55 public: |
| 55 enum RendererType { | 56 enum RendererType { |
| 56 GL, | 57 GL, |
| 57 SOFTWARE, | 58 SOFTWARE, |
| 58 }; | 59 }; |
| 59 | 60 |
| 60 RendererFactory(); | 61 RendererFactory(); |
| 61 ~RendererFactory(); | 62 ~RendererFactory(); |
| 62 | 63 |
| 63 bool Initialize(); | 64 bool Initialize(); |
| 64 scoped_ptr<ui::Renderer> CreateRenderer(gfx::AcceleratedWidget widget, | 65 std::unique_ptr<ui::Renderer> CreateRenderer(gfx::AcceleratedWidget widget, |
| 65 const gfx::Size& size); | 66 const gfx::Size& size); |
| 66 | 67 |
| 67 private: | 68 private: |
| 68 RendererType type_ = SOFTWARE; | 69 RendererType type_ = SOFTWARE; |
| 69 | 70 |
| 70 // Helper for applications that do GL on main thread. | 71 // Helper for applications that do GL on main thread. |
| 71 ui::OzoneGpuTestHelper gpu_helper_; | 72 ui::OzoneGpuTestHelper gpu_helper_; |
| 72 | 73 |
| 73 DISALLOW_COPY_AND_ASSIGN(RendererFactory); | 74 DISALLOW_COPY_AND_ASSIGN(RendererFactory); |
| 74 }; | 75 }; |
| 75 | 76 |
| 76 class WindowManager : public ui::NativeDisplayObserver { | 77 class WindowManager : public ui::NativeDisplayObserver { |
| 77 public: | 78 public: |
| 78 WindowManager(const base::Closure& quit_closure); | 79 WindowManager(const base::Closure& quit_closure); |
| 79 ~WindowManager() override; | 80 ~WindowManager() override; |
| 80 | 81 |
| 81 void Quit(); | 82 void Quit(); |
| 82 | 83 |
| 83 void AddWindow(DemoWindow* window); | 84 void AddWindow(DemoWindow* window); |
| 84 void RemoveWindow(DemoWindow* window); | 85 void RemoveWindow(DemoWindow* window); |
| 85 | 86 |
| 86 private: | 87 private: |
| 87 void OnDisplaysAquired(const std::vector<ui::DisplaySnapshot*>& displays); | 88 void OnDisplaysAquired(const std::vector<ui::DisplaySnapshot*>& displays); |
| 88 void OnDisplayConfigured(const gfx::Rect& bounds, bool success); | 89 void OnDisplayConfigured(const gfx::Rect& bounds, bool success); |
| 89 | 90 |
| 90 // ui::NativeDisplayDelegate: | 91 // ui::NativeDisplayDelegate: |
| 91 void OnConfigurationChanged() override; | 92 void OnConfigurationChanged() override; |
| 92 | 93 |
| 93 scoped_ptr<ui::NativeDisplayDelegate> delegate_; | 94 std::unique_ptr<ui::NativeDisplayDelegate> delegate_; |
| 94 base::Closure quit_closure_; | 95 base::Closure quit_closure_; |
| 95 RendererFactory renderer_factory_; | 96 RendererFactory renderer_factory_; |
| 96 std::vector<scoped_ptr<DemoWindow>> windows_; | 97 std::vector<std::unique_ptr<DemoWindow>> windows_; |
| 97 | 98 |
| 98 // Flags used to keep track of the current state of display configuration. | 99 // Flags used to keep track of the current state of display configuration. |
| 99 // | 100 // |
| 100 // True if configuring the displays. In this case a new display configuration | 101 // True if configuring the displays. In this case a new display configuration |
| 101 // isn't started. | 102 // isn't started. |
| 102 bool is_configuring_ = false; | 103 bool is_configuring_ = false; |
| 103 | 104 |
| 104 // If |is_configuring_| is true and another display configuration event | 105 // If |is_configuring_| is true and another display configuration event |
| 105 // happens, the event is deferred. This is set to true and a display | 106 // happens, the event is deferred. This is set to true and a display |
| 106 // configuration will be scheduled after the current one finishes. | 107 // configuration will be scheduled after the current one finishes. |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 167 // initialize the GPU resources via a posted task. | 168 // initialize the GPU resources via a posted task. |
| 168 void StartOnGpu() { | 169 void StartOnGpu() { |
| 169 renderer_ = | 170 renderer_ = |
| 170 renderer_factory_->CreateRenderer(GetAcceleratedWidget(), GetSize()); | 171 renderer_factory_->CreateRenderer(GetAcceleratedWidget(), GetSize()); |
| 171 renderer_->Initialize(); | 172 renderer_->Initialize(); |
| 172 } | 173 } |
| 173 | 174 |
| 174 WindowManager* window_manager_; // Not owned. | 175 WindowManager* window_manager_; // Not owned. |
| 175 RendererFactory* renderer_factory_; // Not owned. | 176 RendererFactory* renderer_factory_; // Not owned. |
| 176 | 177 |
| 177 scoped_ptr<ui::Renderer> renderer_; | 178 std::unique_ptr<ui::Renderer> renderer_; |
| 178 | 179 |
| 179 // Window-related state. | 180 // Window-related state. |
| 180 scoped_ptr<ui::PlatformWindow> platform_window_; | 181 std::unique_ptr<ui::PlatformWindow> platform_window_; |
| 181 gfx::AcceleratedWidget widget_ = gfx::kNullAcceleratedWidget; | 182 gfx::AcceleratedWidget widget_ = gfx::kNullAcceleratedWidget; |
| 182 | 183 |
| 183 base::WeakPtrFactory<DemoWindow> weak_ptr_factory_; | 184 base::WeakPtrFactory<DemoWindow> weak_ptr_factory_; |
| 184 | 185 |
| 185 DISALLOW_COPY_AND_ASSIGN(DemoWindow); | 186 DISALLOW_COPY_AND_ASSIGN(DemoWindow); |
| 186 }; | 187 }; |
| 187 | 188 |
| 188 /////////////////////////////////////////////////////////////////////////////// | 189 /////////////////////////////////////////////////////////////////////////////// |
| 189 // RendererFactory implementation: | 190 // RendererFactory implementation: |
| 190 | 191 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 201 gpu_helper_.Initialize(base::ThreadTaskRunnerHandle::Get(), | 202 gpu_helper_.Initialize(base::ThreadTaskRunnerHandle::Get(), |
| 202 base::ThreadTaskRunnerHandle::Get())) { | 203 base::ThreadTaskRunnerHandle::Get())) { |
| 203 type_ = GL; | 204 type_ = GL; |
| 204 } else { | 205 } else { |
| 205 type_ = SOFTWARE; | 206 type_ = SOFTWARE; |
| 206 } | 207 } |
| 207 | 208 |
| 208 return true; | 209 return true; |
| 209 } | 210 } |
| 210 | 211 |
| 211 scoped_ptr<ui::Renderer> RendererFactory::CreateRenderer( | 212 std::unique_ptr<ui::Renderer> RendererFactory::CreateRenderer( |
| 212 gfx::AcceleratedWidget widget, | 213 gfx::AcceleratedWidget widget, |
| 213 const gfx::Size& size) { | 214 const gfx::Size& size) { |
| 214 switch (type_) { | 215 switch (type_) { |
| 215 case GL: { | 216 case GL: { |
| 216 scoped_refptr<gfx::GLSurface> surface = CreateGLSurface(widget); | 217 scoped_refptr<gfx::GLSurface> surface = CreateGLSurface(widget); |
| 217 if (!surface) | 218 if (!surface) |
| 218 LOG(FATAL) << "Failed to create GL surface"; | 219 LOG(FATAL) << "Failed to create GL surface"; |
| 219 if (surface->IsSurfaceless()) | 220 if (surface->IsSurfaceless()) |
| 220 return make_scoped_ptr( | 221 return base::WrapUnique( |
| 221 new ui::SurfacelessGlRenderer(widget, surface, size)); | 222 new ui::SurfacelessGlRenderer(widget, surface, size)); |
| 222 else | 223 else |
| 223 return make_scoped_ptr(new ui::GlRenderer(widget, surface, size)); | 224 return base::WrapUnique(new ui::GlRenderer(widget, surface, size)); |
| 224 } | 225 } |
| 225 case SOFTWARE: | 226 case SOFTWARE: |
| 226 return make_scoped_ptr(new ui::SoftwareRenderer(widget, size)); | 227 return base::WrapUnique(new ui::SoftwareRenderer(widget, size)); |
| 227 } | 228 } |
| 228 | 229 |
| 229 return nullptr; | 230 return nullptr; |
| 230 } | 231 } |
| 231 | 232 |
| 232 /////////////////////////////////////////////////////////////////////////////// | 233 /////////////////////////////////////////////////////////////////////////////// |
| 233 // WindowManager implementation: | 234 // WindowManager implementation: |
| 234 | 235 |
| 235 WindowManager::WindowManager(const base::Closure& quit_closure) | 236 WindowManager::WindowManager(const base::Closure& quit_closure) |
| 236 : delegate_( | 237 : delegate_( |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 303 if (should_configure_) { | 304 if (should_configure_) { |
| 304 should_configure_ = false; | 305 should_configure_ = false; |
| 305 base::ThreadTaskRunnerHandle::Get()->PostTask( | 306 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 306 FROM_HERE, base::Bind(&WindowManager::OnConfigurationChanged, | 307 FROM_HERE, base::Bind(&WindowManager::OnConfigurationChanged, |
| 307 base::Unretained(this))); | 308 base::Unretained(this))); |
| 308 } | 309 } |
| 309 } | 310 } |
| 310 | 311 |
| 311 void WindowManager::OnDisplayConfigured(const gfx::Rect& bounds, bool success) { | 312 void WindowManager::OnDisplayConfigured(const gfx::Rect& bounds, bool success) { |
| 312 if (success) { | 313 if (success) { |
| 313 scoped_ptr<DemoWindow> window( | 314 std::unique_ptr<DemoWindow> window( |
| 314 new DemoWindow(this, &renderer_factory_, bounds)); | 315 new DemoWindow(this, &renderer_factory_, bounds)); |
| 315 window->Start(); | 316 window->Start(); |
| 316 windows_.push_back(std::move(window)); | 317 windows_.push_back(std::move(window)); |
| 317 } else { | 318 } else { |
| 318 LOG(ERROR) << "Failed to configure display at " << bounds.ToString(); | 319 LOG(ERROR) << "Failed to configure display at " << bounds.ToString(); |
| 319 } | 320 } |
| 320 } | 321 } |
| 321 | 322 |
| 322 int main(int argc, char** argv) { | 323 int main(int argc, char** argv) { |
| 323 base::CommandLine::Init(argc, argv); | 324 base::CommandLine::Init(argc, argv); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 336 ->SetCurrentLayoutByName("us"); | 337 ->SetCurrentLayoutByName("us"); |
| 337 | 338 |
| 338 base::RunLoop run_loop; | 339 base::RunLoop run_loop; |
| 339 | 340 |
| 340 WindowManager window_manager(run_loop.QuitClosure()); | 341 WindowManager window_manager(run_loop.QuitClosure()); |
| 341 | 342 |
| 342 run_loop.Run(); | 343 run_loop.Run(); |
| 343 | 344 |
| 344 return 0; | 345 return 0; |
| 345 } | 346 } |
| OLD | NEW |