From 86cbb55522f9a4ca76854be860a8131f006553a8 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Tue, 12 Jun 2012 09:19:35 +1000 Subject: [PATCH] Set a non-zero default cacheBuffer. The likelihood of constant framerate when flicking is considerably improved by having a cacheBuffer. Since there is only a minimal cost in having a modest cacheBuffer, it is better to have a more optimal default value - 320 seems a good starting point. Change-Id: Id3c8a153821573b5b08c6fbd80d34152908d358d Reviewed-by: Bea Lam --- src/quick/items/qquickgridview.cpp | 6 ++++-- src/quick/items/qquickitemview.cpp | 7 ++++++- src/quick/items/qquicklistview.cpp | 6 ++++-- tests/auto/quick/qquickgridview/data/addTransitions.qml | 1 + tests/auto/quick/qquickgridview/data/displacedTransitions.qml | 1 + tests/auto/quick/qquickgridview/data/gridview-initCurrent.qml | 1 + tests/auto/quick/qquickgridview/data/gridview-noCurrent.qml | 1 + tests/auto/quick/qquickgridview/data/layouts.qml | 1 + tests/auto/quick/qquickgridview/data/margins.qml | 1 + tests/auto/quick/qquickgridview/data/moveTransitions.qml | 1 + tests/auto/quick/qquickgridview/data/multipleDisplaced.qml | 1 + tests/auto/quick/qquickgridview/data/multipleTransitions.qml | 1 + tests/auto/quick/qquickgridview/data/populateTransitions.qml | 1 + tests/auto/quick/qquickgridview/data/removeTransitions.qml | 1 + tests/auto/quick/qquickgridview/data/resizeview.qml | 1 + tests/auto/quick/qquickgridview/data/unrequestedItems.qml | 2 ++ tests/auto/quick/qquickgridview/tst_qquickgridview.cpp | 7 ++++++- tests/auto/quick/qquicklistview/data/addTransitions.qml | 1 + tests/auto/quick/qquicklistview/data/displacedTransitions.qml | 1 + tests/auto/quick/qquicklistview/data/header.qml | 1 + tests/auto/quick/qquicklistview/data/listview-enforcerange.qml | 1 + tests/auto/quick/qquicklistview/data/listview-noCurrent.qml | 1 + tests/auto/quick/qquicklistview/data/listview-sections-package.qml | 1 + .../auto/quick/qquicklistview/data/listview-sections_delegate.qml | 1 + tests/auto/quick/qquicklistview/data/margins.qml | 1 + tests/auto/quick/qquicklistview/data/moveTransitions.qml | 1 + tests/auto/quick/qquicklistview/data/multipleDisplaced.qml | 1 + tests/auto/quick/qquicklistview/data/multipleTransitions.qml | 1 + tests/auto/quick/qquicklistview/data/populateTransitions.qml | 1 + tests/auto/quick/qquicklistview/data/removeTransitions.qml | 1 + tests/auto/quick/qquicklistview/data/resizeview.qml | 1 + tests/auto/quick/qquicklistview/data/unrequestedItems.qml | 2 ++ tests/auto/quick/qquickvisualdatamodel/data/packageView.qml | 2 ++ 33 files changed, 52 insertions(+), 6 deletions(-) diff --git a/src/quick/items/qquickgridview.cpp b/src/quick/items/qquickgridview.cpp index 331f23e..fa1e96c 100644 --- a/src/quick/items/qquickgridview.cpp +++ b/src/quick/items/qquickgridview.cpp @@ -1533,8 +1533,10 @@ void QQuickGridView::setHighlightFollowsCurrentItem(bool autoHighlight) area may be created/retained. The buffered delegates are created asynchronously, allowing creation to occur across multiple frames and reducing the likelihood of skipping frames. In order to improve painting performance - delegates outside the visible area have their \l visible property set to - false until they are moved into the visible area. + delegates outside the visible area are not painted. + + The default value of this property is platform dependent, but will usually + be a non-zero value. Note that cacheBuffer is not a pixel buffer - it only maintains additional instantiated delegates. diff --git a/src/quick/items/qquickitemview.cpp b/src/quick/items/qquickitemview.cpp index 26580e0..8b8f935 100644 --- a/src/quick/items/qquickitemview.cpp +++ b/src/quick/items/qquickitemview.cpp @@ -41,9 +41,14 @@ #include "qquickitemview_p_p.h" #include +#include "qplatformdefs.h" QT_BEGIN_NAMESPACE +// Default cacheBuffer for all views. +#ifndef QML_VIEW_DEFAULTCACHEBUFFER +#define QML_VIEW_DEFAULTCACHEBUFFER 320 +#endif FxViewItem::FxViewItem(QQuickItem *i, bool own, bool trackGeometry) : item(i) @@ -1410,7 +1415,7 @@ void QQuickItemView::componentComplete() QQuickItemViewPrivate::QQuickItemViewPrivate() : itemCount(0) - , buffer(0), bufferMode(BufferBefore | BufferAfter) + , buffer(QML_VIEW_DEFAULTCACHEBUFFER), bufferMode(BufferBefore | BufferAfter) , layoutDirection(Qt::LeftToRight), verticalLayoutDirection(QQuickItemView::TopToBottom) , moveReason(Other) , visibleIndex(0) diff --git a/src/quick/items/qquicklistview.cpp b/src/quick/items/qquicklistview.cpp index 75d4933..5401abc 100644 --- a/src/quick/items/qquicklistview.cpp +++ b/src/quick/items/qquicklistview.cpp @@ -2094,8 +2094,10 @@ void QQuickListView::setOrientation(QQuickListView::Orientation orientation) area may be created/retained. The buffered delegates are created asynchronously, allowing creation to occur across multiple frames and reducing the likelihood of skipping frames. In order to improve painting performance - delegates outside the visible area have their \l visible property set to - false until they are moved into the visible area. + delegates outside the visible area are not painted. + + The default value of this property is platform dependent, but will usually + be a non-zero value. Note that cacheBuffer is not a pixel buffer - it only maintains additional instantiated delegates. diff --git a/tests/auto/quick/qquickgridview/data/addTransitions.qml b/tests/auto/quick/qquickgridview/data/addTransitions.qml index 3f47cbd..14ed2dc 100644 --- a/tests/auto/quick/qquickgridview/data/addTransitions.qml +++ b/tests/auto/quick/qquickgridview/data/addTransitions.qml @@ -64,6 +64,7 @@ Rectangle { height: 320 cellWidth: 80 cellHeight: 60 + cacheBuffer: 0 anchors.centerIn: parent model: testModel delegate: myDelegate diff --git a/tests/auto/quick/qquickgridview/data/displacedTransitions.qml b/tests/auto/quick/qquickgridview/data/displacedTransitions.qml index 4abf401..4c36b76 100644 --- a/tests/auto/quick/qquickgridview/data/displacedTransitions.qml +++ b/tests/auto/quick/qquickgridview/data/displacedTransitions.qml @@ -80,6 +80,7 @@ Rectangle { height: 320 cellWidth: 80 cellHeight: 60 + cacheBuffer: 0 model: testModel delegate: myDelegate diff --git a/tests/auto/quick/qquickgridview/data/gridview-initCurrent.qml b/tests/auto/quick/qquickgridview/data/gridview-initCurrent.qml index 624f639..af35d2f 100644 --- a/tests/auto/quick/qquickgridview/data/gridview-initCurrent.qml +++ b/tests/auto/quick/qquickgridview/data/gridview-initCurrent.qml @@ -57,6 +57,7 @@ Rectangle { currentIndex: 35 cellWidth: 80 cellHeight: 60 + cacheBuffer: 0 delegate: myDelegate highlightMoveDuration: 400 model: testModel diff --git a/tests/auto/quick/qquickgridview/data/gridview-noCurrent.qml b/tests/auto/quick/qquickgridview/data/gridview-noCurrent.qml index 600716e..4867075 100644 --- a/tests/auto/quick/qquickgridview/data/gridview-noCurrent.qml +++ b/tests/auto/quick/qquickgridview/data/gridview-noCurrent.qml @@ -46,6 +46,7 @@ Rectangle { currentIndex: -1 cellWidth: 80 cellHeight: 60 + cacheBuffer: 0 delegate: myDelegate model: testModel } diff --git a/tests/auto/quick/qquickgridview/data/layouts.qml b/tests/auto/quick/qquickgridview/data/layouts.qml index e00351f..f528841 100644 --- a/tests/auto/quick/qquickgridview/data/layouts.qml +++ b/tests/auto/quick/qquickgridview/data/layouts.qml @@ -51,6 +51,7 @@ Rectangle { height: 320 cellWidth: 80 cellHeight: 60 + cacheBuffer: 0 flow: (testTopToBottom == false) ? GridView.LeftToRight : GridView.TopToBottom layoutDirection: (testRightToLeft == true) ? Qt.RightToLeft : Qt.LeftToRight verticalLayoutDirection: (testBottomToTop == true) ? GridView.BottomToTop : GridView.TopToBottom diff --git a/tests/auto/quick/qquickgridview/data/margins.qml b/tests/auto/quick/qquickgridview/data/margins.qml index d369658..e2ee6d6 100644 --- a/tests/auto/quick/qquickgridview/data/margins.qml +++ b/tests/auto/quick/qquickgridview/data/margins.qml @@ -44,6 +44,7 @@ Rectangle { height: 320 cellWidth: 100 cellHeight: 80 + cacheBuffer: 0 leftMargin: 30 rightMargin: 50 flow: GridView.TopToBottom diff --git a/tests/auto/quick/qquickgridview/data/moveTransitions.qml b/tests/auto/quick/qquickgridview/data/moveTransitions.qml index a91f5a3..8850b46 100644 --- a/tests/auto/quick/qquickgridview/data/moveTransitions.qml +++ b/tests/auto/quick/qquickgridview/data/moveTransitions.qml @@ -63,6 +63,7 @@ Rectangle { height: 320 cellWidth: 80 cellHeight: 60 + cacheBuffer: 0 anchors.centerIn: parent model: testModel delegate: myDelegate diff --git a/tests/auto/quick/qquickgridview/data/multipleDisplaced.qml b/tests/auto/quick/qquickgridview/data/multipleDisplaced.qml index 7c48bf3..973f0ac 100644 --- a/tests/auto/quick/qquickgridview/data/multipleDisplaced.qml +++ b/tests/auto/quick/qquickgridview/data/multipleDisplaced.qml @@ -45,6 +45,7 @@ Rectangle { anchors.centerIn: parent width: 240 height: 320 + cacheBuffer: 0 cellWidth: 80 cellHeight: 60 model: testModel diff --git a/tests/auto/quick/qquickgridview/data/multipleTransitions.qml b/tests/auto/quick/qquickgridview/data/multipleTransitions.qml index cfe0be7..8112fea 100644 --- a/tests/auto/quick/qquickgridview/data/multipleTransitions.qml +++ b/tests/auto/quick/qquickgridview/data/multipleTransitions.qml @@ -55,6 +55,7 @@ Rectangle { cellWidth: 80 cellHeight: 60 anchors.centerIn: parent + cacheBuffer: 0 model: testModel delegate: myDelegate diff --git a/tests/auto/quick/qquickgridview/data/populateTransitions.qml b/tests/auto/quick/qquickgridview/data/populateTransitions.qml index c12d5ac..9060a4b 100644 --- a/tests/auto/quick/qquickgridview/data/populateTransitions.qml +++ b/tests/auto/quick/qquickgridview/data/populateTransitions.qml @@ -54,6 +54,7 @@ Rectangle { height: 320 cellWidth: 80 cellHeight: 60 + cacheBuffer: 0 model: testModel delegate: myDelegate diff --git a/tests/auto/quick/qquickgridview/data/removeTransitions.qml b/tests/auto/quick/qquickgridview/data/removeTransitions.qml index 3e82cf7..ec9156d 100644 --- a/tests/auto/quick/qquickgridview/data/removeTransitions.qml +++ b/tests/auto/quick/qquickgridview/data/removeTransitions.qml @@ -65,6 +65,7 @@ Rectangle { height: 320 cellWidth: 80 cellHeight: 60 + cacheBuffer: 0 anchors.centerIn: parent model: testModel delegate: myDelegate diff --git a/tests/auto/quick/qquickgridview/data/resizeview.qml b/tests/auto/quick/qquickgridview/data/resizeview.qml index 130a0de..eb7fb49 100644 --- a/tests/auto/quick/qquickgridview/data/resizeview.qml +++ b/tests/auto/quick/qquickgridview/data/resizeview.qml @@ -13,6 +13,7 @@ Rectangle { height: initialHeight cellWidth: 80 cellHeight: 60 + cacheBuffer: 0 model: testModel delegate: Rectangle { objectName: "wrapper" diff --git a/tests/auto/quick/qquickgridview/data/unrequestedItems.qml b/tests/auto/quick/qquickgridview/data/unrequestedItems.qml index 79f845f..bedb90b 100644 --- a/tests/auto/quick/qquickgridview/data/unrequestedItems.qml +++ b/tests/auto/quick/qquickgridview/data/unrequestedItems.qml @@ -55,6 +55,7 @@ Item { model: visualModel.parts.left cellWidth: 60 cellHeight: 80 + cacheBuffer: 0 } GridView { @@ -67,5 +68,6 @@ Item { model: visualModel.parts.right cellWidth: 60 cellHeight: 80 + cacheBuffer: 0 } } diff --git a/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp b/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp index d7eb5b2..9876a36 100644 --- a/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp +++ b/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp @@ -58,6 +58,7 @@ #include "../shared/viewtestutil.h" #include "../shared/visualtestutil.h" #include +#include "qplatformdefs.h" Q_DECLARE_METATYPE(QQuickGridView::Flow) Q_DECLARE_METATYPE(Qt::LayoutDirection) @@ -2236,7 +2237,11 @@ void tst_QQuickGridView::defaultValues() QTRY_COMPARE(obj->highlightFollowsCurrentItem(), true); QTRY_VERIFY(obj->flow() == 0); QTRY_COMPARE(obj->isWrapEnabled(), false); - QTRY_COMPARE(obj->cacheBuffer(), 0); +#ifdef QML_VIEW_DEFAULTCACHEBUFFER + QTRY_COMPARE(obj->cacheBuffer(), QML_VIEW_DEFAULTCACHEBUFFER); +#else + QTRY_COMPARE(obj->cacheBuffer(), 320); +#endif QTRY_COMPARE(obj->cellWidth(), qreal(100)); //### Should 100 be the default? QTRY_COMPARE(obj->cellHeight(), qreal(100)); delete obj; diff --git a/tests/auto/quick/qquicklistview/data/addTransitions.qml b/tests/auto/quick/qquicklistview/data/addTransitions.qml index 6a7c323..69e6ba1 100644 --- a/tests/auto/quick/qquicklistview/data/addTransitions.qml +++ b/tests/auto/quick/qquicklistview/data/addTransitions.qml @@ -62,6 +62,7 @@ Rectangle { anchors.centerIn: parent width: 240 height: 320 + cacheBuffer: 0 model: testModel delegate: myDelegate diff --git a/tests/auto/quick/qquicklistview/data/displacedTransitions.qml b/tests/auto/quick/qquicklistview/data/displacedTransitions.qml index 573bf2b..d83ccfe 100644 --- a/tests/auto/quick/qquicklistview/data/displacedTransitions.qml +++ b/tests/auto/quick/qquicklistview/data/displacedTransitions.qml @@ -69,6 +69,7 @@ Rectangle { anchors.centerIn: parent width: 240 height: 320 + cacheBuffer: 0 model: testModel delegate: myDelegate diff --git a/tests/auto/quick/qquicklistview/data/header.qml b/tests/auto/quick/qquicklistview/data/header.qml index 1cc4ae0..076bf9c 100644 --- a/tests/auto/quick/qquicklistview/data/header.qml +++ b/tests/auto/quick/qquicklistview/data/header.qml @@ -26,6 +26,7 @@ Rectangle { focus: true width: initialViewWidth height: initialViewHeight + cacheBuffer: 0 snapMode: ListView.SnapToItem model: testModel delegate: myDelegate diff --git a/tests/auto/quick/qquicklistview/data/listview-enforcerange.qml b/tests/auto/quick/qquicklistview/data/listview-enforcerange.qml index f1bf6c2..f1052b1 100644 --- a/tests/auto/quick/qquicklistview/data/listview-enforcerange.qml +++ b/tests/auto/quick/qquicklistview/data/listview-enforcerange.qml @@ -45,6 +45,7 @@ Rectangle { objectName: "list" width: 240 height: 320 + cacheBuffer: 0 model: testModel delegate: myDelegate highlight: myHighlight diff --git a/tests/auto/quick/qquicklistview/data/listview-noCurrent.qml b/tests/auto/quick/qquicklistview/data/listview-noCurrent.qml index 079966d..cb90300 100644 --- a/tests/auto/quick/qquicklistview/data/listview-noCurrent.qml +++ b/tests/auto/quick/qquicklistview/data/listview-noCurrent.qml @@ -43,6 +43,7 @@ Rectangle { currentIndex: -1 width: 240 height: 320 + cacheBuffer: 0 delegate: myDelegate highlightMoveSpeed: 1000 model: testModel diff --git a/tests/auto/quick/qquicklistview/data/listview-sections-package.qml b/tests/auto/quick/qquicklistview/data/listview-sections-package.qml index 8e5a4c4..e0daf50 100644 --- a/tests/auto/quick/qquicklistview/data/listview-sections-package.qml +++ b/tests/auto/quick/qquicklistview/data/listview-sections-package.qml @@ -68,5 +68,6 @@ Rectangle { height: 320 model: visualModel.parts.package section.property: "number" + cacheBuffer: 0 } } diff --git a/tests/auto/quick/qquicklistview/data/listview-sections_delegate.qml b/tests/auto/quick/qquicklistview/data/listview-sections_delegate.qml index 496d8d7..d82ff4c 100644 --- a/tests/auto/quick/qquicklistview/data/listview-sections_delegate.qml +++ b/tests/auto/quick/qquicklistview/data/listview-sections_delegate.qml @@ -56,6 +56,7 @@ Rectangle { objectName: "list" width: 240 height: 320 + cacheBuffer: 0 model: testModel delegate: myDelegate section.property: sectionProperty diff --git a/tests/auto/quick/qquicklistview/data/margins.qml b/tests/auto/quick/qquicklistview/data/margins.qml index 19bbef5..2d7b7ca 100644 --- a/tests/auto/quick/qquicklistview/data/margins.qml +++ b/tests/auto/quick/qquicklistview/data/margins.qml @@ -41,6 +41,7 @@ Rectangle { anchors.fill: parent topMargin: 30 bottomMargin: 50 + cacheBuffer: 0 model: testModel delegate: myDelegate } diff --git a/tests/auto/quick/qquicklistview/data/moveTransitions.qml b/tests/auto/quick/qquicklistview/data/moveTransitions.qml index 2f907bd..c4dce99 100644 --- a/tests/auto/quick/qquicklistview/data/moveTransitions.qml +++ b/tests/auto/quick/qquicklistview/data/moveTransitions.qml @@ -62,6 +62,7 @@ Rectangle { anchors.centerIn: parent width: 240 height: 320 + cacheBuffer: 0 model: testModel delegate: myDelegate diff --git a/tests/auto/quick/qquicklistview/data/multipleDisplaced.qml b/tests/auto/quick/qquicklistview/data/multipleDisplaced.qml index e315270..5893c30 100644 --- a/tests/auto/quick/qquicklistview/data/multipleDisplaced.qml +++ b/tests/auto/quick/qquicklistview/data/multipleDisplaced.qml @@ -44,6 +44,7 @@ Rectangle { anchors.centerIn: parent width: 240 height: 320 + cacheBuffer: 0 model: testModel delegate: myDelegate diff --git a/tests/auto/quick/qquicklistview/data/multipleTransitions.qml b/tests/auto/quick/qquicklistview/data/multipleTransitions.qml index c0e888c..4fcc80b 100644 --- a/tests/auto/quick/qquicklistview/data/multipleTransitions.qml +++ b/tests/auto/quick/qquicklistview/data/multipleTransitions.qml @@ -53,6 +53,7 @@ Rectangle { anchors.centerIn: parent width: 240 height: 320 + cacheBuffer: 0 model: testModel delegate: myDelegate diff --git a/tests/auto/quick/qquicklistview/data/populateTransitions.qml b/tests/auto/quick/qquicklistview/data/populateTransitions.qml index 0994e09..84b5b6b 100644 --- a/tests/auto/quick/qquicklistview/data/populateTransitions.qml +++ b/tests/auto/quick/qquicklistview/data/populateTransitions.qml @@ -52,6 +52,7 @@ Rectangle { anchors.centerIn: parent width: 240 height: 320 + cacheBuffer: 0 model: testModel delegate: myDelegate diff --git a/tests/auto/quick/qquicklistview/data/removeTransitions.qml b/tests/auto/quick/qquicklistview/data/removeTransitions.qml index a85b217..861cf42 100644 --- a/tests/auto/quick/qquicklistview/data/removeTransitions.qml +++ b/tests/auto/quick/qquicklistview/data/removeTransitions.qml @@ -64,6 +64,7 @@ Rectangle { anchors.centerIn: parent width: 240 height: 320 + cacheBuffer: 0 model: testModel delegate: myDelegate diff --git a/tests/auto/quick/qquicklistview/data/resizeview.qml b/tests/auto/quick/qquicklistview/data/resizeview.qml index 8b13adb..931e7b9 100644 --- a/tests/auto/quick/qquicklistview/data/resizeview.qml +++ b/tests/auto/quick/qquicklistview/data/resizeview.qml @@ -12,6 +12,7 @@ Rectangle { id: list objectName: "list" width: 240 + cacheBuffer: 0 height: initialHeight model: testModel delegate: Rectangle { diff --git a/tests/auto/quick/qquicklistview/data/unrequestedItems.qml b/tests/auto/quick/qquicklistview/data/unrequestedItems.qml index 682f383..e3719a8 100644 --- a/tests/auto/quick/qquicklistview/data/unrequestedItems.qml +++ b/tests/auto/quick/qquicklistview/data/unrequestedItems.qml @@ -44,6 +44,7 @@ Item { ListView { id: leftList objectName: "leftList" + cacheBuffer: 0 anchors { left: parent.left; top: parent.top; right: parent.horizontalCenter; bottom: parent.bottom @@ -54,6 +55,7 @@ Item { ListView { id: rightList objectName: "rightList" + cacheBuffer: 0 anchors { left: parent.horizontalCenter; top: parent.top; right: parent.right; bottom: parent.bottom diff --git a/tests/auto/quick/qquickvisualdatamodel/data/packageView.qml b/tests/auto/quick/qquickvisualdatamodel/data/packageView.qml index 682f383..e3719a8 100644 --- a/tests/auto/quick/qquickvisualdatamodel/data/packageView.qml +++ b/tests/auto/quick/qquickvisualdatamodel/data/packageView.qml @@ -44,6 +44,7 @@ Item { ListView { id: leftList objectName: "leftList" + cacheBuffer: 0 anchors { left: parent.left; top: parent.top; right: parent.horizontalCenter; bottom: parent.bottom @@ -54,6 +55,7 @@ Item { ListView { id: rightList objectName: "rightList" + cacheBuffer: 0 anchors { left: parent.horizontalCenter; top: parent.top; right: parent.right; bottom: parent.bottom -- 2.7.4