summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
Diffstat (limited to 'indra')
-rw-r--r--indra/newview/llvoavatar.cpp40
-rw-r--r--indra/newview/llvoavatar.h1
-rw-r--r--indra/newview/llvoavatarself.cpp19
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml21
4 files changed, 74 insertions, 7 deletions
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index f95017b658..0f4623c678 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -752,6 +752,7 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,
mRuthTimer.reset();
mRuthDebugTimer.reset();
+ mDebugExistenceTimer.reset();
}
//------------------------------------------------------------------------
@@ -763,16 +764,18 @@ LLVOAvatar::~LLVOAvatar()
{
if (!mFullyLoaded)
{
- llinfos << "AVATARREZTIME: Avatar '" << getFullname() << " left after " << (U32)mRuthDebugTimer.getElapsedTimeF32() << " seconds as cloud." << llendl;
+ llinfos << "REZTIME: [ " << (U32)mDebugExistenceTimer.getElapsedTimeF32() << "sec ] Avatar '" << getFullname() << "' left after " << (U32)mRuthDebugTimer.getElapsedTimeF32() << " seconds as cloud." << llendl;
LLSD args;
+ args["EXISTENCE"] = llformat("%d",(U32)mDebugExistenceTimer.getElapsedTimeF32());
args["TIME"] = llformat("%d",(U32)mRuthDebugTimer.getElapsedTimeF32());
args["NAME"] = getFullname();
LLNotificationsUtil::add("AvatarRezLeftCloudNotification",args);
}
else
{
- llinfos << "AVATARREZTIME: Avatar '" << getFullname() << " left." << llendl;
+ llinfos << "REZTIME: [ " << (U32)mDebugExistenceTimer.getElapsedTimeF32() << "sec ] Avatar '" << getFullname() << "' left." << llendl;
LLSD args;
+ args["EXISTENCE"] = llformat("%d",(U32)mDebugExistenceTimer.getElapsedTimeF32());
args["NAME"] = getFullname();
LLNotificationsUtil::add("AvatarRezLeftNotification",args);
}
@@ -2110,10 +2113,12 @@ U32 LLVOAvatar::processUpdateMessage(LLMessageSystem *mesgsys,
{
if (has_name && getNVPair("FirstName"))
{
+ mDebugExistenceTimer.reset();
LLSD args;
+ args["EXISTENCE"] = llformat("%d",(U32)mDebugExistenceTimer.getElapsedTimeF32());
args["NAME"] = getFullname();
LLNotificationsUtil::add("AvatarRezArrivedNotification",args);
- llinfos << "AVATARREZTIME: Avatar '" << getFullname() << "' arrived." << llendl;
+ llinfos << "REZTIME: [ " << (U32)mDebugExistenceTimer.getElapsedTimeF32() << "sec ] Avatar '" << getFullname() << "' arrived." << llendl;
}
}
if(retval & LLViewerObject::INVALID_UPDATE)
@@ -2809,6 +2814,29 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
const BOOL is_muted = isSelf() ? FALSE : LLMuteList::getInstance()->isMuted(getID());
const BOOL is_cloud = getIsCloud();
+ if (gSavedSettings.getBOOL("DebugAvatarRezTime"))
+ {
+ if (is_appearance != mNameAppearance)
+ {
+ if (is_appearance)
+ {
+ LLSD args;
+ args["EXISTENCE"] = llformat("%d",(U32)mDebugExistenceTimer.getElapsedTimeF32());
+ args["NAME"] = getFullname();
+ LLNotificationsUtil::add("AvatarRezEnteredAppearanceNotification",args);
+ llinfos << "REZTIME: [ " << (U32)mDebugExistenceTimer.getElapsedTimeF32() << "sec ] Avatar '" << getFullname() << "' entered appearance mode." << llendl;
+ }
+ else
+ {
+ LLSD args;
+ args["EXISTENCE"] = llformat("%d",(U32)mDebugExistenceTimer.getElapsedTimeF32());
+ args["NAME"] = getFullname();
+ LLNotificationsUtil::add("AvatarRezLeftAppearanceNotification",args);
+ llinfos << "REZTIME: [ " << (U32)mDebugExistenceTimer.getElapsedTimeF32() << "sec ] Avatar '" << getFullname() << "' left appearance mode." << llendl;
+ }
+ }
+ }
+
if (mNameString.empty() ||
new_name ||
(!title && !mTitle.empty()) ||
@@ -5902,8 +5930,9 @@ void LLVOAvatar::updateRuthTimer(bool loading)
mRuthTimer.reset();
if (gSavedSettings.getBOOL("DebugAvatarRezTime"))
{
- llinfos << "AVATARREZTIME: Avatar '" << getFullname() << "' became cloud." << llendl;
+ llinfos << "REZTIME: [ " << (U32)mDebugExistenceTimer.getElapsedTimeF32() << "sec ] Avatar '" << getFullname() << "' became cloud." << llendl;
LLSD args;
+ args["EXISTENCE"] = llformat("%d",(U32)mDebugExistenceTimer.getElapsedTimeF32());
args["TIME"] = llformat("%d",(U32)mRuthDebugTimer.getElapsedTimeF32());
args["NAME"] = getFullname();
LLNotificationsUtil::add("AvatarRezCloudNotification",args);
@@ -5941,8 +5970,9 @@ BOOL LLVOAvatar::processFullyLoadedChange(bool loading)
{
if (!mPreviousFullyLoaded && !loading && mFullyLoaded)
{
- llinfos << "AVATARREZTIME: Avatar '" << getFullname() << "' resolved in " << (U32)mRuthDebugTimer.getElapsedTimeF32() << " seconds." << llendl;
+ llinfos << "REZTIME: [ " << (U32)mDebugExistenceTimer.getElapsedTimeF32() << "sec ] Avatar '" << getFullname() << "' resolved in " << (U32)mRuthDebugTimer.getElapsedTimeF32() << " seconds." << llendl;
LLSD args;
+ args["EXISTENCE"] = llformat("%d",(U32)mDebugExistenceTimer.getElapsedTimeF32());
args["TIME"] = llformat("%d",(U32)mRuthDebugTimer.getElapsedTimeF32());
args["NAME"] = getFullname();
LLNotificationsUtil::add("AvatarRezNotification",args);
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index 24bd2739f7..d74b4fe7b2 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -261,6 +261,7 @@ private:
LLFrameTimer mFullyLoadedTimer;
LLFrameTimer mRuthTimer;
LLFrameTimer mRuthDebugTimer; // For tracking how long it takes for av to rez
+ LLFrameTimer mDebugExistenceTimer; // Debugging for how long the avatar has been in memory.
/** State
** **
diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index e8f42178a1..695ea68ae8 100644
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -1766,13 +1766,28 @@ void LLVOAvatarSelf::onTimingLocalTexLoaded(BOOL success, LLViewerFetchedTexture
void LLVOAvatarSelf::timingLocalTexLoaded(BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata)
{
LLAvatarTexData *data = (LLAvatarTexData *)userdata;
+ if (!data)
+ {
+ return;
+ }
+
ETextureIndex index = data->mIndex;
+
+if (index < 0 || index >= TEX_NUM_INDICES)
+ {
+ return;
+ }
if (discard_level >=0 && discard_level <= MAX_DISCARD_LEVEL) // ignore discard level -1, as it means we have no data.
{
mTextureLoadTimes[(U32)index][(U32)discard_level] = mSelfLoadTimer.getElapsedTimeF32();
}
- delete data;
+ if (final)
+ {
+ delete data;
+ // for debugging, apparently there is a case in which we are keeping old de-allocated structures around in callbacks
+ *data = NULL;
+ }
}
void LLVOAvatarSelf::bakedTextureUpload(EBakedTextureIndex index, BOOL finished)
@@ -1957,7 +1972,7 @@ void LLVOAvatarSelf::setNewBakedTexture( ETextureIndex te, const LLUUID& uuid )
{
gAgent.sendAgentSetAppearance();
F32 final_time = mSelfLoadTimer.getElapsedTimeF32();
- llinfos << "AVATARREZTIME: Myself rez stats:" << llendl;
+ llinfos << "REZTIME: Myself rez stats:" << llendl;
llinfos << "\t Time from avatar creation to load wearables: " << (S32)mTimeWearablesLoaded << llendl;
llinfos << "\t Time from avatar creation to de-cloud: " << (S32)mTimeAvatarVisible << llendl;
llinfos << "\t Time from avatar creation to de-cloud for others: " << (S32)final_time << llendl;
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 6b486a91c5..4b31a1a0ad 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -6123,6 +6123,7 @@ Drag items from inventory onto a person in the resident picker
icon="notifytip.tga"
name="AvatarRezNotification"
type="notifytip">
+( [EXISTENCE] seconds )
Avatar '[NAME]' rezzed in [TIME] seconds.
</notification>
@@ -6130,6 +6131,7 @@ Avatar '[NAME]' rezzed in [TIME] seconds.
icon="notifytip.tga"
name="AvatarRezCloudNotification"
type="notifytip">
+( [EXISTENCE] seconds )
Avatar '[NAME]' became cloud.
</notification>
@@ -6137,6 +6139,7 @@ Avatar '[NAME]' became cloud.
icon="notifytip.tga"
name="AvatarRezArrivedNotification"
type="notifytip">
+( [EXISTENCE] seconds )
Avatar '[NAME]' appeared.
</notification>
@@ -6144,13 +6147,31 @@ Avatar '[NAME]' appeared.
icon="notifytip.tga"
name="AvatarRezLeftCloudNotification"
type="notifytip">
+( [EXISTENCE] seconds )
Avatar '[NAME]' left after [TIME] seconds as cloud.
</notification>
<notification
icon="notifytip.tga"
+ name="AvatarRezEnteredAppearanceNotification"
+ type="notifytip">
+( [EXISTENCE] seconds )
+Avatar '[NAME]' entered appearance mode.
+ </notification>
+
+ <notification
+ icon="notifytip.tga"
+ name="AvatarRezLeftAppearanceNotification"
+ type="notifytip">
+( [EXISTENCE] seconds )
+Avatar '[NAME]' left appearance mode.
+ </notification>
+
+ <notification
+ icon="notifytip.tga"
name="AvatarRezLeftNotification"
type="notifytip">
+( [EXISTENCE] seconds )
Avatar '[NAME]' left as fully loaded.
</notification>