kwin: fixing high cpu usage bugs
In some unfortunate situations it is possible that a window is deleted before it is marked ready_for_painting=true. The last point is especially troublesome for effects that reference the deleted window. Many thanks to Elias Probst for all the testing. CCBUG: 290025 CCBUG: 288948 REVIEW: 103733
This commit is contained in:
parent
87745d696d
commit
d6e7ebcb26
2 changed files with 11 additions and 1 deletions
|
@ -66,6 +66,15 @@ void Deleted::copyToDeleted(Toplevel* c)
|
|||
{
|
||||
assert(dynamic_cast< Deleted* >(c) == NULL);
|
||||
Toplevel::copyToDeleted(c);
|
||||
// In some cases the window has been deleted before the sync request which marks
|
||||
// the window ready for painting has finished. This is especially troublesome
|
||||
// when effects reference the deleted window and the unreferencing is part of
|
||||
// the rendering pass (e.g. Effect::postPaintScreen/postPaintWindow), which will
|
||||
// never be executed because we remove it every time from the stacking list in
|
||||
// Workspace::performCompositing.
|
||||
if (!c->readyForPainting()) {
|
||||
QTimer::singleShot(0, this, SLOT(discard()));
|
||||
}
|
||||
desk = c->desktop();
|
||||
activityList = c->activities();
|
||||
contentsRect = QRect(c->clientPos(), c->clientSize());
|
||||
|
|
|
@ -35,7 +35,6 @@ public:
|
|||
// used by effects to keep the window around for e.g. fadeout effects when it's destroyed
|
||||
void refWindow();
|
||||
void unrefWindow(bool delay = false);
|
||||
void discard(allowed_t);
|
||||
virtual int desktop() const;
|
||||
virtual QStringList activities() const;
|
||||
virtual QPoint clientPos() const;
|
||||
|
@ -58,6 +57,8 @@ public:
|
|||
}
|
||||
void layoutDecorationRects(QRect &left, QRect &top, QRect &right, QRect &bottom) const;
|
||||
QRect decorationRect() const;
|
||||
public slots:
|
||||
void discard(allowed_t = Allowed);
|
||||
protected:
|
||||
virtual void debug(QDebug& stream) const;
|
||||
virtual bool shouldUnredirect() const;
|
||||
|
|
Loading…
Reference in a new issue