kwin/src/effects/showfps/showfps.h
Vlad Zahorodnii 811beb94e0 Remove Xrender backend
The Xrender backend was added at the time when OpenGL drivers were not
particularly stable. Nowadays though, it's a totally different situation.

The OpenGL render backend has been the default one for many years. It's
quite stable, and it allows implementing many advanced features that
other render backends don't.

Many features are not tested with it during the development cycle; the
only time when it is noticed is when changes in other parts of kwin break
the build in the xrender backend. Effectively, the xrender backend is
unmaintained nowadays.

Given that the xrender backend is effectively unmaintained and our focus
being shifted towards wayland, this change drops the xrender backend in
favor of the opengl backend.

Besides being de-facto unmaintained, another issue is that QtQuick does
not support and most likely will never support the Xrender API. This
poses a problem as we want thumbnail items to be natively integrated in
the qtquick scene graph.
2021-06-09 11:21:57 +03:00

106 lines
2.7 KiB
C++

/*
KWin - the KDE window manager
This file is part of the KDE project.
SPDX-FileCopyrightText: 2006 Lubos Lunak <l.lunak@kde.org>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#ifndef KWIN_SHOWFPS_H
#define KWIN_SHOWFPS_H
#include <QElapsedTimer>
#include <QFont>
#include <kwineffects.h>
namespace KWin
{
class GLTexture;
class ShowFpsEffect
: public Effect
{
Q_OBJECT
Q_PROPERTY(qreal alpha READ configuredAlpha)
Q_PROPERTY(int x READ configuredX)
Q_PROPERTY(int y READ configuredY)
Q_PROPERTY(QRect fpsTextRect READ configuredFpsTextRect)
Q_PROPERTY(int textAlign READ configuredTextAlign)
Q_PROPERTY(QFont textFont READ configuredTextFont)
Q_PROPERTY(QColor textColor READ configuredTextColor)
public:
ShowFpsEffect();
void reconfigure(ReconfigureFlags) override;
void prePaintScreen(ScreenPrePaintData& data, std::chrono::milliseconds presentTime) override;
void paintScreen(int mask, const QRegion &region, ScreenPaintData& data) override;
void paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data) override;
void postPaintScreen() override;
enum {
INSIDE_GRAPH,
NOWHERE,
TOP_LEFT,
TOP_RIGHT,
BOTTOM_LEFT,
BOTTOM_RIGHT,
}; // fps text position
// for properties
qreal configuredAlpha() const {
return alpha;
}
int configuredX() const {
return x;
}
int configuredY() const {
return y;
}
QRect configuredFpsTextRect() const {
return fpsTextRect;
}
int configuredTextAlign() const {
return textAlign;
}
QFont configuredTextFont() const {
return textFont;
}
QColor configuredTextColor() const {
return textColor;
}
private:
void paintGL(int fps, const QMatrix4x4 &projectionMatrix);
void paintQPainter(int fps);
void paintFPSGraph(int x, int y);
void paintDrawSizeGraph(int x, int y);
void paintGraph(int x, int y, QList<int> values, QList<int> lines, bool colorize);
QImage fpsTextImage(int fps);
QElapsedTimer t;
enum {
NUM_PAINTS = 100,
}; // remember time needed to paint this many paints
int paints[ NUM_PAINTS ]; // time needed to paint
int paint_size[ NUM_PAINTS ]; // number of pixels painted
int paints_pos; // position in the queue
enum {
MAX_FPS = 200,
};
qint64 frames[ MAX_FPS ]; // the time when the frame was done
int frames_pos; // position in the queue
double alpha;
int x;
int y;
QRect fps_rect;
QScopedPointer<GLTexture> fpsText;
int textPosition;
QFont textFont;
QColor textColor;
QRect fpsTextRect;
int textAlign;
QScopedPointer<EffectFrame> m_noBenchmark;
};
} // namespace
#endif