diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index af9e0032a..96e2503d5 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -3158,7 +3158,7 @@ void LLAppViewer::requestQuit() // Try to send last batch of avatar rez metrics. if (!gDisconnected && isAgentAvatarValid()) { - gAgentAvatarp->updateAvatarRezMetrics(true); // force a last packet to be sent. + LLVOAvatarSelf::updateAvatarRezMetrics(true); // force a last packet to be sent. } LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral*)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINT, TRUE); diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index 8ab29f500..a4ab27f8a 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -228,7 +228,7 @@ void LLVOAvatarSelf::initInstance() } //doPeriodically(output_self_av_texture_diagnostics, 30.0); - doPeriodically(boost::bind(&LLVOAvatarSelf::updateAvatarRezMetrics, this, false), 5.0); + doPeriodically(boost::bind(&LLVOAvatarSelf::updateAvatarRezMetrics, false), 5.0); } // virtual @@ -2247,6 +2247,11 @@ private: bool LLVOAvatarSelf::updateAvatarRezMetrics(bool force_send) { + //Can be called via event system after agent avatar has been removed. + //Also skip if quit has been requested, because we already send out rez metrics when entering the quit state. + if(!isAgentAvatarValid() || LLAppViewer::instance()->quitRequested()) + return false; + const F32 AV_METRICS_INTERVAL_QA = 30.0; F32 send_period = 300.0; if (gSavedSettings.getBOOL("QAModeMetrics")) @@ -2254,13 +2259,13 @@ bool LLVOAvatarSelf::updateAvatarRezMetrics(bool force_send) send_period = AV_METRICS_INTERVAL_QA; } - if (force_send || mTimeSinceLastRezMessage.getElapsedTimeF32() > send_period) + if (force_send || gAgentAvatarp->mTimeSinceLastRezMessage.getElapsedTimeF32() > send_period) { - // Stats for completed phases have been getting logged as they + // Stats for completed phases have been getting l ogged as they // complete. This will give us stats for any timers that // haven't finished as of the metric's being sent. LLVOAvatar::logPendingPhasesAllAvatars(); - sendViewerAppearanceChangeMetrics(); + gAgentAvatarp->sendViewerAppearanceChangeMetrics(); } return false; diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h index 3c0dba237..e7a59d1a3 100644 --- a/indra/newview/llvoavatarself.h +++ b/indra/newview/llvoavatarself.h @@ -380,7 +380,7 @@ public: }; LLTimer mTimeSinceLastRezMessage; - bool updateAvatarRezMetrics(bool force_send); + static bool updateAvatarRezMetrics(bool force_send); std::vector mPendingTimerRecords; void addMetricsTimerRecord(const LLSD& record);