9d7ef58b2b
Summary: KWin needs to support restarting the OpenGL compositor in case of a graphics reset event. On Wayland the tricky part is that the applications should not notice this. Most importantly KWin cannot just destroy the EGLDisplay and create a new one. But this is how a restart works: the complete compositor gets torn down and recreated - including the EGLDisplay. This change moves ownership of the EGLDisplay to the Platform. The AbstractEglBackend subclasses query the Platform whether there is already an EGLDisplay. Only if there is no EGLDisplay the EGLDisplay is created and only if no EGLDisplay is registered with Wayland the bind is performed. Another change is regarding the destruction: the AbstractEglDisplay does no longer unbind the Wayland display and does no longer destroy the EGLDisplay. The EGLDisplay is destroyed by the Platform - so very late on application exit. The Wayland display is unbound when the Compositor terminates. Test Plan: Limited testing with the added auto-test. This one needs to be extended to fully verify that OpenGL applications continue to work. But this requires build.kde.org to support OpenGL on Wayland. Reviewers: #kwin, #plasma_on_wayland Subscribers: plasma-devel, kwin Tags: #plasma_on_wayland, #kwin Differential Revision: https://phabricator.kde.org/D2202
49 lines
2.9 KiB
CMake
49 lines
2.9 KiB
CMake
add_definitions(-DKWINBACKENDPATH="${CMAKE_BINARY_DIR}/plugins/platforms/virtual/KWinWaylandVirtualBackend.so")
|
|
add_definitions(-DKWINQPAPATH="${CMAKE_BINARY_DIR}/plugins/qpa/")
|
|
add_subdirectory(helper)
|
|
|
|
add_library(KWinIntegrationTestFramework STATIC kwin_wayland_test.cpp test_helpers.cpp)
|
|
target_link_libraries(KWinIntegrationTestFramework kwin Qt5::Test)
|
|
|
|
function(integrationTest)
|
|
set(oneValueArgs NAME)
|
|
set(multiValueArgs SRCS LIBS)
|
|
cmake_parse_arguments(ARGS "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
|
add_executable(${ARGS_NAME} ${ARGS_SRCS})
|
|
target_link_libraries(${ARGS_NAME} KWinIntegrationTestFramework kwin Qt5::Test ${ARGS_LIBS})
|
|
add_test(kwin-${ARGS_NAME} ${ARGS_NAME})
|
|
endfunction()
|
|
|
|
integrationTest(NAME testStart SRCS start_test.cpp)
|
|
integrationTest(NAME testTransientNoInput SRCS transient_no_input_test.cpp)
|
|
integrationTest(NAME testQuickTiling SRCS quick_tiling_test.cpp)
|
|
integrationTest(NAME testDontCrashGlxgears SRCS dont_crash_glxgears.cpp)
|
|
integrationTest(NAME testLockScreen SRCS lockscreen.cpp)
|
|
integrationTest(NAME testDecorationInput SRCS decoration_input_test.cpp)
|
|
integrationTest(NAME testInternalWindow SRCS internal_window.cpp)
|
|
integrationTest(NAME testTouchInput SRCS touch_input_test.cpp)
|
|
integrationTest(NAME testInputStackingOrder SRCS input_stacking_order.cpp)
|
|
integrationTest(NAME testPointerInput SRCS pointer_input.cpp)
|
|
integrationTest(NAME testPlatformCursor SRCS platformcursor.cpp)
|
|
integrationTest(NAME testDontCrashCancelAnimation SRCS dont_crash_cancel_animation.cpp)
|
|
integrationTest(NAME testTransientPlacmenet SRCS transient_placement.cpp)
|
|
integrationTest(NAME testDebugConsole SRCS debug_console_test.cpp)
|
|
integrationTest(NAME testDontCrashEmptyDeco SRCS dont_crash_empty_deco.cpp)
|
|
integrationTest(NAME testPlasmaSurface SRCS plasma_surface_test.cpp)
|
|
integrationTest(NAME testMaximized SRCS maximize_test.cpp)
|
|
integrationTest(NAME testShellClient SRCS shell_client_test.cpp)
|
|
integrationTest(NAME testDontCrashNoBorder SRCS dont_crash_no_border.cpp)
|
|
integrationTest(NAME testXClipboardSync SRCS xclipboardsync_test.cpp)
|
|
integrationTest(NAME testSceneOpenGL SRCS scene_opengl_test.cpp)
|
|
integrationTest(NAME testSceneQPainter SRCS scene_qpainter_test.cpp)
|
|
integrationTest(NAME testNoXdgRuntimeDir SRCS no_xdg_runtime_dir_test.cpp)
|
|
integrationTest(NAME testScreenChanges SRCS screen_changes_test.cpp)
|
|
|
|
if (XCB_ICCCM_FOUND)
|
|
integrationTest(NAME testMoveResize SRCS move_resize_window_test.cpp LIBS XCB::ICCCM)
|
|
integrationTest(NAME testStruts SRCS struts_test.cpp LIBS XCB::ICCCM)
|
|
integrationTest(NAME testShade SRCS shade_test.cpp LIBS XCB::ICCCM)
|
|
integrationTest(NAME testDontCrashAuroraeDestroyDeco SRCS dont_crash_aurorae_destroy_deco.cpp LIBS XCB::ICCCM)
|
|
integrationTest(NAME testPlasmaWindow SRCS plasmawindow_test.cpp LIBS XCB::ICCCM)
|
|
integrationTest(NAME testScreenEdgeClientShow SRCS screenedge_client_show_test.cpp LIBS XCB::ICCCM)
|
|
endif()
|