Index: ui/ozone/platform/egltest/ozone_platform_egltest.cc |
diff --git a/ui/ozone/platform/egltest/ozone_platform_egltest.cc b/ui/ozone/platform/egltest/ozone_platform_egltest.cc |
deleted file mode 100644 |
index 7af4ed36ea00caebfc5bcf2ae0711eefdf855a7a..0000000000000000000000000000000000000000 |
--- a/ui/ozone/platform/egltest/ozone_platform_egltest.cc |
+++ /dev/null |
@@ -1,421 +0,0 @@ |
-// Copyright 2014 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "ui/ozone/platform/egltest/ozone_platform_egltest.h" |
- |
-#include <stdint.h> |
- |
-#include "base/bind.h" |
-#include "base/command_line.h" |
-#include "base/environment.h" |
-#include "base/files/file_path.h" |
-#include "base/macros.h" |
-#include "base/memory/ptr_util.h" |
-#include "base/path_service.h" |
-#include "base/threading/thread_checker.h" |
-#include "library_loaders/libeglplatform_shim.h" |
-#include "third_party/khronos/EGL/egl.h" |
-#include "ui/events/devices/device_data_manager.h" |
-#include "ui/events/event.h" |
-#include "ui/events/ozone/device/device_manager.h" |
-#include "ui/events/ozone/evdev/event_factory_evdev.h" |
-#include "ui/events/ozone/events_ozone.h" |
-#include "ui/events/ozone/layout/keyboard_layout_engine_manager.h" |
-#include "ui/events/ozone/layout/stub/stub_keyboard_layout_engine.h" |
-#include "ui/events/platform/platform_event_dispatcher.h" |
-#include "ui/gfx/vsync_provider.h" |
-#include "ui/ozone/common/egl_util.h" |
-#include "ui/ozone/common/native_display_delegate_ozone.h" |
-#include "ui/ozone/common/stub_overlay_manager.h" |
-#include "ui/ozone/public/cursor_factory_ozone.h" |
-#include "ui/ozone/public/gpu_platform_support.h" |
-#include "ui/ozone/public/gpu_platform_support_host.h" |
-#include "ui/ozone/public/ozone_platform.h" |
-#include "ui/ozone/public/ozone_switches.h" |
-#include "ui/ozone/public/surface_factory_ozone.h" |
-#include "ui/ozone/public/surface_ozone_egl.h" |
-#include "ui/ozone/public/system_input_injector.h" |
-#include "ui/platform_window/platform_window.h" |
-#include "ui/platform_window/platform_window_delegate.h" |
- |
-namespace ui { |
- |
-namespace { |
- |
-const char kEglplatformShim[] = "EGLPLATFORM_SHIM"; |
-const char kEglplatformShimDefault[] = "libeglplatform_shim.so.1"; |
-const char kDefaultEglSoname[] = "libEGL.so.1"; |
-const char kDefaultGlesSoname[] = "libGLESv2.so.2"; |
- |
-// Get the library soname to load. |
-std::string GetShimLibraryName() { |
- std::string library; |
- std::unique_ptr<base::Environment> env(base::Environment::Create()); |
- if (env->GetVar(kEglplatformShim, &library)) |
- return library; |
- return kEglplatformShimDefault; |
-} |
- |
-// Touch events are reported in device coordinates. This scales the event to the |
-// window's coordinate space. |
-void ScaleTouchEvent(TouchEvent* event, const gfx::SizeF& size) { |
- for (const auto& device : |
- DeviceDataManager::GetInstance()->GetTouchscreenDevices()) { |
- if (device.id == event->source_device_id()) { |
- gfx::SizeF touchscreen_size = gfx::SizeF(device.size); |
- gfx::Transform transform; |
- transform.Scale(size.width() / touchscreen_size.width(), |
- size.height() / touchscreen_size.height()); |
- event->UpdateForRootTransform(transform); |
- return; |
- } |
- } |
-} |
- |
-class EgltestWindow : public PlatformWindow, public PlatformEventDispatcher { |
- public: |
- EgltestWindow(PlatformWindowDelegate* delegate, |
- LibeglplatformShimLoader* eglplatform_shim, |
- EventFactoryEvdev* event_factory, |
- const gfx::Rect& bounds); |
- ~EgltestWindow() override; |
- |
- // PlatformWindow: |
- gfx::Rect GetBounds() override; |
- void SetBounds(const gfx::Rect& bounds) override; |
- void SetTitle(const base::string16& title) override; |
- void Show() override; |
- void Hide() override; |
- void Close() override; |
- void SetCapture() override; |
- void ReleaseCapture() override; |
- void ToggleFullscreen() override; |
- void Maximize() override; |
- void Minimize() override; |
- void Restore() override; |
- void SetCursor(PlatformCursor cursor) override; |
- void MoveCursorTo(const gfx::Point& location) override; |
- void ConfineCursorToBounds(const gfx::Rect& bounds) override; |
- PlatformImeController* GetPlatformImeController() override; |
- |
- // PlatformEventDispatcher: |
- bool CanDispatchEvent(const PlatformEvent& event) override; |
- uint32_t DispatchEvent(const PlatformEvent& event) override; |
- |
- private: |
- PlatformWindowDelegate* delegate_; |
- LibeglplatformShimLoader* eglplatform_shim_; |
- EventFactoryEvdev* event_factory_; |
- gfx::Rect bounds_; |
- ShimNativeWindowId window_id_; |
- |
- DISALLOW_COPY_AND_ASSIGN(EgltestWindow); |
-}; |
- |
-EgltestWindow::EgltestWindow(PlatformWindowDelegate* delegate, |
- LibeglplatformShimLoader* eglplatform_shim, |
- EventFactoryEvdev* event_factory, |
- const gfx::Rect& bounds) |
- : delegate_(delegate), |
- eglplatform_shim_(eglplatform_shim), |
- event_factory_(event_factory), |
- bounds_(bounds), |
- window_id_(SHIM_NO_WINDOW_ID) { |
- window_id_ = eglplatform_shim_->ShimCreateWindow(); |
- delegate_->OnAcceleratedWidgetAvailable(window_id_, 1.f); |
- ui::PlatformEventSource::GetInstance()->AddPlatformEventDispatcher(this); |
-} |
- |
-EgltestWindow::~EgltestWindow() { |
- ui::PlatformEventSource::GetInstance()->RemovePlatformEventDispatcher(this); |
- if (window_id_ != SHIM_NO_WINDOW_ID) |
- eglplatform_shim_->ShimDestroyWindow(window_id_); |
-} |
- |
-gfx::Rect EgltestWindow::GetBounds() { |
- return bounds_; |
-} |
- |
-void EgltestWindow::SetBounds(const gfx::Rect& bounds) { |
- bounds_ = bounds; |
- delegate_->OnBoundsChanged(bounds); |
-} |
- |
-void EgltestWindow::SetTitle(const base::string16& title) { |
-} |
- |
-void EgltestWindow::Show() { |
-} |
- |
-void EgltestWindow::Hide() { |
-} |
- |
-void EgltestWindow::Close() { |
-} |
- |
-void EgltestWindow::SetCapture() { |
-} |
- |
-void EgltestWindow::ReleaseCapture() { |
-} |
- |
-void EgltestWindow::ToggleFullscreen() { |
-} |
- |
-void EgltestWindow::Maximize() { |
-} |
- |
-void EgltestWindow::Minimize() { |
-} |
- |
-void EgltestWindow::Restore() { |
-} |
- |
-void EgltestWindow::SetCursor(PlatformCursor cursor) { |
-} |
- |
-void EgltestWindow::MoveCursorTo(const gfx::Point& location) { |
- event_factory_->WarpCursorTo(window_id_, gfx::PointF(location)); |
-} |
- |
-void EgltestWindow::ConfineCursorToBounds(const gfx::Rect& bounds) { |
-} |
- |
-PlatformImeController* EgltestWindow::GetPlatformImeController() { |
- return nullptr; |
-} |
- |
-bool EgltestWindow::CanDispatchEvent(const ui::PlatformEvent& ne) { |
- return true; |
-} |
- |
-uint32_t EgltestWindow::DispatchEvent(const ui::PlatformEvent& native_event) { |
- DCHECK(native_event); |
- Event* event = static_cast<Event*>(native_event); |
- if (event->IsTouchEvent()) { |
- ScaleTouchEvent(static_cast<TouchEvent*>(event), |
- gfx::SizeF(bounds_.size())); |
- } |
- |
- DispatchEventFromNativeUiEvent( |
- native_event, base::Bind(&PlatformWindowDelegate::DispatchEvent, |
- base::Unretained(delegate_))); |
- |
- return ui::POST_DISPATCH_STOP_PROPAGATION; |
-} |
- |
-// EGL surface wrapper for libeglplatform_shim. |
-// |
-// This just manages the native window lifetime using |
-// ShimGetNativeWindow & ShimReleaseNativeWindow. |
-class SurfaceOzoneEgltest : public SurfaceOzoneEGL { |
- public: |
- SurfaceOzoneEgltest(ShimNativeWindowId window_id, |
- LibeglplatformShimLoader* eglplatform_shim) |
- : eglplatform_shim_(eglplatform_shim) { |
- native_window_ = eglplatform_shim_->ShimGetNativeWindow(window_id); |
- } |
- ~SurfaceOzoneEgltest() override { |
- bool ret = eglplatform_shim_->ShimReleaseNativeWindow(native_window_); |
- DCHECK(ret); |
- } |
- |
- intptr_t GetNativeWindow() override { return native_window_; } |
- |
- bool OnSwapBuffers() override { return true; } |
- |
- void OnSwapBuffersAsync(const SwapCompletionCallback& callback) override { |
- callback.Run(gfx::SwapResult::SWAP_ACK); |
- } |
- |
- bool ResizeNativeWindow(const gfx::Size& viewport_size) override { |
- return true; |
- } |
- |
- std::unique_ptr<gfx::VSyncProvider> CreateVSyncProvider() override { |
- return nullptr; |
- } |
- |
- void* /* EGLConfig */ GetEGLSurfaceConfig( |
- const EglConfigCallbacks& egl) override { |
- EGLint broken_props[] = { |
- EGL_RENDERABLE_TYPE, |
- EGL_OPENGL_ES2_BIT, |
- EGL_SURFACE_TYPE, |
- EGL_WINDOW_BIT | EGL_PBUFFER_BIT, |
- EGL_NONE, |
- }; |
- return ChooseEGLConfig(egl, broken_props); |
- } |
- |
- private: |
- LibeglplatformShimLoader* eglplatform_shim_; |
- intptr_t native_window_; |
-}; |
- |
-// EGL surface factory for libeglplatform_shim. |
-// |
-// This finds the right EGL/GLES2 libraries for loading, and creates |
-// a single native window via ShimCreateWindow for drawing |
-// into. |
-class SurfaceFactoryEgltest : public ui::SurfaceFactoryOzone { |
- public: |
- SurfaceFactoryEgltest(LibeglplatformShimLoader* eglplatform_shim) |
- : eglplatform_shim_(eglplatform_shim) {} |
- ~SurfaceFactoryEgltest() override { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- } |
- |
- // SurfaceFactoryOzone: |
- intptr_t GetNativeDisplay() override; |
- std::unique_ptr<SurfaceOzoneEGL> CreateEGLSurfaceForWidget( |
- gfx::AcceleratedWidget widget) override; |
- bool LoadEGLGLES2Bindings( |
- AddGLLibraryCallback add_gl_library, |
- SetGLGetProcAddressProcCallback set_gl_get_proc_address) override; |
- |
- private: |
- LibeglplatformShimLoader* eglplatform_shim_; |
- base::ThreadChecker thread_checker_; |
-}; |
- |
-intptr_t SurfaceFactoryEgltest::GetNativeDisplay() { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- return eglplatform_shim_->ShimGetNativeDisplay(); |
-} |
- |
-std::unique_ptr<SurfaceOzoneEGL> |
-SurfaceFactoryEgltest::CreateEGLSurfaceForWidget( |
- gfx::AcceleratedWidget widget) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- return base::WrapUnique<SurfaceOzoneEGL>( |
- new SurfaceOzoneEgltest(widget, eglplatform_shim_)); |
-} |
- |
-bool SurfaceFactoryEgltest::LoadEGLGLES2Bindings( |
- AddGLLibraryCallback add_gl_library, |
- SetGLGetProcAddressProcCallback set_gl_get_proc_address) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- const char* egl_soname = eglplatform_shim_->ShimQueryString(SHIM_EGL_LIBRARY); |
- const char* gles_soname = |
- eglplatform_shim_->ShimQueryString(SHIM_GLES_LIBRARY); |
- if (!egl_soname) |
- egl_soname = kDefaultEglSoname; |
- if (!gles_soname) |
- gles_soname = kDefaultGlesSoname; |
- |
- return ::ui::LoadEGLGLES2Bindings(add_gl_library, set_gl_get_proc_address, |
- egl_soname, gles_soname); |
-} |
- |
-// Test platform for EGL. |
-// |
-// This is a tiny EGL-based platform. Creation of the native window is |
-// handled by a separate library called eglplatform_shim.so.1 because |
-// this itself is platform specific and we want to test out multiple |
-// hardware platforms. |
-class OzonePlatformEgltest : public OzonePlatform { |
- public: |
- OzonePlatformEgltest() : shim_initialized_(false) {} |
- ~OzonePlatformEgltest() override { |
- if (shim_initialized_) |
- eglplatform_shim_.ShimTerminate(); |
- } |
- |
- void LoadShim() { |
- std::string library = GetShimLibraryName(); |
- |
- if (eglplatform_shim_.Load(library)) |
- return; |
- |
- base::FilePath module_path; |
- if (!PathService::Get(base::DIR_MODULE, &module_path)) |
- LOG(ERROR) << "failed to get DIR_MODULE from PathService"; |
- base::FilePath library_path = module_path.Append(library); |
- |
- if (eglplatform_shim_.Load(library_path.value())) |
- return; |
- |
- LOG(FATAL) << "failed to load " << library; |
- } |
- |
- void Initialize() { |
- LoadShim(); |
- shim_initialized_ = eglplatform_shim_.ShimInitialize(); |
- } |
- |
- // OzonePlatform: |
- ui::SurfaceFactoryOzone* GetSurfaceFactoryOzone() override { |
- return surface_factory_ozone_.get(); |
- } |
- OverlayManagerOzone* GetOverlayManager() override { |
- return overlay_manager_.get(); |
- } |
- CursorFactoryOzone* GetCursorFactoryOzone() override { |
- return cursor_factory_ozone_.get(); |
- } |
- InputController* GetInputController() override { |
- return event_factory_ozone_->input_controller(); |
- } |
- GpuPlatformSupport* GetGpuPlatformSupport() override { |
- return gpu_platform_support_.get(); |
- } |
- GpuPlatformSupportHost* GetGpuPlatformSupportHost() override { |
- return gpu_platform_support_host_.get(); |
- } |
- std::unique_ptr<SystemInputInjector> CreateSystemInputInjector() override { |
- return nullptr; // no input injection support. |
- } |
- std::unique_ptr<PlatformWindow> CreatePlatformWindow( |
- PlatformWindowDelegate* delegate, |
- const gfx::Rect& bounds) override { |
- return base::WrapUnique<PlatformWindow>(new EgltestWindow( |
- delegate, &eglplatform_shim_, event_factory_ozone_.get(), bounds)); |
- } |
- std::unique_ptr<NativeDisplayDelegate> CreateNativeDisplayDelegate() |
- override { |
- return base::WrapUnique(new NativeDisplayDelegateOzone()); |
- } |
- |
- void InitializeUI() override { |
- device_manager_ = CreateDeviceManager(); |
- overlay_manager_.reset(new StubOverlayManager()); |
- KeyboardLayoutEngineManager::SetKeyboardLayoutEngine( |
- base::WrapUnique(new StubKeyboardLayoutEngine())); |
- event_factory_ozone_.reset(new EventFactoryEvdev( |
- NULL, device_manager_.get(), |
- KeyboardLayoutEngineManager::GetKeyboardLayoutEngine())); |
- cursor_factory_ozone_.reset(new CursorFactoryOzone()); |
- gpu_platform_support_host_.reset(CreateStubGpuPlatformSupportHost()); |
- } |
- |
- void InitializeGPU() override { |
- surface_factory_ozone_.reset(new SurfaceFactoryEgltest(&eglplatform_shim_)); |
- gpu_platform_support_.reset(CreateStubGpuPlatformSupport()); |
- } |
- |
- private: |
- LibeglplatformShimLoader eglplatform_shim_; |
- std::unique_ptr<DeviceManager> device_manager_; |
- std::unique_ptr<SurfaceFactoryEgltest> surface_factory_ozone_; |
- std::unique_ptr<EventFactoryEvdev> event_factory_ozone_; |
- std::unique_ptr<CursorFactoryOzone> cursor_factory_ozone_; |
- std::unique_ptr<GpuPlatformSupport> gpu_platform_support_; |
- std::unique_ptr<GpuPlatformSupportHost> gpu_platform_support_host_; |
- std::unique_ptr<OverlayManagerOzone> overlay_manager_; |
- |
- bool shim_initialized_; |
- |
- DISALLOW_COPY_AND_ASSIGN(OzonePlatformEgltest); |
-}; |
- |
-} // namespace |
- |
-OzonePlatform* CreateOzonePlatformEgltest() { |
- OzonePlatformEgltest* platform = new OzonePlatformEgltest; |
- platform->Initialize(); |
- return platform; |
-} |
- |
-} // namespace ui |