File indexing completed on 2024-11-10 04:55:58
0001 /* 0002 KWin - the KDE window manager 0003 This file is part of the KDE project. 0004 0005 SPDX-FileCopyrightText: 2016 Martin Gräßlin <mgraesslin@kde.org> 0006 0007 SPDX-License-Identifier: GPL-2.0-or-later 0008 */ 0009 #include "generic_scene_opengl_test.h" 0010 #include "compositor.h" 0011 #include "core/renderbackend.h" 0012 #include "cursor.h" 0013 #include "effect/effectloader.h" 0014 #include "scene/workspacescene.h" 0015 #include "wayland_server.h" 0016 #include "window.h" 0017 0018 #include <KConfigGroup> 0019 #include <QSignalSpy> 0020 0021 using namespace KWin; 0022 static const QString s_socketName = QStringLiteral("wayland_test_kwin_scene_opengl-0"); 0023 0024 GenericSceneOpenGLTest::GenericSceneOpenGLTest(const QByteArray &envVariable) 0025 : QObject() 0026 , m_envVariable(envVariable) 0027 { 0028 } 0029 0030 GenericSceneOpenGLTest::~GenericSceneOpenGLTest() 0031 { 0032 } 0033 0034 void GenericSceneOpenGLTest::cleanup() 0035 { 0036 Test::destroyWaylandConnection(); 0037 } 0038 0039 void GenericSceneOpenGLTest::initTestCase() 0040 { 0041 if (!Test::renderNodeAvailable()) { 0042 QSKIP("no render node available"); 0043 return; 0044 } 0045 qRegisterMetaType<KWin::Window *>(); 0046 QSignalSpy applicationStartedSpy(kwinApp(), &Application::started); 0047 QVERIFY(waylandServer()->init(s_socketName)); 0048 Test::setOutputConfig({ 0049 QRect(0, 0, 1280, 1024), 0050 QRect(1280, 0, 1280, 1024), 0051 }); 0052 0053 // disable all effects - we don't want to have it interact with the rendering 0054 auto config = KSharedConfig::openConfig(QString(), KConfig::SimpleConfig); 0055 KConfigGroup plugins(config, QStringLiteral("Plugins")); 0056 const auto builtinNames = EffectLoader().listOfKnownEffects(); 0057 for (QString name : builtinNames) { 0058 plugins.writeEntry(name + QStringLiteral("Enabled"), false); 0059 } 0060 0061 config->sync(); 0062 kwinApp()->setConfig(config); 0063 0064 qputenv("XCURSOR_THEME", QByteArrayLiteral("DMZ-White")); 0065 qputenv("XCURSOR_SIZE", QByteArrayLiteral("24")); 0066 qputenv("KWIN_COMPOSE", m_envVariable); 0067 0068 kwinApp()->start(); 0069 QVERIFY(applicationStartedSpy.wait()); 0070 QVERIFY(Compositor::self()); 0071 0072 QCOMPARE(Compositor::self()->backend()->compositingType(), KWin::OpenGLCompositing); 0073 } 0074 0075 void GenericSceneOpenGLTest::testRestart() 0076 { 0077 // simple restart of the OpenGL compositor without any windows being shown 0078 QSignalSpy sceneCreatedSpy(KWin::Compositor::self(), &Compositor::sceneCreated); 0079 KWin::Compositor::self()->reinitialize(); 0080 if (sceneCreatedSpy.isEmpty()) { 0081 QVERIFY(sceneCreatedSpy.wait()); 0082 } 0083 QCOMPARE(sceneCreatedSpy.count(), 1); 0084 QCOMPARE(Compositor::self()->backend()->compositingType(), KWin::OpenGLCompositing); 0085 0086 // trigger a repaint 0087 KWin::Compositor::self()->scene()->addRepaintFull(); 0088 // and wait 100 msec to ensure it's rendered 0089 // TODO: introduce frameRendered signal in SceneOpenGL 0090 QTest::qWait(100); 0091 } 0092 0093 #include "moc_generic_scene_opengl_test.cpp"