mirror of
https://github.com/openstf/stf
synced 2025-10-04 10:19:30 +02:00
Make sure touch events arrive in correct order.
This commit is contained in:
parent
ceeda2b990
commit
c33f0eab09
6 changed files with 68 additions and 22 deletions
|
@ -248,7 +248,8 @@ module.exports = function(options) {
|
|||
push.send([
|
||||
channel
|
||||
, wireutil.envelope(new Klass(
|
||||
data.x
|
||||
data.seq
|
||||
, data.x
|
||||
, data.y
|
||||
))
|
||||
])
|
||||
|
|
|
@ -7,6 +7,7 @@ var devutil = require('../../../util/devutil')
|
|||
var logger = require('../../../util/logger')
|
||||
var lifecycle = require('../../../util/lifecycle')
|
||||
var streamutil = require('../../../util/streamutil')
|
||||
var SeqQueue = require('../../../wire/seqqueue')
|
||||
|
||||
module.exports = syrup.serial()
|
||||
.dependency(require('../support/adb'))
|
||||
|
@ -49,24 +50,35 @@ module.exports = syrup.serial()
|
|||
|
||||
return openService()
|
||||
.then(function(monkey) {
|
||||
var queue = new SeqQueue()
|
||||
|
||||
router
|
||||
.on(wire.TouchDownMessage, function(channel, message) {
|
||||
monkey.touchDownAsync(message.x, message.y)
|
||||
.catch(function(err) {
|
||||
log.error('touchDown failed', err.stack)
|
||||
})
|
||||
queue.push(message.seq, function() {
|
||||
monkey.touchDownAsync(message.x, message.y)
|
||||
.catch(function(err) {
|
||||
log.error('touchDown failed', err.stack)
|
||||
})
|
||||
})
|
||||
})
|
||||
.on(wire.TouchMoveMessage, function(channel, message) {
|
||||
monkey.touchMoveAsync(message.x, message.y)
|
||||
.catch(function(err) {
|
||||
log.error('touchMove failed', err.stack)
|
||||
})
|
||||
queue.push(message.seq, function() {
|
||||
monkey.touchMoveAsync(message.x, message.y)
|
||||
.catch(function(err) {
|
||||
log.error('touchMove failed', err.stack)
|
||||
})
|
||||
})
|
||||
})
|
||||
.on(wire.TouchUpMessage, function(channel, message) {
|
||||
monkey.touchUpAsync(message.x, message.y)
|
||||
.catch(function(err) {
|
||||
log.error('touchUp failed', err.stack)
|
||||
})
|
||||
queue.push(message.seq, function() {
|
||||
monkey.touchUpAsync(message.x, message.y)
|
||||
.catch(function(err) {
|
||||
log.error('touchUp failed', err.stack)
|
||||
})
|
||||
})
|
||||
|
||||
// Reset queue
|
||||
queue = new SeqQueue()
|
||||
})
|
||||
.on(wire.TapMessage, function(channel, message) {
|
||||
monkey.tapAsync(message.x, message.y)
|
||||
|
|
26
lib/wire/seqqueue.js
Normal file
26
lib/wire/seqqueue.js
Normal file
|
@ -0,0 +1,26 @@
|
|||
function SeqQueue() {
|
||||
this.queue = []
|
||||
this.seq = 0
|
||||
}
|
||||
|
||||
SeqQueue.prototype.push = function(seq, handler) {
|
||||
this.queue[seq] = handler
|
||||
this.maybeDequeue()
|
||||
}
|
||||
|
||||
SeqQueue.prototype.done = function(seq, handler) {
|
||||
this.queue[seq] = handler
|
||||
this.maybeDequeue()
|
||||
}
|
||||
|
||||
SeqQueue.prototype.maybeDequeue = function() {
|
||||
var handler
|
||||
|
||||
while ((handler = this.queue[this.seq])) {
|
||||
this.queue[this.seq] = void 0
|
||||
handler()
|
||||
this.seq += 1
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = SeqQueue
|
|
@ -214,18 +214,21 @@ message PhysicalIdentifyMessage {
|
|||
}
|
||||
|
||||
message TouchDownMessage {
|
||||
required uint32 x = 1;
|
||||
required uint32 y = 2;
|
||||
required uint32 seq = 1;
|
||||
required uint32 x = 2;
|
||||
required uint32 y = 3;
|
||||
}
|
||||
|
||||
message TouchMoveMessage {
|
||||
required uint32 x = 1;
|
||||
required uint32 y = 2;
|
||||
required uint32 seq = 1;
|
||||
required uint32 x = 2;
|
||||
required uint32 y = 3;
|
||||
}
|
||||
|
||||
message TouchUpMessage {
|
||||
required uint32 x = 1;
|
||||
required uint32 y = 2;
|
||||
required uint32 seq = 1;
|
||||
required uint32 x = 2;
|
||||
required uint32 y = 3;
|
||||
}
|
||||
|
||||
message TapMessage {
|
||||
|
|
|
@ -40,9 +40,10 @@ module.exports = function ControlServiceFactory(
|
|||
}
|
||||
|
||||
function touchSender(type) {
|
||||
return function(x, y) {
|
||||
return function(seq, x, y) {
|
||||
socket.emit(type, channel, {
|
||||
x: x
|
||||
seq: seq
|
||||
, x: x
|
||||
, y: y
|
||||
})
|
||||
}
|
||||
|
|
|
@ -15,6 +15,7 @@ module.exports = function DeviceScreenDirective($document, ScalingService) {
|
|||
, cachedDisplayHeight = 0
|
||||
, loading = false
|
||||
, scaler
|
||||
, seq = 0
|
||||
|
||||
function sendTouch(type, e) {
|
||||
var scaled = scaler.coords(
|
||||
|
@ -28,7 +29,8 @@ module.exports = function DeviceScreenDirective($document, ScalingService) {
|
|||
'translate3d(' + e.offsetX + 'px,' + e.offsetY + 'px,0)'
|
||||
|
||||
scope.control[type](
|
||||
scaled.xP * scope.device.display.width
|
||||
seq++
|
||||
, scaled.xP * scope.device.display.width
|
||||
, scaled.yP * scope.device.display.height
|
||||
)
|
||||
}
|
||||
|
@ -38,6 +40,7 @@ module.exports = function DeviceScreenDirective($document, ScalingService) {
|
|||
element.unbind('mousemove', moveListener)
|
||||
$document.unbind('mouseup', upListener)
|
||||
$document.unbind('mouseleave', upListener)
|
||||
seq = 0
|
||||
}
|
||||
|
||||
function updateDisplaySize() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue