Automated merge with ssh://hg.lindenlab.com/viewer/viewer-2-0

meow-7.2.2
Mark Palange (Mani) 2010-02-05 18:15:48 -08:00
commit d7277171c3
5 changed files with 23 additions and 20 deletions

View File

@ -560,45 +560,44 @@ void secondsToTimecodeString(F32 current_time, std::string& tcstring)
// LLEventTimer Implementation
//
//////////////////////////////////////////////////////////////////////////////
bool LLEventTimer::sInTickLoop = false;
LLEventTimer::LLEventTimer(F32 period)
: mEventTimer()
{
mPeriod = period;
mBusy = false;
}
LLEventTimer::LLEventTimer(const LLDate& time)
: mEventTimer()
{
mPeriod = (F32)(time.secondsSinceEpoch() - LLDate::now().secondsSinceEpoch());
mBusy = false;
}
LLEventTimer::~LLEventTimer()
{
llassert(!mBusy); // this LLEventTimer was destroyed from within its own tick() function - bad. if you want tick() to cause destruction of its own timer, make it return true.
llassert(!LLEventTimer::sInTickLoop); // this LLEventTimer was destroyed from within its own tick() function - bad. if you want tick() to cause destruction of its own timer, make it return true.
}
//static
void LLEventTimer::updateClass()
{
std::list<LLEventTimer*> completed_timers;
LLEventTimer::sInTickLoop = true;
for (instance_iter iter = beginInstances(); iter != endInstances(); )
{
LLEventTimer& timer = *iter++;
F32 et = timer.mEventTimer.getElapsedTimeF32();
if (timer.mEventTimer.getStarted() && et > timer.mPeriod) {
timer.mEventTimer.reset();
timer.mBusy = true;
if ( timer.tick() )
{
completed_timers.push_back( &timer );
}
timer.mBusy = false;
}
}
LLEventTimer::sInTickLoop = false;
if ( completed_timers.size() > 0 )
{

View File

@ -188,7 +188,7 @@ public:
protected:
LLTimer mEventTimer;
F32 mPeriod;
bool mBusy;
static bool sInTickLoop;
};
U64 LL_COMMON_API totalTime(); // Returns current system time in microseconds

View File

@ -678,8 +678,7 @@ void LLCallFloater::resetVoiceRemoveTimers()
void LLCallFloater::removeVoiceRemoveTimer(const LLUUID& voice_speaker_id)
{
bool delete_it = true;
mSpeakerDelayRemover->unsetActionTimer(voice_speaker_id, delete_it);
mSpeakerDelayRemover->unsetActionTimer(voice_speaker_id);
}
bool LLCallFloater::validateSpeaker(const LLUUID& speaker_id)

View File

@ -175,6 +175,11 @@ BOOL LLSpeakerActionTimer::tick()
return TRUE;
}
void LLSpeakerActionTimer::unset()
{
mActionCallback = 0;
}
LLSpeakersDelayActionsStorage::LLSpeakersDelayActionsStorage(LLSpeakerActionTimer::action_callback_t action_cb, F32 action_delay)
: mActionCallback(action_cb)
, mActionDelay(action_delay)
@ -205,7 +210,7 @@ void LLSpeakersDelayActionsStorage::setActionTimer(const LLUUID& speaker_id)
}
}
void LLSpeakersDelayActionsStorage::unsetActionTimer(const LLUUID& speaker_id, bool delete_it)
void LLSpeakersDelayActionsStorage::unsetActionTimer(const LLUUID& speaker_id)
{
if (mActionTimersMap.size() == 0) return;
@ -213,10 +218,7 @@ void LLSpeakersDelayActionsStorage::unsetActionTimer(const LLUUID& speaker_id, b
if (it_speaker != mActionTimersMap.end())
{
if (delete_it)
{
delete it_speaker->second;
}
it_speaker->second->unset();
mActionTimersMap.erase(it_speaker);
}
}
@ -233,8 +235,7 @@ void LLSpeakersDelayActionsStorage::removeAllTimers()
bool LLSpeakersDelayActionsStorage::onTimerActionCallback(const LLUUID& speaker_id)
{
bool delete_it = false; // we're *in* this timer, return true to delete it, don't manually delete it
unsetActionTimer(speaker_id, delete_it);
unsetActionTimer(speaker_id);
if (mActionCallback)
{
@ -293,9 +294,7 @@ LLPointer<LLSpeaker> LLSpeakerMgr::setSpeaker(const LLUUID& id, const std::strin
}
}
bool delete_it = true;
mSpeakerDelayRemover->unsetActionTimer(speakerp->mID, delete_it);
mSpeakerDelayRemover->unsetActionTimer(speakerp->mID);
return speakerp;
}

View File

@ -155,6 +155,13 @@ public:
*/
virtual BOOL tick();
/**
* Clears the callback.
*
* Use this instead of deleteing this object.
* The next call to tick() will return true and that will destroy this object.
*/
void unset();
private:
action_callback_t mActionCallback;
LLUUID mSpeakerId;
@ -180,7 +187,7 @@ public:
*
* @see onTimerActionCallback()
*/
void unsetActionTimer(const LLUUID& speaker_id, bool delete_it);
void unsetActionTimer(const LLUUID& speaker_id);
void removeAllTimers();
private:
@ -188,7 +195,6 @@ private:
* Callback of the each instance of LLSpeakerActionTimer.
*
* Unsets an appropriate timer instance and calls action callback for specified speacker_id.
* It always returns false to not use LLEventTimer::updateClass functionality of timer deleting.
*
* @see unsetActionTimer()
*/