Some more info: After adding a debug line for "event->timestamp()" as well, it turns out on my machine (this is most likely not only happening on my machine though) the timestamps for mouse events are always 0 (probably just not supported by the middleware or something similar). See this log for both a successful and failing run, the events timestamps are always 0 http://pastebin.ubuntu.com/15196543/
When timestamps are 0, QQuickFlickable uses a QElapsedTimer to check how many msecs passed since the press event. Proof: https://github.com/qtproject/qtdeclarative/blob/5.4/src/quick/items/qquickflickable.cpp#L916 On my machine (just like it should be on any other Linux platform) QElapsedTimer is using the monotonic clock (checked with another debug line in qquickflickable.cpp). So, what happens, is probably that the Press -> move -> move -> move -> move -> Release events generated by the flick() function are some times all delivered in the same batch. In that case, QElapsedTimer::elapsed() always returns 0, and that causes the event to be ignored by the velocity computation logic. Proof: https://github.com/qtproject/qtdeclarative/blob/5.4/src/quick/items/qquickflickable.cpp#L1096 As a consequence, when the mouse release happens, the flick is not started because velocity is believed to be 0. -- You received this bug notification because you are a member of Ubuntu Touch seeded packages, which is subscribed to ubuntu-ui-toolkit in Ubuntu. https://bugs.launchpad.net/bugs/1549256 Title: UbuntuTestCase's flick() function is unreliable, does not always flick a Flickable Status in ubuntu-ui-toolkit package in Ubuntu: New Bug description: revision 1864 System setup: Vivid + Overlay PPA (i.e. same as phones/tablets) libqt5qml5: Installed: 5.4.1-1ubuntu11~overlay3 libqt5core5a: Installed: 5.4.1+dfsg-2ubuntu11~vivid4 UbuntuTestCase provides a flick() function whose main purpose is to produce a flick event when executed on Flickable. I noticed that this does not always happen, causing flakiness of some of the UITK tests (in my case, it's the Scrollbar/ScrollView tests I'm working on) Here is a test case that reproduces the issue, once every 10-200 runs, depending on the configuration (I use a simple script to run it until it fails) Please note that uncommenting the debug lines such as onMovingChanged onFlickingChanged will make it harder to reproduce the bug. Enabling QT_LOGGING_RULES="qt.quick.mouse.debug=true" or onContentYChanged will make it even harder. Since I already went through the effort, I'm posting here the debug log coming from the failed and successful runs: - Typical failed run ---> http://pastebin.ubuntu.com/15186789/ Note how "flicking" never becomes true - Typical successful run ---> http://pastebin.ubuntu.com/15186784/ - Failed test with qt.quick.mouse.debug=true --> http://pastebin.ubuntu.com/15186851/ - Successful test with qt.quick.mouse.debug=true -> http://pastebin.ubuntu.com/15186853/ Here's the code I used to reproduce the bug: import QtQuick 2.4 import QtTest 1.0 import Ubuntu.Test 1.0 import Ubuntu.Components 1.3 import Ubuntu.Components.Styles 1.3 import QtQml.Models 2.1 Item { id: main width: units.gu(50) height: units.gu(100) SignalSpy { id: signalSpy } SignalSpy { id: anotherSignalSpy } Item { anchors.fill: parent Item { width: units.gu(20) height: units.gu(30) property alias flickable: freshFlickable Flickable { id: freshFlickable anchors.fill: parent contentHeight: content.height contentWidth: content.width clip: true //onContentYChanged: console.log(contentY) //onMovingChanged: console.log("MOVING", moving) //onFlickingChanged: console.log("FLICKING", flicking) Rectangle { id: content width: units.gu(40) height: units.gu(200) color: "blue" } } } } UbuntuTestCase { name: "FlickBug" when: windowShown function setupSignalSpy(spy, target, signalName) { spy.clear() //reset signalName otherwise it will look for the old signalName in the new target spy.signalName = "" spy.target = target spy.signalName = signalName } function test_flickUbuntuTestCase() { setupSignalSpy(signalSpy, freshFlickable, "movingChanged") flick(freshFlickable, 50, 50, -units.gu(10), -units.gu(10)) signalSpy.wait() compare(signalSpy.count, 1, "No movingChanged signal after simulating a flick.") } } } To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/ubuntu-ui-toolkit/+bug/1549256/+subscriptions -- Mailing list: https://launchpad.net/~touch-packages Post to : [email protected] Unsubscribe : https://launchpad.net/~touch-packages More help : https://help.launchpad.net/ListHelp

