Bug 1355648 - Part 2: Handle GampadPose losing tracking situation; r=kip,qdot

MozReview-Commit-ID: FAWnYBuDfFy

--HG--
extra : rebase_source : 08437d75379acb5e4701cef0b39512ca482d52f3
This commit is contained in:
Daosheng Mu 2017-04-21 18:15:22 +08:00
Родитель 5d5fc39364
Коммит 64ca304e37
3 изменённых файлов: 28 добавлений и 14 удалений

Просмотреть файл

@ -55,8 +55,9 @@ GamepadPose::GetPosition(JSContext* aJSContext,
JS::MutableHandle<JSObject*> aRetval,
ErrorResult& aRv)
{
SetFloat32Array(aJSContext, aRetval, mPosition, mPoseState.position, 3,
bool(mPoseState.flags & GamepadCapabilityFlags::Cap_Position), aRv);
SetFloat32Array(aJSContext, aRetval, mPosition,
mPoseState.isPositionValid ? mPoseState.position : nullptr, 3,
bool(mPoseState.flags & GamepadCapabilityFlags::Cap_Position), aRv);
}
void
@ -64,8 +65,9 @@ GamepadPose::GetLinearVelocity(JSContext* aJSContext,
JS::MutableHandle<JSObject*> aRetval,
ErrorResult& aRv)
{
SetFloat32Array(aJSContext, aRetval, mLinearVelocity, mPoseState.linearVelocity, 3,
bool(mPoseState.flags & GamepadCapabilityFlags::Cap_Position), aRv);
SetFloat32Array(aJSContext, aRetval, mLinearVelocity,
mPoseState.isPositionValid ? mPoseState.linearVelocity : nullptr, 3,
bool(mPoseState.flags & GamepadCapabilityFlags::Cap_Position), aRv);
}
void
@ -73,8 +75,9 @@ GamepadPose::GetLinearAcceleration(JSContext* aJSContext,
JS::MutableHandle<JSObject*> aRetval,
ErrorResult& aRv)
{
SetFloat32Array(aJSContext, aRetval, mLinearAcceleration, mPoseState.linearAcceleration, 3,
bool(mPoseState.flags & GamepadCapabilityFlags::Cap_LinearAcceleration), aRv);
SetFloat32Array(aJSContext, aRetval, mLinearAcceleration,
mPoseState.isPositionValid ? mPoseState.linearAcceleration : nullptr, 3,
bool(mPoseState.flags & GamepadCapabilityFlags::Cap_LinearAcceleration), aRv);
}
void
@ -82,8 +85,9 @@ GamepadPose::GetOrientation(JSContext* aJSContext,
JS::MutableHandle<JSObject*> aRetval,
ErrorResult& aRv)
{
SetFloat32Array(aJSContext, aRetval, mOrientation, mPoseState.orientation, 4,
bool(mPoseState.flags & GamepadCapabilityFlags::Cap_Orientation), aRv);
SetFloat32Array(aJSContext, aRetval, mOrientation,
mPoseState.isOrientationValid ? mPoseState.orientation : nullptr, 4,
bool(mPoseState.flags & GamepadCapabilityFlags::Cap_Orientation), aRv);
}
void
@ -91,8 +95,9 @@ GamepadPose::GetAngularVelocity(JSContext* aJSContext,
JS::MutableHandle<JSObject*> aRetval,
ErrorResult& aRv)
{
SetFloat32Array(aJSContext, aRetval, mAngularVelocity, mPoseState.angularVelocity, 3,
bool(mPoseState.flags & GamepadCapabilityFlags::Cap_Orientation), aRv);
SetFloat32Array(aJSContext, aRetval, mAngularVelocity,
mPoseState.isOrientationValid ? mPoseState.angularVelocity : nullptr, 3,
bool(mPoseState.flags & GamepadCapabilityFlags::Cap_Orientation), aRv);
}
void
@ -100,8 +105,9 @@ GamepadPose::GetAngularAcceleration(JSContext* aJSContext,
JS::MutableHandle<JSObject*> aRetval,
ErrorResult& aRv)
{
SetFloat32Array(aJSContext, aRetval, mAngularAcceleration, mPoseState.angularAcceleration, 3,
bool(mPoseState.flags & GamepadCapabilityFlags::Cap_AngularAcceleration), aRv);
SetFloat32Array(aJSContext, aRetval, mAngularAcceleration,
mPoseState.isOrientationValid ? mPoseState.angularAcceleration : nullptr, 3,
bool(mPoseState.flags & GamepadCapabilityFlags::Cap_AngularAcceleration), aRv);
}
void

Просмотреть файл

@ -42,6 +42,8 @@ struct GamepadPoseState
float angularAcceleration[3];
float linearVelocity[3];
float linearAcceleration[3];
bool isPositionValid;
bool isOrientationValid;
GamepadPoseState()
{
@ -69,7 +71,9 @@ struct GamepadPoseState
&& linearVelocity[2] == aPose.linearVelocity[2]
&& linearAcceleration[0] == aPose.linearAcceleration[0]
&& linearAcceleration[1] == aPose.linearAcceleration[1]
&& linearAcceleration[2] == aPose.linearAcceleration[2];
&& linearAcceleration[2] == aPose.linearAcceleration[2]
&& isPositionValid == aPose.isPositionValid
&& isOrientationValid == aPose.isOrientationValid;
}
bool operator!=(const GamepadPoseState& aPose) const

Просмотреть файл

@ -62,6 +62,8 @@ struct ParamTraits<mozilla::dom::GamepadPoseState>
WriteParam(aMsg, aParam.linearAcceleration[0]);
WriteParam(aMsg, aParam.linearAcceleration[1]);
WriteParam(aMsg, aParam.linearAcceleration[2]);
WriteParam(aMsg, aParam.isPositionValid);
WriteParam(aMsg, aParam.isOrientationValid);
}
static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult)
@ -85,7 +87,9 @@ struct ParamTraits<mozilla::dom::GamepadPoseState>
!ReadParam(aMsg, aIter, &(aResult->linearVelocity[2])) ||
!ReadParam(aMsg, aIter, &(aResult->linearAcceleration[0])) ||
!ReadParam(aMsg, aIter, &(aResult->linearAcceleration[1])) ||
!ReadParam(aMsg, aIter, &(aResult->linearAcceleration[2]))) {
!ReadParam(aMsg, aIter, &(aResult->linearAcceleration[2])) ||
!ReadParam(aMsg, aIter, &(aResult->isPositionValid)) ||
!ReadParam(aMsg, aIter, &(aResult->isOrientationValid))) {
return false;
}
return true;