[libkwineffects] Introduce logging categories for libkwineffects

icc-effect-5.14.5
Martin Gräßlin 2015-07-31 12:07:53 +02:00
parent e476cbc0d2
commit 57c521c214
8 changed files with 122 additions and 63 deletions

View File

@ -1,5 +1,8 @@
kwin_core KWin Core
kwineffects KWin Effects
libkwineffects KWin Effects Library
libkwinglutils KWin OpenGL utility Library
libkwinxrenderutils KWin XRender utility Library
kwin_wayland_drm KWin Wayland (DRM backend)
kwin_wayland_framebuffer KWin Wayland (Framebuffer backend)
kwin_wayland_hwcomposer KWin Wayland (hwcomposer backend)

View File

@ -11,6 +11,7 @@ ecm_setup_version(${PROJECT_VERSION}
### xrenderutils lib ###
set(kwin_XRENDERUTILS_SRCS
kwinxrenderutils.cpp
logging.cpp
)
add_library(kwinxrenderutils SHARED ${kwin_XRENDERUTILS_SRCS})
@ -37,6 +38,7 @@ set(kwin_EFFECTSLIB_SRCS
kwineffects.cpp
anidata.cpp
kwinanimationeffect.cpp
logging.cpp
)
set(kwineffects_QT_LIBS
@ -81,6 +83,7 @@ set(kwin_GLUTILSLIB_SRCS
kwinglutils_funcs.cpp
kwinglplatform.cpp
kwinglcolorcorrection.cpp
logging.cpp
)
macro( KWIN4_ADD_GLUTILS_BACKEND name glinclude )

View File

@ -20,7 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "anidata_p.h"
#include <QDebug>
#include "logging_p.h"
QDebug operator<<(QDebug dbg, const KWin::AniData &a)
{
@ -80,7 +80,7 @@ static FPx2 fpx2(const QString &s, AnimationEffect::Attribute a)
a == AnimationEffect::Size ||
a == AnimationEffect::Rotation)) ) {
if (ok)
qDebug() << "Invalid value (must not be negative)" << s;
qCDebug(LIBKWINEFFECTS) << "Invalid value (must not be negative)" << s;
return FPx2();
}
@ -96,7 +96,7 @@ static FPx2 fpx2(const QString &s, AnimationEffect::Attribute a)
f2 = f1;
}
if ( forced_align && a >= AnimationEffect::NonFloatBase )
qDebug() << "Generic Animations, WARNING: had to align second dimension of non-onedimensional attribute" << a;
qCDebug(LIBKWINEFFECTS) << "Generic Animations, WARNING: had to align second dimension of non-onedimensional attribute" << a;
return FPx2(f1, f2);
}
@ -122,7 +122,7 @@ AniData::AniData(const QString &str) // format: WindowMask:Attribute:Meta:Durati
else if (animation.at(1) == QStringLiteral("Size")) attribute = AnimationEffect::Size;
else if (animation.at(1) == QStringLiteral("Clip")) attribute = AnimationEffect::Clip;
else {
qDebug() << "Invalid attribute" << animation.at(1);
qCDebug(LIBKWINEFFECTS) << "Invalid attribute" << animation.at(1);
return;
}
@ -131,7 +131,7 @@ AniData::AniData(const QString &str) // format: WindowMask:Attribute:Meta:Durati
bool ok;
duration = animation.at(3).toInt(&ok);
if (!ok || duration < 0) {
qDebug() << "Invalid duration" << animation.at(3);
qCDebug(LIBKWINEFFECTS) << "Invalid duration" << animation.at(3);
duration = 0;
return;
}
@ -145,12 +145,12 @@ AniData::AniData(const QString &str) // format: WindowMask:Attribute:Meta:Durati
else if (customCurve == Gaussian)
curve.setCustomType(AnimationEffect::qecGaussian);
else
qDebug() << "Unknown curve type" << customCurve; // remains default, ie. linear
qCDebug(LIBKWINEFFECTS) << "Unknown curve type" << customCurve; // remains default, ie. linear
if (animation.count() > 6) {
int t = animation.at(6).toInt();
if (t < 0)
qDebug() << "Delay can not be negative" << animation.at(6);
qCDebug(LIBKWINEFFECTS) << "Delay can not be negative" << animation.at(6);
else
time = t;

View File

@ -23,13 +23,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "kwinglplatform.h"
#include "kwinglutils.h"
#include "logging_p.h"
#include <QByteArrayMatcher>
#include <QDBusConnection>
#include <QDBusError>
#include <QDBusPendingCall>
#include <QDBusPendingCallWatcher>
#include <QDebug>
#include <QPair>
#include <QVector3D>
@ -101,7 +101,7 @@ ColorServerInterface::~ColorServerInterface()
uint ColorServerInterface::versionInfo() const
{
if (!m_versionInfoUpdated)
qWarning() << "Version info not updated";
qCWarning(LIBKWINGLUTILS) << "Version info not updated";
return m_versionInfo;
}
@ -154,10 +154,10 @@ QDBusPendingReply< RegionalClutMap > ColorServerInterface::getRegionCluts()
void ColorServerInterface::callFinishedSlot(QDBusPendingCallWatcher *watcher)
{
if (watcher == m_versionInfoWatcher) {
qDebug() << "Version info call finished";
qCDebug(LIBKWINGLUTILS) << "Version info call finished";
QDBusPendingReply< uint > reply = *watcher;
if (reply.isError()) {
qWarning() << reply.error();
qCWarning(LIBKWINGLUTILS) << reply.error();
if (!m_signaledFail)
emit updateFailed();
m_signaledFail = true;
@ -169,10 +169,10 @@ void ColorServerInterface::callFinishedSlot(QDBusPendingCallWatcher *watcher)
}
if (watcher == m_outputClutsWatcher) {
qDebug() << "Output cluts call finished";
qCDebug(LIBKWINGLUTILS) << "Output cluts call finished";
QDBusPendingReply< ClutList > reply = *watcher;
if (reply.isError()) {
qWarning() << reply.error();
qCWarning(LIBKWINGLUTILS) << reply.error();
if (!m_signaledFail)
emit updateFailed();
m_signaledFail = true;
@ -184,10 +184,10 @@ void ColorServerInterface::callFinishedSlot(QDBusPendingCallWatcher *watcher)
}
if (watcher == m_regionClutsWatcher) {
qDebug() << "Region cluts call finished";
qCDebug(LIBKWINGLUTILS) << "Region cluts call finished";
QDBusPendingReply< RegionalClutMap > reply = *watcher;
if (reply.isError()) {
qWarning() << reply.error();
qCWarning(LIBKWINGLUTILS) << reply.error();
if (!m_signaledFail)
emit updateFailed();
m_signaledFail = true;
@ -201,7 +201,7 @@ void ColorServerInterface::callFinishedSlot(QDBusPendingCallWatcher *watcher)
if (m_versionInfoUpdated &&
m_outputClutsUpdated &&
m_regionClutsUpdated) {
qDebug() << "Update succeeded";
qCDebug(LIBKWINGLUTILS) << "Update succeeded";
emit updateSucceeded();
}
}
@ -284,14 +284,14 @@ bool ColorCorrection::setEnabled(bool enabled)
return true;
if (enabled && d->m_hasError) {
qCritical() << "cannot enable color correction because of a previous error";
qCCritical(LIBKWINGLUTILS) << "cannot enable color correction because of a previous error";
return false;
}
#ifdef KWIN_HAVE_OPENGLES
const GLPlatform *gl = GLPlatform::instance();
if (enabled && gl->isGLES() && !d->m_haveTexture3D) {
qCritical() << "color correction is not supported on OpenGL ES without OES_texture_3D";
qCCritical(LIBKWINGLUTILS) << "color correction is not supported on OpenGL ES without OES_texture_3D";
d->m_hasError = true;
return false;
}
@ -300,14 +300,14 @@ bool ColorCorrection::setEnabled(bool enabled)
if (enabled) {
// Update all profiles and regions
d->m_csi->update();
qDebug() << "color correction will be enabled after contacting KolorManager";
qCDebug(LIBKWINGLUTILS) << "color correction will be enabled after contacting KolorManager";
d->m_duringEnablingPhase = true;
// d->m_enabled will be set to true in colorServerUpdateSucceededSlot()
} else {
d->deleteCCTextures();
d->m_enabled = false;
GLShader::sColorCorrect = false;
qDebug() << "color correction has been disabled";
qCDebug(LIBKWINGLUTILS) << "color correction has been disabled";
// Reload all shaders
ShaderManager::cleanup();
@ -326,7 +326,7 @@ void ColorCorrection::setupForOutput(int screen)
GLShader *shader = ShaderManager::instance()->getBoundShader();
if (!shader) {
qCritical() << "no bound shader for color correction setup";
qCCritical(LIBKWINGLUTILS) << "no bound shader for color correction setup";
d->m_hasError = true;
emit errorOccured();
return;
@ -339,14 +339,14 @@ void ColorCorrection::setupForOutput(int screen)
}
if (!shader->setUniform(GLShader::ColorCorrectionLookupTextureUnit, d->m_ccTextureUnit)) {
qCritical() << "unable to set uniform for the color correction lookup texture";
qCCritical(LIBKWINGLUTILS) << "unable to set uniform for the color correction lookup texture";
d->m_hasError = true;
emit errorOccured();
return;
}
if (!d->setupCCTextures()) {
qCritical() << "unable to setup color correction textures";
qCCritical(LIBKWINGLUTILS) << "unable to setup color correction textures";
d->m_hasError = true;
emit errorOccured();
return;
@ -556,7 +556,7 @@ QByteArray ColorCorrection::prepareFragmentShader(const QByteArray &sourceCode)
bool ColorCorrectionPrivate::setupCCTextures()
{
if (!m_enabled || m_hasError) {
qWarning() << "Color correction not enabled or an error occurred, refusing to set up textures";
qCWarning(LIBKWINGLUTILS) << "Color correction not enabled or an error occurred, refusing to set up textures";
return false;
}
@ -564,7 +564,7 @@ bool ColorCorrectionPrivate::setupCCTextures()
if (!m_dummyCCTexture) {
glGenTextures(1, &m_dummyCCTexture);
if (!setupCCTexture(m_dummyCCTexture, m_dummyClut)) {
qCritical() << "unable to setup dummy color correction texture";
qCCritical(LIBKWINGLUTILS) << "unable to setup dummy color correction texture";
m_dummyCCTexture = 0;
return false;
}
@ -574,7 +574,7 @@ bool ColorCorrectionPrivate::setupCCTextures()
// Setup actual color correction textures
if (m_outputCCTextures.isEmpty() && !m_outputCluts->isEmpty()) {
qDebug() << "setting up output color correction textures";
qCDebug(LIBKWINGLUTILS) << "setting up output color correction textures";
const int outputCount = m_outputCluts->size();
m_outputCCTextures.resize(outputCount);
@ -582,7 +582,7 @@ bool ColorCorrectionPrivate::setupCCTextures()
for (int i = 0; i < outputCount; ++i)
if (!setupCCTexture(m_outputCCTextures[i], m_outputCluts->at(i))) {
qCritical() << "unable to set up color correction texture for output" << i;
qCCritical(LIBKWINGLUTILS) << "unable to set up color correction texture for output" << i;
success = false;
}
}
@ -608,7 +608,7 @@ void ColorCorrectionPrivate::deleteCCTextures()
bool ColorCorrectionPrivate::setupCCTexture(GLuint texture, const Clut& clut)
{
if ((uint) clut.size() != CLUT_ELEMENT_COUNT) {
qCritical() << "cannot setup CC texture: invalid color lookup table";
qCCritical(LIBKWINGLUTILS) << "cannot setup CC texture: invalid color lookup table";
return false;
}
@ -647,7 +647,7 @@ void ColorCorrectionPrivate::colorServerUpdateSucceededSlot()
{
Q_Q(ColorCorrection);
qDebug() << "Update of color profiles succeeded";
qCDebug(LIBKWINGLUTILS) << "Update of color profiles succeeded";
// Force the color correction textures to be recreated
deleteCCTextures();
@ -657,15 +657,15 @@ void ColorCorrectionPrivate::colorServerUpdateSucceededSlot()
m_duringEnablingPhase = false;
m_enabled = true;
GLShader::sColorCorrect = true;
qDebug() << "Color correction has been enabled";
qCDebug(LIBKWINGLUTILS) << "Color correction has been enabled";
// Reload all shaders
ShaderManager::cleanup();
if (!ShaderManager::instance()->isValid()) {
qCritical() << "Shader reinitialization failed, possible compile problems with the shaders "
qCCritical(LIBKWINGLUTILS) << "Shader reinitialization failed, possible compile problems with the shaders "
"altered for color-correction";
m_hasError = true;
qDebug() << "Color correction has been disabled due to shader issues";
qCDebug(LIBKWINGLUTILS) << "Color correction has been disabled due to shader issues";
m_enabled = false;
GLShader::sColorCorrect = false;
ShaderManager::cleanup();
@ -682,7 +682,7 @@ void ColorCorrectionPrivate::colorServerUpdateFailedSlot()
m_duringEnablingPhase = false;
qCritical() << "Update of color profiles failed";
qCCritical(LIBKWINGLUTILS) << "Update of color profiles failed";
m_hasError = true;
emit q->errorOccured();
}

View File

@ -27,9 +27,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "kwinglcolorcorrection.h"
#include "kwineffects.h"
#include "kwinglplatform.h"
#include "logging_p.h"
#include <QDebug>
#include <QPixmap>
#include <QImage>
#include <QHash>
@ -193,7 +193,7 @@ bool checkGLError(const char* txt)
GLenum err = glGetError();
bool hasError = false;
while (err != GL_NO_ERROR) {
qWarning() << "GL error (" << txt << "): " << formatGLError(err);
qCWarning(LIBKWINGLUTILS) << "GL error (" << txt << "): " << formatGLError(err);
hasError = true;
err = glGetError();
}
@ -249,14 +249,14 @@ bool GLShader::loadFromFiles(const QString &vertexFile, const QString &fragmentF
{
QFile vf(vertexFile);
if (!vf.open(QIODevice::ReadOnly)) {
qCritical() << "Couldn't open" << vertexFile << "for reading!";
qCCritical(LIBKWINGLUTILS) << "Couldn't open" << vertexFile << "for reading!";
return false;
}
const QByteArray vertexSource = vf.readAll();
QFile ff(fragmentFile);
if (!ff.open(QIODevice::ReadOnly)) {
qCritical() << "Couldn't open" << fragmentFile << "for reading!";
qCCritical(LIBKWINGLUTILS) << "Couldn't open" << fragmentFile << "for reading!";
return false;
}
const QByteArray fragmentSource = ff.readAll();
@ -283,10 +283,10 @@ bool GLShader::link()
glGetProgramiv(mProgram, GL_LINK_STATUS, &status);
if (status == 0) {
qCritical() << "Failed to link shader:" << endl << log;
qCCritical(LIBKWINGLUTILS) << "Failed to link shader:" << endl << log;
mValid = false;
} else if (length > 0) {
qDebug() << "Shader link log:" << log;
qCDebug(LIBKWINGLUTILS) << "Shader link log:" << log;
}
return mValid;
@ -342,9 +342,9 @@ bool GLShader::compile(GLuint program, GLenum shaderType, const QByteArray &sour
if (status == 0) {
const char *typeName = (shaderType == GL_VERTEX_SHADER ? "vertex" : "fragment");
qCritical() << "Failed to compile" << typeName << "shader:" << endl << log;
qCCritical(LIBKWINGLUTILS) << "Failed to compile" << typeName << "shader:" << endl << log;
} else if (length > 0)
qDebug() << "Shader compile log:" << log;
qCDebug(LIBKWINGLUTILS) << "Shader compile log:" << log;
if (status != 0)
glAttachShader(program, shader);
@ -358,7 +358,7 @@ bool GLShader::load(const QByteArray &vertexSource, const QByteArray &fragmentSo
#ifndef KWIN_HAVE_OPENGLES
// Make sure shaders are actually supported
if (!GLPlatform::instance()->supports(GLSL) || GLPlatform::instance()->supports(LimitedNPOT)) {
qCritical() << "Shaders are not supported";
qCCritical(LIBKWINGLUTILS) << "Shaders are not supported";
return false;
}
#endif
@ -706,7 +706,7 @@ bool ShaderManager::selfTest()
bool pass = true;
if (!GLRenderTarget::supported()) {
qWarning() << "Framebuffer objects not supported - skipping shader tests";
qCWarning(LIBKWINGLUTILS) << "Framebuffer objects not supported - skipping shader tests";
return true;
}
@ -992,11 +992,11 @@ GLShader *ShaderManager::generateShader(ShaderTraits traits)
const QByteArray fragment = generateFragmentSource(traits);
#if 0
qDebug() << "**************";
qDebug() << vertex;
qDebug() << "**************";
qDebug() << fragment;
qDebug() << "**************";
qCDebug(LIBKWINGLUTILS) << "**************";
qCDebug(LIBKWINGLUTILS) << vertex;
qCDebug(LIBKWINGLUTILS) << "**************";
qCDebug(LIBKWINGLUTILS) << fragment;
qCDebug(LIBKWINGLUTILS) << "**************";
#endif
GLShader *shader = new GLShader(GLShader::ExplicitLinking);
@ -1356,7 +1356,7 @@ GLRenderTarget::GLRenderTarget(const GLTexture& color)
if (sSupported && !mTexture.isNull()) {
initFBO();
} else
qCritical() << "Render targets aren't supported!";
qCCritical(LIBKWINGLUTILS) << "Render targets aren't supported!";
}
GLRenderTarget::~GLRenderTarget()
@ -1369,7 +1369,7 @@ GLRenderTarget::~GLRenderTarget()
bool GLRenderTarget::enable()
{
if (!valid()) {
qCritical() << "Can't enable invalid render target!";
qCCritical(LIBKWINGLUTILS) << "Can't enable invalid render target!";
return false;
}
@ -1383,7 +1383,7 @@ bool GLRenderTarget::enable()
bool GLRenderTarget::disable()
{
if (!valid()) {
qCritical() << "Can't disable invalid render target!";
qCCritical(LIBKWINGLUTILS) << "Can't disable invalid render target!";
return false;
}
@ -1432,14 +1432,14 @@ void GLRenderTarget::initFBO()
#if DEBUG_GLRENDERTARGET
GLenum err = glGetError();
if (err != GL_NO_ERROR)
qCritical() << "Error status when entering GLRenderTarget::initFBO: " << formatGLError(err);
qCCritical(LIBKWINGLUTILS) << "Error status when entering GLRenderTarget::initFBO: " << formatGLError(err);
#endif
glGenFramebuffers(1, &mFramebuffer);
#if DEBUG_GLRENDERTARGET
if ((err = glGetError()) != GL_NO_ERROR) {
qCritical() << "glGenFramebuffers failed: " << formatGLError(err);
qCCritical(LIBKWINGLUTILS) << "glGenFramebuffers failed: " << formatGLError(err);
return;
}
#endif
@ -1448,7 +1448,7 @@ void GLRenderTarget::initFBO()
#if DEBUG_GLRENDERTARGET
if ((err = glGetError()) != GL_NO_ERROR) {
qCritical() << "glBindFramebuffer failed: " << formatGLError(err);
qCCritical(LIBKWINGLUTILS) << "glBindFramebuffer failed: " << formatGLError(err);
glDeleteFramebuffers(1, &mFramebuffer);
return;
}
@ -1459,7 +1459,7 @@ void GLRenderTarget::initFBO()
#if DEBUG_GLRENDERTARGET
if ((err = glGetError()) != GL_NO_ERROR) {
qCritical() << "glFramebufferTexture2D failed: " << formatGLError(err);
qCCritical(LIBKWINGLUTILS) << "glFramebufferTexture2D failed: " << formatGLError(err);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glDeleteFramebuffers(1, &mFramebuffer);
return;
@ -1473,9 +1473,9 @@ void GLRenderTarget::initFBO()
if (status != GL_FRAMEBUFFER_COMPLETE) {
// We have an incomplete framebuffer, consider it invalid
if (status == 0)
qCritical() << "glCheckFramebufferStatus failed: " << formatGLError(glGetError());
qCCritical(LIBKWINGLUTILS) << "glCheckFramebufferStatus failed: " << formatGLError(glGetError());
else
qCritical() << "Invalid framebuffer status: " << formatFramebufferStatus(status);
qCCritical(LIBKWINGLUTILS) << "Invalid framebuffer status: " << formatFramebufferStatus(status);
glDeleteFramebuffers(1, &mFramebuffer);
return;
}
@ -2120,11 +2120,11 @@ bool GLVertexBufferPrivate::awaitFence(intptr_t end)
const BufferFence &fence = fences.front();
if (!fence.signaled()) {
qDebug() << "Stalling on VBO fence";
qCDebug(LIBKWINGLUTILS) << "Stalling on VBO fence";
const GLenum ret = glClientWaitSync(fence.sync, GL_SYNC_FLUSH_COMMANDS_BIT, 1000000000);
if (ret == GL_TIMEOUT_EXPIRED || ret == GL_WAIT_FAILED) {
qCritical() << "Wait failed";
qCCritical(LIBKWINGLUTILS) << "Wait failed";
return false;
}
}

View File

@ -19,8 +19,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*********************************************************************/
#include "kwinxrenderutils.h"
#include "logging_p.h"
#include <QDebug>
#include <QStack>
#include <QPixmap>
#include <QGlobalStatic>
@ -113,7 +113,7 @@ static xcb_render_picture_t createPicture(xcb_pixmap_t pix, int depth)
}
QHash<int, xcb_render_pictformat_t>::const_iterator it = s_renderFormats.constFind(depth);
if (it == s_renderFormats.constEnd()) {
qWarning() << "Could not find XRender format for depth" << depth;
qCWarning(LIBKWINXRENDERUTILS) << "Could not find XRender format for depth" << depth;
return XCB_RENDER_PICTURE_NONE;
}
xcb_render_picture_t pic = xcb_generate_id(c);
@ -197,7 +197,7 @@ void setXRenderOffscreen(bool b)
b ? ++s_renderOffscreen : --s_renderOffscreen;
if (s_renderOffscreen < 0) {
s_renderOffscreen = 0;
qWarning("*** SOMETHING IS MESSED UP WITH YOUR setXRenderOffscreen() USAGE ***");
qCWarning(LIBKWINXRENDERUTILS) << "*** SOMETHING IS MESSED UP WITH YOUR setXRenderOffscreen() USAGE ***";
}
}
@ -213,7 +213,7 @@ void xRenderPopTarget()
--s_renderOffscreen;
if (s_renderOffscreen < 0) {
s_renderOffscreen = 0;
qWarning("*** SOMETHING IS MESSED UP WITH YOUR xRenderPopTarget() USAGE ***");
qCWarning(LIBKWINXRENDERUTILS) << "*** SOMETHING IS MESSED UP WITH YOUR xRenderPopTarget() USAGE ***";
}
}

View File

@ -0,0 +1,23 @@
/********************************************************************
KWin - the KDE window manager
This file is part of the KDE project.
Copyright (C) 2015 Martin Gräßlin <mgraesslin@kde.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*********************************************************************/
#include "logging_p.h"
Q_LOGGING_CATEGORY(LIBKWINEFFECTS, "libkwineffects", QtCriticalMsg);
Q_LOGGING_CATEGORY(LIBKWINGLUTILS, "libkwinglutils", QtCriticalMsg);
Q_LOGGING_CATEGORY(LIBKWINXRENDERUTILS, "libkwinxrenderutils", QtCriticalMsg);

View File

@ -0,0 +1,30 @@
/********************************************************************
KWin - the KDE window manager
This file is part of the KDE project.
Copyright (C) 2015 Martin Gräßlin <mgraesslin@kde.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*********************************************************************/
#ifndef KWIN_KWINEFFECTS_LOGGING_P_H
#define KWIN_KWINEFFECTS_LOGGING_P_H
#include <QLoggingCategory>
#include <QDebug>
Q_DECLARE_LOGGING_CATEGORY(LIBKWINEFFECTS);
Q_DECLARE_LOGGING_CATEGORY(LIBKWINGLUTILS);
Q_DECLARE_LOGGING_CATEGORY(LIBKWINXRENDERUTILS);
#endif