aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/quick/qquickanimatedimage/tst_qquickanimatedimage.cpp
diff options
context:
space:
mode:
authorDaiwei Li <daiweili@suitabletech.com>2015-02-27 23:56:12 -0800
committerDaiwei Li <daiweili@suitabletech.com>2015-03-06 18:07:01 +0000
commit2a28bebdc8548c1171a3f255651edafe685da003 (patch)
treee4239adb905c33df2f9f31dbe2234c65118ae6f9 /tests/auto/quick/qquickanimatedimage/tst_qquickanimatedimage.cpp
parent1d2d771f552ff43a508ff301ff0906d8d61b729f (diff)
Implement cache property for QQuickAnimatedImage
Some longer and larger .gifs can consume a lot of memory if every decoded frame is cached. Just as the backing QMovie provides the ability to not cache frame, so should AnimatedImage. This also allows a workaround for some animated image types that can contain loops that aren't handled correctly (QTBUG-24869) to not leak memory. Change-Id: I0639461d75bb2c758917893e7a6ae5c215fffa9d Task-number: QTBUG-44447 Task-number: QTBUG-24869 Task-number: QTBUG-28844 Reviewed-by: Alan Alpert <aalpert@blackberry.com>
Diffstat (limited to 'tests/auto/quick/qquickanimatedimage/tst_qquickanimatedimage.cpp')
-rw-r--r--tests/auto/quick/qquickanimatedimage/tst_qquickanimatedimage.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/auto/quick/qquickanimatedimage/tst_qquickanimatedimage.cpp b/tests/auto/quick/qquickanimatedimage/tst_qquickanimatedimage.cpp
index ee38a0e8ff..c42000d418 100644
--- a/tests/auto/quick/qquickanimatedimage/tst_qquickanimatedimage.cpp
+++ b/tests/auto/quick/qquickanimatedimage/tst_qquickanimatedimage.cpp
@@ -70,6 +70,7 @@ private slots:
void qtbug_16520();
void progressAndStatusChanges();
void playingAndPausedChanges();
+ void noCaching();
};
void tst_qquickanimatedimage::cleanup()
@@ -528,6 +529,39 @@ void tst_qquickanimatedimage::playingAndPausedChanges()
delete obj;
}
+
+void tst_qquickanimatedimage::noCaching()
+{
+ QQuickView window, window_nocache;
+ window.setSource(testFileUrl("colors.qml"));
+ window_nocache.setSource(testFileUrl("colors_nocache.qml"));
+ window.show();
+ window_nocache.show();
+ QTest::qWaitForWindowExposed(&window);
+ QTest::qWaitForWindowExposed(&window_nocache);
+
+ QQuickAnimatedImage *anim = qobject_cast<QQuickAnimatedImage *>(window.rootObject());
+ QVERIFY(anim);
+
+ QQuickAnimatedImage *anim_nocache = qobject_cast<QQuickAnimatedImage *>(window_nocache.rootObject());
+ QVERIFY(anim_nocache);
+
+ QCOMPARE(anim->frameCount(), anim_nocache->frameCount());
+
+ // colors.gif only has 3 frames so this should be fast
+ for (int loops = 0; loops <= 2; ++loops) {
+ for (int frame = 0; frame < anim->frameCount(); ++frame) {
+ anim->setCurrentFrame(frame);
+ anim_nocache->setCurrentFrame(frame);
+
+ QImage image_cache = window.grabWindow();
+ QImage image_nocache = window_nocache.grabWindow();
+
+ QCOMPARE(image_cache, image_nocache);
+ }
+ }
+}
+
QTEST_MAIN(tst_qquickanimatedimage)
#include "tst_qquickanimatedimage.moc"