SH-3275 WIP Run viewer metrics for object update messages

continued clean up of llstats stuff
master
Richard Linden 2012-07-18 12:37:52 -07:00
parent 5564fcb271
commit df7d6c9075
11 changed files with 98 additions and 301 deletions

View File

@ -785,9 +785,6 @@ bool LLAppViewer::init()
//////////////////////////////////////////////////////////////////////////////
// *FIX: The following code isn't grouped into functions yet.
// Statistics / debug timer initialization
init_statistics();
//
// Various introspection concerning the libs we're using - particularly
// the libs involved in getting to a full login screen.
@ -4208,7 +4205,6 @@ void LLAppViewer::idle()
// of SEND_STATS_PERIOD so that the initial stats report will
// be sent immediately.
static LLFrameStatsTimer viewer_stats_timer(SEND_STATS_PERIOD);
reset_statistics();
// Update session stats every large chunk of time
// *FIX: (???) SAMANTHA
@ -4268,7 +4264,7 @@ void LLAppViewer::idle()
idle_afk_check();
// Update statistics for this frame
update_statistics(gFrameCount);
update_statistics();
}
////////////////////////////////////////

View File

@ -1394,7 +1394,7 @@ bool idle_startup()
display_startup();
//reset statistics
LLViewerStats::getInstance()->resetStats();
LLViewerStats::instance().resetStats();
display_startup();
//

View File

@ -61,8 +61,6 @@ LLColor4U MAX_WATER_COLOR(0, 48, 96, 240);
S32 LLSurface::sTextureSize = 256;
S32 LLSurface::sTexelsUpdated = 0;
F32 LLSurface::sTextureUpdateTime = 0.f;
// ---------------- LLSurface:: Public Members ---------------

View File

@ -168,9 +168,6 @@ public:
F32 mDetailTextureScale; // Number of times to repeat detail texture across this surface
static F32 sTextureUpdateTime;
static S32 sTexelsUpdated;
protected:
void createSTexture();
void createWaterTexture();

View File

@ -3242,7 +3242,7 @@ void LLTextureFetchDebugger::startDebug()
}
//collect statistics
mTotalFetchingTime = gDebugTimers[0].getElapsedTimeF32() - mTotalFetchingTime;
mTotalFetchingTime = gTextureTimer.getElapsedTimeF32() - mTotalFetchingTime;
std::set<LLUUID> fetched_textures;
S32 size = mFetchingHistory.size();
@ -3324,7 +3324,7 @@ void LLTextureFetchDebugger::stopDebug()
//unlock the fetcher
mFetcher->lockFetcher(false);
mFreezeHistory = FALSE;
mTotalFetchingTime = gDebugTimers[0].getElapsedTimeF32(); //reset
mTotalFetchingTime = gTextureTimer.getElapsedTimeF32(); //reset
}
//called in the main thread and when the fetching queue is empty
@ -3637,7 +3637,7 @@ bool LLTextureFetchDebugger::update()
case REFETCH_VIS_CACHE:
if (LLAppViewer::getTextureFetch()->getNumRequests() == 0)
{
mRefetchVisCacheTime = gDebugTimers[0].getElapsedTimeF32() - mTotalFetchingTime;
mRefetchVisCacheTime = gTextureTimer.getElapsedTimeF32() - mTotalFetchingTime;
mState = IDLE;
mFetcher->lockFetcher(true);
}
@ -3645,7 +3645,7 @@ bool LLTextureFetchDebugger::update()
case REFETCH_VIS_HTTP:
if (LLAppViewer::getTextureFetch()->getNumRequests() == 0)
{
mRefetchVisHTTPTime = gDebugTimers[0].getElapsedTimeF32() - mTotalFetchingTime;
mRefetchVisHTTPTime = gTextureTimer.getElapsedTimeF32() - mTotalFetchingTime;
mState = IDLE;
mFetcher->lockFetcher(true);
}

View File

@ -1314,22 +1314,6 @@ class LLAdvancedPrintAgentInfo : public view_listener_t
}
};
////////////////////////////////
// PRINT TEXTURE MEMORY STATS //
////////////////////////////////
class LLAdvancedPrintTextureMemoryStats : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
{
output_statistics(NULL);
return true;
}
};
//////////////////
// DEBUG CLICKS //
//////////////////
@ -8280,7 +8264,6 @@ void initialize_menus()
commit.add("Advanced.DumpFocusHolder", boost::bind(&handle_dump_focus) );
view_listener_t::addMenu(new LLAdvancedPrintSelectedObjectInfo(), "Advanced.PrintSelectedObjectInfo");
view_listener_t::addMenu(new LLAdvancedPrintAgentInfo(), "Advanced.PrintAgentInfo");
view_listener_t::addMenu(new LLAdvancedPrintTextureMemoryStats(), "Advanced.PrintTextureMemoryStats");
view_listener_t::addMenu(new LLAdvancedToggleDebugClicks(), "Advanced.ToggleDebugClicks");
view_listener_t::addMenu(new LLAdvancedCheckDebugClicks(), "Advanced.CheckDebugClicks");
view_listener_t::addMenu(new LLAdvancedCheckDebugViews(), "Advanced.CheckDebugViews");

View File

@ -286,19 +286,19 @@ LLViewerStats::~LLViewerStats()
void LLViewerStats::resetStats()
{
LLViewerStats::getInstance()->mKBitStat.reset();
LLViewerStats::getInstance()->mLayersKBitStat.reset();
LLViewerStats::getInstance()->mObjectKBitStat.reset();
LLViewerStats::getInstance()->mTextureKBitStat.reset();
LLViewerStats::getInstance()->mVFSPendingOperations.reset();
LLViewerStats::getInstance()->mAssetKBitStat.reset();
LLViewerStats::getInstance()->mPacketsInStat.reset();
LLViewerStats::getInstance()->mPacketsLostStat.reset();
LLViewerStats::getInstance()->mPacketsOutStat.reset();
LLViewerStats::getInstance()->mFPSStat.reset();
LLViewerStats::getInstance()->mTexturePacketsStat.reset();
LLViewerStats::getInstance()->mAgentPositionSnaps.reset();
LLViewerStats& stats = LLViewerStats::instance();
stats.mKBitStat.reset();
stats.mLayersKBitStat.reset();
stats.mObjectKBitStat.reset();
stats.mTextureKBitStat.reset();
stats.mVFSPendingOperations.reset();
stats.mAssetKBitStat.reset();
stats.mPacketsInStat.reset();
stats.mPacketsLostStat.reset();
stats.mPacketsOutStat.reset();
stats.mFPSStat.reset();
stats.mTexturePacketsStat.reset();
stats.mAgentPositionSnaps.reset();
}
@ -401,140 +401,6 @@ void LLViewerStats::addToMessage(LLSD &body) const
// *NOTE:Mani The following methods used to exist in viewer.cpp
// Moving them here, but not merging them into LLViewerStats yet.
void reset_statistics()
{
if (LLSurface::sTextureUpdateTime)
{
LLSurface::sTexelsUpdated = 0;
LLSurface::sTextureUpdateTime = 0.f;
}
}
void output_statistics(void*)
{
llinfos << "Number of orphans: " << gObjectList.getOrphanCount() << llendl;
llinfos << "Number of dead objects: " << gObjectList.mNumDeadObjects << llendl;
llinfos << "Num images: " << gTextureList.getNumImages() << llendl;
llinfos << "Texture usage: " << LLImageGL::sGlobalTextureMemoryInBytes << llendl;
llinfos << "Texture working set: " << LLImageGL::sBoundTextureMemoryInBytes << llendl;
llinfos << "Raw usage: " << LLImageRaw::sGlobalRawMemory << llendl;
llinfos << "Formatted usage: " << LLImageFormatted::sGlobalFormattedMemory << llendl;
llinfos << "Zombie Viewer Objects: " << LLViewerObject::getNumZombieObjects() << llendl;
llinfos << "Number of lights: " << gPipeline.getLightCount() << llendl;
llinfos << "Memory Usage:" << llendl;
llinfos << "--------------------------------" << llendl;
llinfos << "Pipeline:" << llendl;
llinfos << llendl;
#if LL_SMARTHEAP
llinfos << "--------------------------------" << llendl;
{
llinfos << "sizeof(LLVOVolume) = " << sizeof(LLVOVolume) << llendl;
U32 total_pool_size = 0;
U32 total_used_size = 0;
MEM_POOL_INFO pool_info;
MEM_POOL_STATUS pool_status;
U32 pool_num = 0;
for(pool_status = MemPoolFirst( &pool_info, 1 );
pool_status != MEM_POOL_END;
pool_status = MemPoolNext( &pool_info, 1 ) )
{
llinfos << "Pool #" << pool_num << llendl;
if( MEM_POOL_OK != pool_status )
{
llwarns << "Pool not ok" << llendl;
continue;
}
llinfos << "Pool blockSizeFS " << pool_info.blockSizeFS
<< " pageSize " << pool_info.pageSize
<< llendl;
U32 pool_count = MemPoolCount(pool_info.pool);
llinfos << "Blocks " << pool_count << llendl;
U32 pool_size = MemPoolSize( pool_info.pool );
if( pool_size == MEM_ERROR_RET )
{
llinfos << "MemPoolSize() failed (" << pool_num << ")" << llendl;
}
else
{
llinfos << "MemPool Size " << pool_size / 1024 << "K" << llendl;
}
total_pool_size += pool_size;
if( !MemPoolLock( pool_info.pool ) )
{
llinfos << "MemPoolLock failed (" << pool_num << ") " << llendl;
continue;
}
U32 used_size = 0;
MEM_POOL_ENTRY entry;
entry.entry = NULL;
while( MemPoolWalk( pool_info.pool, &entry ) == MEM_POOL_OK )
{
if( entry.isInUse )
{
used_size += entry.size;
}
}
MemPoolUnlock( pool_info.pool );
llinfos << "MemPool Used " << used_size/1024 << "K" << llendl;
total_used_size += used_size;
pool_num++;
}
llinfos << "Total Pool Size " << total_pool_size/1024 << "K" << llendl;
llinfos << "Total Used Size " << total_used_size/1024 << "K" << llendl;
}
#endif
llinfos << "--------------------------------" << llendl;
llinfos << "Avatar Memory (partly overlaps with above stats):" << llendl;
LLTexLayerStaticImageList::getInstance()->dumpByteCount();
LLVOAvatarSelf::dumpScratchTextureByteCount();
LLTexLayerSetBuffer::dumpTotalByteCount();
LLVOAvatarSelf::dumpTotalLocalTextureByteCount();
LLTexLayerParamAlpha::dumpCacheByteCount();
LLVOAvatar::dumpBakedStatus();
llinfos << llendl;
llinfos << "Object counts:" << llendl;
S32 i;
S32 obj_counts[256];
// S32 app_angles[256];
for (i = 0; i < 256; i++)
{
obj_counts[i] = 0;
}
for (i = 0; i < gObjectList.getNumObjects(); i++)
{
LLViewerObject *objectp = gObjectList.getObject(i);
if (objectp)
{
obj_counts[objectp->getPCode()]++;
}
}
for (i = 0; i < 256; i++)
{
if (obj_counts[i])
{
llinfos << LLPrimitive::pCodeToString(i) << ":" << obj_counts[i] << llendl;
}
}
}
U32 gTotalLandIn = 0, gTotalLandOut = 0;
U32 gTotalWaterIn = 0, gTotalWaterOut = 0;
@ -552,16 +418,9 @@ U32 gTotalTextureBytesPerBoostLevel[LLViewerTexture::MAX_GL_IMAGE_CATEGORY]
extern U32 gVisCompared;
extern U32 gVisTested;
std::map<S32,LLFrameTimer> gDebugTimers;
std::map<S32,std::string> gDebugTimerLabel;
extern LLFrameTimer gTextureTimer;
void init_statistics()
{
// Label debug timers
gDebugTimerLabel[0] = "Texture";
}
void update_statistics(U32 frame_count)
void update_statistics()
{
gTotalWorldBytes += gVLManager.getTotalBytes();
gTotalObjectBytes += gObjectBits / 8;
@ -588,11 +447,7 @@ void update_statistics(U32 frame_count)
stats.setStat(LLViewerStats::ST_LIGHTING_DETAIL, (F64)gPipeline.getLightingDetail());
stats.setStat(LLViewerStats::ST_DRAW_DIST, (F64)gSavedSettings.getF32("RenderFarClip"));
stats.setStat(LLViewerStats::ST_CHAT_BUBBLES, (F64)gSavedSettings.getBOOL("UseChatBubbles"));
#if 0 // 1.9.2
stats.setStat(LLViewerStats::ST_SHADER_OBJECTS, (F64)gSavedSettings.getS32("VertexShaderLevelObject"));
stats.setStat(LLViewerStats::ST_SHADER_AVATAR, (F64)gSavedSettings.getBOOL("VertexShaderLevelAvatar"));
stats.setStat(LLViewerStats::ST_SHADER_ENVIRONMENT, (F64)gSavedSettings.getBOOL("VertexShaderLevelEnvironment"));
#endif
stats.setStat(LLViewerStats::ST_FRAME_SECS, gDebugView->mFastTimerView->getTime("Frame"));
F64 idle_secs = gDebugView->mFastTimerView->getTime("Idle");
F64 network_secs = gDebugView->mFastTimerView->getTime("Network");
@ -624,11 +479,11 @@ void update_statistics(U32 frame_count)
if (LLAppViewer::getTextureFetch()->getNumRequests() == 0)
{
gDebugTimers[0].pause();
gTextureTimer.pause();
}
else
{
gDebugTimers[0].unpause();
gTextureTimer.unpause();
}
{
@ -664,7 +519,6 @@ void update_statistics(U32 frame_count)
texture_stats_timer.reset();
}
}
}
class ViewerStatsResponder : public LLHTTPClient::Responder
@ -824,10 +678,7 @@ void send_stats()
S32 window_height = gViewerWindow->getWindowHeightRaw();
S32 window_size = (window_width * window_height) / 1024;
misc["string_1"] = llformat("%d", window_size);
if (gDebugTimers.find(0) != gDebugTimers.end() && gFrameTimeSeconds > 0)
{
misc["string_2"] = llformat("Texture Time: %.2f, Total Time: %.2f", gDebugTimers[0].getElapsedTimeF32(), gFrameTimeSeconds);
}
misc["string_2"] = llformat("Texture Time: %.2f, Total Time: %.2f", gTextureTimer.getElapsedTimeF32(), gFrameTimeSeconds);
// misc["int_1"] = LLSD::Integer(gSavedSettings.getU32("RenderQualityPerformance")); // Steve: 1.21
// misc["int_2"] = LLSD::Integer(gFrameStalls); // Steve: 1.21
@ -918,13 +769,6 @@ LLSD LLViewerStats::PhaseMap::dumpPhases()
const std::string& phase_name = iter->first;
result[phase_name]["completed"] = !(iter->second.getStarted());
result[phase_name]["elapsed"] = iter->second.getElapsedTimeF32();
#if 0 // global stats for each phase seem like overkill here
phase_stats_t::iterator stats_iter = sPhaseStats.find(phase_name);
if (stats_iter != sPhaseStats.end())
{
result[phase_name]["stats"] = stats_iter->second.getData();
}
#endif
}
return result;
}

View File

@ -33,82 +33,82 @@
class LLViewerStats : public LLSingleton<LLViewerStats>
{
public:
LLStat mKBitStat;
LLStat mLayersKBitStat;
LLStat mObjectKBitStat;
LLStat mAssetKBitStat;
LLStat mTextureKBitStat;
LLStat mVFSPendingOperations;
LLStat mObjectsDrawnStat;
LLStat mObjectsCulledStat;
LLStat mObjectsTestedStat;
LLStat mObjectsComparedStat;
LLStat mObjectsOccludedStat;
LLStat mFPSStat;
LLStat mPacketsInStat;
LLStat mPacketsLostStat;
LLStat mPacketsOutStat;
LLStat mPacketsLostPercentStat;
LLStat mTexturePacketsStat;
LLStat mActualInKBitStat; // From the packet ring (when faking a bad connection)
LLStat mActualOutKBitStat; // From the packet ring (when faking a bad connection)
LLStat mTrianglesDrawnStat;
LLStat mKBitStat,
mLayersKBitStat,
mObjectKBitStat,
mAssetKBitStat,
mTextureKBitStat,
mVFSPendingOperations,
mObjectsDrawnStat,
mObjectsCulledStat,
mObjectsTestedStat,
mObjectsComparedStat,
mObjectsOccludedStat,
mFPSStat,
mPacketsInStat,
mPacketsLostStat,
mPacketsOutStat,
mPacketsLostPercentStat,
mTexturePacketsStat,
mActualInKBitStat, // From the packet ring (when faking a bad connection)
mActualOutKBitStat, // From the packet ring (when faking a bad connection)
mTrianglesDrawnStat;
// Simulator stats
LLStat mSimTimeDilation;
LLStat mSimTimeDilation,
LLStat mSimFPS;
LLStat mSimPhysicsFPS;
LLStat mSimAgentUPS;
LLStat mSimScriptEPS;
mSimFPS,
mSimPhysicsFPS,
mSimAgentUPS,
mSimScriptEPS,
LLStat mSimFrameMsec;
LLStat mSimNetMsec;
LLStat mSimSimOtherMsec;
LLStat mSimSimPhysicsMsec;
mSimFrameMsec,
mSimNetMsec,
mSimSimOtherMsec,
mSimSimPhysicsMsec,
LLStat mSimSimPhysicsStepMsec;
LLStat mSimSimPhysicsShapeUpdateMsec;
LLStat mSimSimPhysicsOtherMsec;
mSimSimPhysicsStepMsec,
mSimSimPhysicsShapeUpdateMsec,
mSimSimPhysicsOtherMsec,
LLStat mSimAgentMsec;
LLStat mSimImagesMsec;
LLStat mSimScriptMsec;
LLStat mSimSpareMsec;
LLStat mSimSleepMsec;
LLStat mSimPumpIOMsec;
mSimAgentMsec,
mSimImagesMsec,
mSimScriptMsec,
mSimSpareMsec,
mSimSleepMsec,
mSimPumpIOMsec,
LLStat mSimMainAgents;
LLStat mSimChildAgents;
LLStat mSimObjects;
LLStat mSimActiveObjects;
LLStat mSimActiveScripts;
mSimMainAgents,
mSimChildAgents,
mSimObjects,
mSimActiveObjects,
mSimActiveScripts,
LLStat mSimInPPS;
LLStat mSimOutPPS;
LLStat mSimPendingDownloads;
LLStat mSimPendingUploads;
LLStat mSimPendingLocalUploads;
LLStat mSimTotalUnackedBytes;
mSimInPPS,
mSimOutPPS,
mSimPendingDownloads,
mSimPendingUploads,
mSimPendingLocalUploads,
mSimTotalUnackedBytes,
LLStat mPhysicsPinnedTasks;
LLStat mPhysicsLODTasks;
LLStat mPhysicsMemoryAllocated;
mPhysicsPinnedTasks,
mPhysicsLODTasks,
mPhysicsMemoryAllocated,
LLStat mSimPingStat;
mSimPingStat,
LLStat mNumImagesStat;
LLStat mNumRawImagesStat;
LLStat mGLTexMemStat;
LLStat mGLBoundMemStat;
LLStat mRawMemStat;
LLStat mFormattedMemStat;
mNumImagesStat,
mNumRawImagesStat,
mGLTexMemStat,
mGLBoundMemStat,
mRawMemStat,
mFormattedMemStat,
LLStat mNumObjectsStat;
LLStat mNumActiveObjectsStat;
LLStat mNumNewObjectsStat;
LLStat mNumSizeCulledStat;
LLStat mNumVisCulledStat;
mNumObjectsStat,
mNumActiveObjectsStat,
mNumNewObjectsStat,
mNumSizeCulledStat,
mNumVisCulledStat;
void resetStats();
public:
@ -177,7 +177,6 @@ public:
ST_COUNT = 58
};
LLViewerStats();
~LLViewerStats();
@ -304,14 +303,10 @@ private:
static const F32 SEND_STATS_PERIOD = 300.0f;
// The following are from (older?) statistics code found in appviewer.
void init_statistics();
void reset_statistics();
void output_statistics(void*);
void update_statistics(U32 frame_count);
void update_statistics();
void send_stats();
extern std::map<S32,LLFrameTimer> gDebugTimers;
extern std::map<S32,std::string> gDebugTimerLabel;
extern LLFrameTimer gTextureTimer;
extern U32 gTotalTextureBytes;
extern U32 gTotalObjectBytes;
extern U32 gTotalTextureBytesPerBoostLevel[] ;

View File

@ -906,14 +906,6 @@ F32 LLViewerTextureList::updateImagesFetchTextures(F32 max_time)
}
min_count--;
}
//if (fetch_count == 0)
//{
// gDebugTimers[0].pause();
//}
//else
//{
// gDebugTimers[0].unpause();
//}
return image_op_timer.getElapsedTimeF32();
}

View File

@ -333,19 +333,13 @@ public:
if (gSavedSettings.getBOOL("DebugShowTime"))
{
const U32 y_inc2 = 15;
for (std::map<S32,LLFrameTimer>::reverse_iterator iter = gDebugTimers.rbegin();
iter != gDebugTimers.rend(); ++iter)
{
S32 idx = iter->first;
LLFrameTimer& timer = iter->second;
F32 time = timer.getElapsedTimeF32();
S32 hours = (S32)(time / (60*60));
S32 mins = (S32)((time - hours*(60*60)) / 60);
S32 secs = (S32)((time - hours*(60*60) - mins*60));
std::string label = gDebugTimerLabel[idx];
if (label.empty()) label = llformat("Debug: %d", idx);
addText(xpos, ypos, llformat(" %s: %d:%02d:%02d", label.c_str(), hours,mins,secs)); ypos += y_inc2;
}
LLFrameTimer& timer = gTextureTimer;
F32 time = timer.getElapsedTimeF32();
S32 hours = (S32)(time / (60*60));
S32 mins = (S32)((time - hours*(60*60)) / 60);
S32 secs = (S32)((time - hours*(60*60) - mins*60));
addText(xpos, ypos, llformat(" "Texture": %d:%02d:%02d", hours,mins,secs)); ypos += y_inc2;
F32 time = gFrameTimeSeconds;
S32 hours = (S32)(time / (60*60));

View File

@ -457,8 +457,6 @@ BOOL LLVLComposition::generateTexture(const F32 x, const F32 y,
texturep->createGLTexture(0, raw);
}
texturep->setSubImage(raw, tex_x_begin, tex_y_begin, tex_x_end - tex_x_begin, tex_y_end - tex_y_begin);
LLSurface::sTextureUpdateTime += gen_timer.getElapsedTimeF32();
LLSurface::sTexelsUpdated += (tex_x_end - tex_x_begin) * (tex_y_end - tex_y_begin);
for (S32 i = 0; i < 4; i++)
{