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

Reply via email to