ER-428 / CTS-422 : [PUBLIC] movement updates are lost when walking. Changed code to detect if the circuit has stopped getting packets. Reviewed by Andrew
parent
b2e4486cf2
commit
f91a9c87e5
|
|
@ -87,6 +87,7 @@ LLCircuitData::LLCircuitData(const LLHost &host, TPACKETID in_id,
|
|||
mPingDelayAveraged((F32)INITIAL_PING_VALUE_MSEC),
|
||||
mUnackedPacketCount(0),
|
||||
mUnackedPacketBytes(0),
|
||||
mLastPacketInTime(0.0),
|
||||
mLocalEndPointID(),
|
||||
mPacketsOut(0),
|
||||
mPacketsIn(0),
|
||||
|
|
@ -667,6 +668,8 @@ void LLCircuitData::checkPacketInID(TPACKETID id, BOOL receive_resent)
|
|||
mHighestPacketID = llmax(mHighestPacketID, id);
|
||||
}
|
||||
|
||||
// Save packet arrival time
|
||||
mLastPacketInTime = LLMessageSystem::getMessageTimeSeconds();
|
||||
|
||||
// Have we received anything on this circuit yet?
|
||||
if (0 == mPacketsIn)
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@ public:
|
|||
U32 getPacketsLost() const;
|
||||
TPACKETID getPacketOutID() const;
|
||||
BOOL getTrusted() const;
|
||||
F32 getAgeInSeconds() const;
|
||||
F32 getAgeInSeconds() const;
|
||||
S32 getUnackedPacketCount() const { return mUnackedPacketCount; }
|
||||
S32 getUnackedPacketBytes() const { return mUnackedPacketBytes; }
|
||||
F64 getNextPingSendTime() const { return mNextPingSendTime; }
|
||||
|
|
@ -130,6 +130,7 @@ public:
|
|||
{ return mOutOfOrderRate.meanValue(scale); }
|
||||
U32 getLastPacketGap() const { return mLastPacketGap; }
|
||||
LLHost getHost() const { return mHost; }
|
||||
F64 getLastPacketInTime() const { return mLastPacketInTime; }
|
||||
|
||||
LLThrottleGroup &getThrottleGroup() { return mThrottles; }
|
||||
|
||||
|
|
@ -248,6 +249,7 @@ protected:
|
|||
S32 mUnackedPacketCount;
|
||||
S32 mUnackedPacketBytes;
|
||||
|
||||
F64 mLastPacketInTime; // Time of last packet arrival
|
||||
|
||||
LLUUID mLocalEndPointID;
|
||||
|
||||
|
|
|
|||
|
|
@ -210,7 +210,6 @@ LLViewerObject::LLViewerObject(const LLUUID &id, const LLPCode pcode, LLViewerRe
|
|||
mLastInterpUpdateSecs(0.f),
|
||||
mLastMessageUpdateSecs(0.f),
|
||||
mLatestRecvPacketID(0),
|
||||
mCircuitPacketCount(0),
|
||||
mData(NULL),
|
||||
mAudioSourcep(NULL),
|
||||
mAudioGain(1.f),
|
||||
|
|
@ -1884,7 +1883,6 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
|
|||
}
|
||||
|
||||
mLatestRecvPacketID = packet_id;
|
||||
mCircuitPacketCount = 0;
|
||||
|
||||
// Set the change flags for scale
|
||||
if (new_scale != getScale())
|
||||
|
|
@ -2207,7 +2205,8 @@ void LLViewerObject::interpolateLinearMotion(const F64 & time, const F32 & dt)
|
|||
LLVector3 new_pos = (vel + (0.5f * (dt-PHYSICS_TIMESTEP)) * accel) * dt;
|
||||
LLVector3 new_v = accel * dt;
|
||||
|
||||
if (time_since_last_update > sPhaseOutUpdateInterpolationTime)
|
||||
if (time_since_last_update > sPhaseOutUpdateInterpolationTime &&
|
||||
sPhaseOutUpdateInterpolationTime > 0.0)
|
||||
{ // Haven't seen a viewer update in a while, check to see if the ciruit is still active
|
||||
if (mRegionp)
|
||||
{ // The simulator will NOT send updates if the object continues normally on the path
|
||||
|
|
@ -2216,9 +2215,12 @@ void LLViewerObject::interpolateLinearMotion(const F64 & time, const F32 & dt)
|
|||
LLCircuitData *cdp = gMessageSystem->mCircuitInfo.findCircuit( mRegionp->getHost() );
|
||||
if (cdp)
|
||||
{
|
||||
// Find out how many seconds since last packet arrived on the circuit
|
||||
F64 time_since_last_packet = LLMessageSystem::getMessageTimeSeconds() - cdp->getLastPacketInTime();
|
||||
|
||||
if (!cdp->isAlive() || // Circuit is dead or blocked
|
||||
cdp->isBlocked() || // or doesn't seem to be getting any packets
|
||||
(mCircuitPacketCount > 0 && mCircuitPacketCount == cdp->getPacketsIn()))
|
||||
(time_since_last_packet > sPhaseOutUpdateInterpolationTime))
|
||||
{
|
||||
// Start to reduce motion interpolation since we haven't seen a server update in a while
|
||||
F64 time_since_last_interpolation = time - mLastInterpUpdateSecs;
|
||||
|
|
@ -2249,9 +2251,6 @@ void LLViewerObject::interpolateLinearMotion(const F64 & time, const F32 & dt)
|
|||
new_pos = new_pos * ((F32) phase_out);
|
||||
new_v = new_v * ((F32) phase_out);
|
||||
}
|
||||
|
||||
// Save current circuit packet count to see if it changes
|
||||
mCircuitPacketCount = cdp->getPacketsIn();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -5105,7 +5104,6 @@ void LLViewerObject::setRegion(LLViewerRegion *regionp)
|
|||
}
|
||||
|
||||
mLatestRecvPacketID = 0;
|
||||
mCircuitPacketCount = 0;
|
||||
mRegionp = regionp;
|
||||
|
||||
for (child_list_t::iterator i = mChildList.begin(); i != mChildList.end(); ++i)
|
||||
|
|
|
|||
|
|
@ -613,7 +613,6 @@ protected:
|
|||
F64 mLastInterpUpdateSecs; // Last update for purposes of interpolation
|
||||
F64 mLastMessageUpdateSecs; // Last update from a message from the simulator
|
||||
TPACKETID mLatestRecvPacketID; // Latest time stamp on message from simulator
|
||||
U32 mCircuitPacketCount; // Packet tracking for early detection of a stopped simulator circuit
|
||||
|
||||
// extra data sent from the sim...currently only used for tree species info
|
||||
U8* mData;
|
||||
|
|
|
|||
Loading…
Reference in New Issue