KWin
Loading...
Searching...
No Matches
compositor_x11.h
Go to the documentation of this file.
1/*
2 KWin - the KDE window manager
3 This file is part of the KDE project.
4
5 SPDX-FileCopyrightText: 2011 Arthur Arlt <a.arlt@stud.uni-heidelberg.de>
6 SPDX-FileCopyrightText: 2012 Martin Gräßlin <mgraesslin@kde.org>
7
8 SPDX-License-Identifier: GPL-2.0-or-later
9*/
10
11#pragma once
12
13#include "compositor.h"
14#include <QSet>
15
16namespace KWin
17{
18
19class X11CompositorSelectionOwner;
20class X11SyncManager;
21class X11Window;
22
23class KWIN_EXPORT X11Compositor final : public Compositor
24{
25 Q_OBJECT
26public:
28 NoReasonSuspend = 0,
29 UserSuspend = 1 << 0,
30 BlockRuleSuspend = 1 << 1,
31 AllReasonSuspend = 0xff
32 };
33 Q_DECLARE_FLAGS(SuspendReasons, SuspendReason)
34 Q_ENUM(SuspendReason)
35 Q_FLAG(SuspendReasons)
36
37 static X11Compositor *create(QObject *parent = nullptr);
38 ~X11Compositor() override;
39
40 X11SyncManager *syncManager() const;
41
47 void toggle();
48
59 void suspend(SuspendReason reason);
60
78 void resume(SuspendReason reason);
79
80 enum class OpenGLSafePoint {
81 PreInit,
82 PostInit,
83 PreFrame,
84 PostFrame,
85 PostLastGuardedFrame
86 };
95 void createOpenGLSafePoint(OpenGLSafePoint safePoint);
96
97 void inhibit(Window *window) override;
98 void uninhibit(Window *window) override;
99
100 void reinitialize() override;
101 bool compositingPossible() const override;
102 QString compositingNotPossibleReason() const override;
103 bool openGLCompositingIsBroken() const override;
104
105 static X11Compositor *self();
106
107protected:
108 void start() override;
109 void stop() override;
110 void composite(RenderLoop *renderLoop) override;
111
112private:
113 explicit X11Compositor(QObject *parent);
114
115 bool attemptOpenGLCompositing();
116
117 void releaseCompositorSelection();
118 void destroyCompositorSelection();
119
120 std::unique_ptr<QThread> m_openGLFreezeProtectionThread;
121 std::unique_ptr<QTimer> m_openGLFreezeProtection;
122 std::unique_ptr<X11SyncManager> m_syncManager;
123 std::unique_ptr<X11CompositorSelectionOwner> m_selectionOwner;
124 QTimer m_releaseSelectionTimer;
128 SuspendReasons m_suspended;
129 QSet<Window *> m_inhibitors;
130 int m_framesToTestForSafety = 3;
131};
132
133} // namespace KWin