Fix CPU usage from out of frame animated images

This commit is contained in:
Nicolas Werner 2023-10-09 04:18:16 +02:00
parent 15b5712f9a
commit b03bfa53e4
No known key found for this signature in database
GPG key ID: C8D75E610773F2D9
2 changed files with 16 additions and 4 deletions

View file

@ -102,10 +102,12 @@ MxcAnimatedImage::startDownload()
if (buffer.bytesAvailable() <
4LL * 1024 * 1024 * 1024) // cache images smaller than 4MB in RAM
movie.setCacheMode(QMovie::CacheAll);
if (play_)
if (play_ && movie.frameCount() > 1)
movie.start();
else
else {
movie.jumpToFrame(0);
movie.setPaused(true);
}
emit loadedChanged();
update();
});
@ -173,6 +175,9 @@ MxcAnimatedImage::updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeD
if (!imageDirty)
return oldNode;
if (clipRect().isEmpty())
return oldNode;
imageDirty = false;
QSGImageNode *n = static_cast<QSGImageNode *>(oldNode);
if (!n) {

View file

@ -29,6 +29,7 @@ public:
connect(this, &MxcAnimatedImage::roomChanged, &MxcAnimatedImage::startDownload);
connect(&movie, &QMovie::frameChanged, this, &MxcAnimatedImage::newFrame);
setFlag(QQuickItem::ItemHasContents);
setFlag(QQuickItem::ItemObservesViewport);
// setAcceptHoverEvents(true);
}
@ -55,7 +56,12 @@ public:
{
if (play_ != newPlay) {
play_ = newPlay;
movie.setPaused(!play_);
if (movie.frameCount() > 1)
movie.setPaused(!play_);
else {
movie.jumpToFrame(0);
movie.setPaused(true);
}
emit playChanged();
}
}
@ -77,7 +83,8 @@ private slots:
{
currentFrame = frame;
imageDirty = true;
update();
if (!clipRect().isEmpty())
update();
}
private: