diff options
| author | Richard Linden <none@none> | 2012-07-12 22:35:51 -0700 | 
|---|---|---|
| committer | Richard Linden <none@none> | 2012-07-12 22:35:51 -0700 | 
| commit | 5d32e23a11f272a2cdf8b6aac106534b6814ea98 (patch) | |
| tree | 25134140f07de077c72a707a82005d72b25cf9b5 /indra | |
| parent | 90547ff411db177bf6424ca553449a81a808fc0f (diff) | |
SH-3275 WIP Run viewer metrics for object update messages
improved update logging API and output format
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/newview/app_settings/logcontrol.xml | 20 | ||||
| -rw-r--r-- | indra/newview/llappviewer.cpp | 8 | ||||
| -rw-r--r-- | indra/newview/llviewerobjectlist.cpp | 37 | ||||
| -rw-r--r-- | indra/newview/llviewerregion.cpp | 6 | ||||
| -rw-r--r-- | indra/newview/llviewerstatsrecorder.cpp | 188 | ||||
| -rw-r--r-- | indra/newview/llviewerstatsrecorder.h | 37 | 
6 files changed, 174 insertions, 122 deletions
| diff --git a/indra/newview/app_settings/logcontrol.xml b/indra/newview/app_settings/logcontrol.xml index 64122bbb6c..8636ba1090 100644 --- a/indra/newview/app_settings/logcontrol.xml +++ b/indra/newview/app_settings/logcontrol.xml @@ -48,6 +48,24 @@  						-->  						</array>  				</map> -			</array> +        <map> +          <key>level</key> +          <string>NONE</string> +          <key>functions</key> +          <array> +          </array> +          <key>classes</key> +          <array> +            <string>LLViewerStatsRecorder</string> +          </array> +          <key>files</key> +          <array> +          </array> +          <key>tags</key> +          <array> + +          </array> +        </map> +      </array>  	</map>  </llsd> diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index ed04b5bf38..c02bc882ea 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -719,10 +719,6 @@ bool LLAppViewer::init()      mAlloc.setProfilingEnabled(gSavedSettings.getBOOL("MemProfiling")); -#if LL_RECORD_VIEWER_STATS -	LLViewerStatsRecorder::initClass(); -#endif -      // *NOTE:Mani - LLCurl::initClass is not thread safe.       // Called before threads are created.      LLCurl::initClass(gSavedSettings.getF32("CurlRequestTimeOut"),  @@ -1894,10 +1890,6 @@ bool LLAppViewer::cleanup()  	LLMetricPerformanceTesterBasic::cleanClass() ; -#if LL_RECORD_VIEWER_STATS -	LLViewerStatsRecorder::cleanupClass(); -#endif -  	llinfos << "Cleaning up Media and Textures" << llendflush;  	//Note: diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index 54ccfb9aae..b010ac9aa7 100644 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -334,6 +334,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,  	U64 region_handle;  	mesgsys->getU64Fast(_PREHASH_RegionData, _PREHASH_RegionHandle, region_handle); +	  	LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromHandle(region_handle);  	if (!regionp) @@ -345,9 +346,9 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,  	U8 compressed_dpbuffer[2048];  	LLDataPackerBinaryBuffer compressed_dp(compressed_dpbuffer, 2048);  	LLDataPacker *cached_dpp = NULL; - +	LLViewerStatsRecorder& recorder = LLViewerStatsRecorder::instance();  #if LL_RECORD_VIEWER_STATS -	LLViewerStatsRecorder::instance()->beginObjectUpdateEvents(regionp); +	recorder.beginObjectUpdateEvents(1.f);  #endif  	for (i = 0; i < num_objects; i++) @@ -355,6 +356,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,  		// timer is unused?  		LLTimer update_timer;  		BOOL justCreated = FALSE; +		S32	msg_size = 0;  		if (cached)  		{ @@ -362,6 +364,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,  			U32 crc;  			mesgsys->getU32Fast(_PREHASH_ObjectData, _PREHASH_ID, id, i);  			mesgsys->getU32Fast(_PREHASH_ObjectData, _PREHASH_CRC, crc, i); +			msg_size += sizeof(U32) * 2;  			// Lookup data packer and add this id to cache miss lists if necessary.  			U8 cache_miss_type = LLViewerRegion::CACHE_MISS_TYPE_NONE; @@ -377,9 +380,9 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,  			else  			{  				// Cache Miss. -				#if LL_RECORD_VIEWER_STATS -				LLViewerStatsRecorder::instance()->recordCacheMissEvent(id, update_type, cache_miss_type); -				#endif +#if LL_RECORD_VIEWER_STATS +				recorder.recordCacheMissEvent(id, update_type, cache_miss_type, msg_size); +#endif  				continue; // no data packer, skip this object  			} @@ -391,10 +394,12 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,  			S32							compressed_length;  			compressed_dp.reset(); +  			U32 flags = 0;  			if (update_type != OUT_TERSE_IMPROVED) // OUT_FULL_COMPRESSED only?  			{  				mesgsys->getU32Fast(_PREHASH_ObjectData, _PREHASH_UpdateFlags, flags, i); +				msg_size += sizeof(U32);  			}  			// I don't think we ever use this flag from the server.  DK 2010/12/09 @@ -402,6 +407,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,  			{  				//llinfos << "TEST: flags & FLAGS_ZLIB_COMPRESSED" << llendl;  				compressed_length = mesgsys->getSizeFast(_PREHASH_ObjectData, i, _PREHASH_Data); +				msg_size += compressed_length;  				mesgsys->getBinaryDataFast(_PREHASH_ObjectData, _PREHASH_Data, compbuffer, 0, i);  				uncompressed_length = 2048;  				uncompress(compressed_dpbuffer, (unsigned long *)&uncompressed_length, @@ -411,6 +417,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,  			else  			{  				uncompressed_length = mesgsys->getSizeFast(_PREHASH_ObjectData, i, _PREHASH_Data); +				msg_size += uncompressed_length;  				mesgsys->getBinaryDataFast(_PREHASH_ObjectData, _PREHASH_Data, compressed_dpbuffer, 0, i);  				compressed_dp.assignBuffer(compressed_dpbuffer, uncompressed_length);  			} @@ -439,6 +446,8 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,  		else if (update_type != OUT_FULL) // !compressed, !OUT_FULL ==> OUT_FULL_CACHED only?  		{  			mesgsys->getU32Fast(_PREHASH_ObjectData, _PREHASH_ID, local_id, i); +			msg_size += sizeof(U32); +  			getUUIDFromLocal(fullid,  							local_id,  							gMessageSystem->getSenderIP(), @@ -453,6 +462,8 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,  		{  			mesgsys->getUUIDFast(_PREHASH_ObjectData, _PREHASH_FullID, fullid, i);  			mesgsys->getU32Fast(_PREHASH_ObjectData, _PREHASH_ID, local_id, i); +			msg_size += sizeof(LLUUID); +			msg_size += sizeof(U32);  			// llinfos << "Full Update, obj " << local_id << ", global ID" << fullid << "from " << mesgsys->getSender() << llendl;  		}  		objectp = findObject(fullid); @@ -499,7 +510,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,  				{  					// llinfos << "terse update for an unknown object (compressed):" << fullid << llendl;  					#if LL_RECORD_VIEWER_STATS -					LLViewerStatsRecorder::instance()->recordObjectUpdateFailure(local_id, update_type); +					recorder.recordObjectUpdateFailure(local_id, update_type, msg_size);  					#endif  					continue;  				} @@ -513,12 +524,14 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,  				{  					//llinfos << "terse update for an unknown object:" << fullid << llendl;  					#if LL_RECORD_VIEWER_STATS -					LLViewerStatsRecorder::instance()->recordObjectUpdateFailure(local_id, update_type); +					recorder.recordObjectUpdateFailure(local_id, update_type, msg_size);  					#endif  					continue;  				}  				mesgsys->getU8Fast(_PREHASH_ObjectData, _PREHASH_PCode, pcode, i); +				msg_size += sizeof(U8); +  			}  #ifdef IGNORE_DEAD  			if (mDeadObjects.find(fullid) != mDeadObjects.end()) @@ -526,7 +539,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,  				mNumDeadObjectUpdates++;  				//llinfos << "update for a dead object:" << fullid << llendl;  				#if LL_RECORD_VIEWER_STATS -				LLViewerStatsRecorder::instance()->recordObjectUpdateFailure(local_id, update_type); +				recorder.recordObjectUpdateFailure(local_id, update_type, msg_size);  				#endif  				continue;  			} @@ -537,7 +550,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,  			{  				llinfos << "createObject failure for object: " << fullid << llendl;  				#if LL_RECORD_VIEWER_STATS -				LLViewerStatsRecorder::instance()->recordObjectUpdateFailure(local_id, update_type); +				recorder.recordObjectUpdateFailure(local_id, update_type, msg_size);  				#endif  				continue;  			} @@ -566,7 +579,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,  				bCached = true;  				#if LL_RECORD_VIEWER_STATS  				LLViewerRegion::eCacheUpdateResult result = objectp->mRegionp->cacheFullUpdate(objectp, compressed_dp); -				LLViewerStatsRecorder::instance()->recordCacheFullUpdate(local_id, update_type, result, objectp); +				recorder.recordCacheFullUpdate(local_id, update_type, result, objectp, msg_size);  				#else  				objectp->mRegionp->cacheFullUpdate(objectp, compressed_dp);  				#endif @@ -586,14 +599,14 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,  			processUpdateCore(objectp, user_data, i, update_type, NULL, justCreated);  		}  		#if LL_RECORD_VIEWER_STATS -		LLViewerStatsRecorder::instance()->recordObjectUpdateEvent(local_id, update_type, objectp); +		recorder.recordObjectUpdateEvent(local_id, update_type, objectp, msg_size);  		#endif  		objectp->setLastUpdateType(update_type);  		objectp->setLastUpdateCached(bCached);  	}  #if LL_RECORD_VIEWER_STATS -	LLViewerStatsRecorder::instance()->endObjectUpdateEvents(); +	recorder.endObjectUpdateEvents();  #endif  	LLVOAvatar::cullAvatarsByPixelArea(); diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index e3cb985ddb..0e2927cea4 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1318,9 +1318,9 @@ void LLViewerRegion::requestCacheMisses()  	mCacheDirty = TRUE ;  	// llinfos << "KILLDEBUG Sent cache miss full " << full_count << " crc " << crc_count << llendl;  	#if LL_RECORD_VIEWER_STATS -	LLViewerStatsRecorder::instance()->beginObjectUpdateEvents(this); -	LLViewerStatsRecorder::instance()->recordRequestCacheMissesEvent(full_count + crc_count); -	LLViewerStatsRecorder::instance()->endObjectUpdateEvents(); +	LLViewerStatsRecorder::instance().beginObjectUpdateEvents(1.f); +	LLViewerStatsRecorder::instance().recordRequestCacheMissesEvent(full_count + crc_count); +	LLViewerStatsRecorder::instance().endObjectUpdateEvents();  	#endif  } diff --git a/indra/newview/llviewerstatsrecorder.cpp b/indra/newview/llviewerstatsrecorder.cpp index e9d21b4848..cfb446fe45 100644 --- a/indra/newview/llviewerstatsrecorder.cpp +++ b/indra/newview/llviewerstatsrecorder.cpp @@ -45,9 +45,10 @@ LLViewerStatsRecorder* LLViewerStatsRecorder::sInstance = NULL;  LLViewerStatsRecorder::LLViewerStatsRecorder() :  	mObjectCacheFile(NULL),  	mTimer(), -	mRegionp(NULL), -	mStartTime(0.f), -	mProcessingTime(0.f) +	mStartTime(0.0), +	mProcessingStartTime(0.0), +	mProcessingTotalTime(0.0), +	mLastSnapshotTime(0.0)  {  	if (NULL != sInstance)  	{ @@ -61,112 +62,114 @@ LLViewerStatsRecorder::~LLViewerStatsRecorder()  {  	if (mObjectCacheFile != NULL)  	{ +		// last chance snapshot +		takeSnapshot();  		LLFile::close(mObjectCacheFile);  		mObjectCacheFile = NULL;  	}  } -// static -void LLViewerStatsRecorder::initClass() -{ -	sInstance = new LLViewerStatsRecorder(); -} - -// static -void LLViewerStatsRecorder::cleanupClass() -{ -	delete sInstance; -	sInstance = NULL; -} - - -void LLViewerStatsRecorder::initStatsRecorder(LLViewerRegion *regionp) +void LLViewerStatsRecorder::beginObjectUpdateEvents(F32 interval)  { +	mSnapshotInterval = interval;  	if (mObjectCacheFile == NULL)  	{ -		mStartTime = LLTimer::getTotalTime(); +		mStartTime = LLTimer::getTotalSeconds();  		mObjectCacheFile = LLFile::fopen(STATS_FILE_NAME, "wb");  		if (mObjectCacheFile)  		{	// Write column headers  			std::ostringstream data_msg; -			data_msg << "EventTime, " -				<< "ProcessingTime, " -				<< "CacheHits, " -				<< "CacheFullMisses, " -				<< "CacheCrcMisses, " -				<< "FullUpdates, " -				<< "TerseUpdates, " -				<< "CacheMissRequests, " -				<< "CacheMissResponses, " -				<< "CacheUpdateDupes, " -				<< "CacheUpdateChanges, " -				<< "CacheUpdateAdds, " -				<< "CacheUpdateReplacements, " -				<< "UpdateFailures" +			data_msg << "EventTime(ms), " +				<< "Processing Time(ms), " +				<< "Cache Hits, " +				<< "Cache Full Misses, " +				<< "Cache Crc Misses, " +				<< "Full Updates, " +				<< "Terse Updates, " +				<< "Cache Miss Requests, " +				<< "Cache Miss Responses, " +				<< "Cache Update Dupes, " +				<< "Cache Update Changes, " +				<< "Cache Update Adds, " +				<< "Cache Update Replacements, " +				<< "Update Failures, " +				<< "Cache Hits bps, " +				<< "Cache Full Misses bps, " +				<< "Cache Crc Misses bps, " +				<< "Full Updates bps, " +				<< "Terse Updates bps, " +				<< "Cache Miss Responses bps, "  				<< "\n";  			fwrite(data_msg.str().c_str(), 1, data_msg.str().size(), mObjectCacheFile );  		}  	} -} - -void LLViewerStatsRecorder::beginObjectUpdateEvents(LLViewerRegion *regionp) -{ -	initStatsRecorder(regionp); -	mRegionp = regionp; -	mProcessingTime = LLTimer::getTotalTime(); -	clearStats(); +	mProcessingStartTime = LLTimer::getTotalSeconds();  }  void LLViewerStatsRecorder::clearStats()  {  	mObjectCacheHitCount = 0; +	mObjectCacheHitSize = 0;  	mObjectCacheMissFullCount = 0; +	mObjectCacheMissFullSize = 0;  	mObjectCacheMissCrcCount = 0; +	mObjectCacheMissCrcSize = 0;  	mObjectFullUpdates = 0; +	mObjectFullUpdatesSize = 0;  	mObjectTerseUpdates = 0; +	mObjectTerseUpdatesSize = 0;  	mObjectCacheMissRequests = 0;  	mObjectCacheMissResponses = 0; +	mObjectCacheMissResponsesSize = 0;  	mObjectCacheUpdateDupes = 0;  	mObjectCacheUpdateChanges = 0;  	mObjectCacheUpdateAdds = 0;  	mObjectCacheUpdateReplacements = 0;  	mObjectUpdateFailures = 0; +	mObjectUpdateFailuresSize = 0;  } -void LLViewerStatsRecorder::recordObjectUpdateFailure(U32 local_id, const EObjectUpdateType update_type) +void LLViewerStatsRecorder::recordObjectUpdateFailure(U32 local_id, const EObjectUpdateType update_type, S32 msg_size)  {  	mObjectUpdateFailures++; +	mObjectUpdateFailuresSize += msg_size;  } -void LLViewerStatsRecorder::recordCacheMissEvent(U32 local_id, const EObjectUpdateType update_type, U8 cache_miss_type) +void LLViewerStatsRecorder::recordCacheMissEvent(U32 local_id, const EObjectUpdateType update_type, U8 cache_miss_type, S32 msg_size)  {  	if (LLViewerRegion::CACHE_MISS_TYPE_FULL == cache_miss_type)  	{  		mObjectCacheMissFullCount++; +		mObjectCacheMissFullSize += msg_size;  	}  	else  	{  		mObjectCacheMissCrcCount++; +		mObjectCacheMissCrcSize += msg_size;  	}  } -void LLViewerStatsRecorder::recordObjectUpdateEvent(U32 local_id, const EObjectUpdateType update_type, LLViewerObject * objectp) +void LLViewerStatsRecorder::recordObjectUpdateEvent(U32 local_id, const EObjectUpdateType update_type, LLViewerObject * objectp, S32 msg_size)  {  	switch (update_type)  	{  	case OUT_FULL:  		mObjectFullUpdates++; +		mObjectFullUpdatesSize += msg_size;  		break;  	case OUT_TERSE_IMPROVED:  		mObjectTerseUpdates++; +		mObjectTerseUpdatesSize += msg_size;  		break;  	case OUT_FULL_COMPRESSED:  		mObjectCacheMissResponses++; +		mObjectCacheMissResponsesSize += msg_size;  		break;  	case OUT_FULL_CACHED:  		mObjectCacheHitCount++; +		mObjectCacheHitSize += msg_size;  		break;  	default:  		llwarns << "Unknown update_type" << llendl; @@ -174,7 +177,7 @@ void LLViewerStatsRecorder::recordObjectUpdateEvent(U32 local_id, const EObjectU  	};  } -void LLViewerStatsRecorder::recordCacheFullUpdate(U32 local_id, const EObjectUpdateType update_type, LLViewerRegion::eCacheUpdateResult update_result, LLViewerObject* objectp) +void LLViewerStatsRecorder::recordCacheFullUpdate(U32 local_id, const EObjectUpdateType update_type, LLViewerRegion::eCacheUpdateResult update_result, LLViewerObject* objectp, S32 msg_size)  {  	switch (update_result)  	{ @@ -203,53 +206,72 @@ void LLViewerStatsRecorder::recordRequestCacheMissesEvent(S32 count)  void LLViewerStatsRecorder::endObjectUpdateEvents()  { -	llinfos << "ILX: "  -		<< mObjectCacheHitCount << " hits, "  -		<< mObjectCacheMissFullCount << " full misses, " -		<< mObjectCacheMissCrcCount << " crc misses, " -		<< mObjectFullUpdates << " full updates, " -		<< mObjectTerseUpdates << " terse updates, " -		<< mObjectCacheMissRequests << " cache miss requests, " -		<< mObjectCacheMissResponses << " cache miss responses, " -		<< mObjectCacheUpdateDupes << " cache update dupes, " -		<< mObjectCacheUpdateChanges << " cache update changes, " -		<< mObjectCacheUpdateAdds << " cache update adds, " -		<< mObjectCacheUpdateReplacements << " cache update replacements, " -		<< mObjectUpdateFailures << " update failures" -		<< llendl; +	mProcessingTotalTime += LLTimer::getTotalSeconds() - mProcessingStartTime; +	takeSnapshot(); +} -	S32 total_objects = mObjectCacheHitCount + mObjectCacheMissCrcCount + mObjectCacheMissFullCount + mObjectFullUpdates + mObjectTerseUpdates + mObjectCacheMissRequests + mObjectCacheMissResponses + mObjectCacheUpdateDupes + mObjectCacheUpdateChanges + mObjectCacheUpdateAdds + mObjectCacheUpdateReplacements + mObjectUpdateFailures; -	if (mObjectCacheFile != NULL && -		total_objects > 0) +void LLViewerStatsRecorder::takeSnapshot() +{ +	F64 delta_time = LLTimer::getTotalSeconds() - mLastSnapshotTime; +	if ( delta_time > mSnapshotInterval)  	{ -		std::ostringstream data_msg; -		F32 processing32 = (F32) ((LLTimer::getTotalTime() - mProcessingTime) / 1000.0); +		mLastSnapshotTime = LLTimer::getTotalSeconds(); +		llinfos << "ILX: "  +			<< mObjectCacheHitCount << " hits, "  +			<< mObjectCacheMissFullCount << " full misses, " +			<< mObjectCacheMissCrcCount << " crc misses, " +			<< mObjectFullUpdates << " full updates, " +			<< mObjectTerseUpdates << " terse updates, " +			<< mObjectCacheMissRequests << " cache miss requests, " +			<< mObjectCacheMissResponses << " cache miss responses, " +			<< mObjectCacheUpdateDupes << " cache update dupes, " +			<< mObjectCacheUpdateChanges << " cache update changes, " +			<< mObjectCacheUpdateAdds << " cache update adds, " +			<< mObjectCacheUpdateReplacements << " cache update replacements, " +			<< mObjectUpdateFailures << " update failures" +			<< llendl; -		data_msg << getTimeSinceStart() -			<< ", " << processing32 -			<< ", " << mObjectCacheHitCount -			<< ", " << mObjectCacheMissFullCount -			<< ", " << mObjectCacheMissCrcCount -			<< ", " << mObjectFullUpdates -			<< ", " << mObjectTerseUpdates -			<< ", " << mObjectCacheMissRequests -			<< ", " << mObjectCacheMissResponses -			<< ", " << mObjectCacheUpdateDupes -			<< ", " << mObjectCacheUpdateChanges -			<< ", " << mObjectCacheUpdateAdds -			<< ", " << mObjectCacheUpdateReplacements -			<< ", " << mObjectUpdateFailures -			<< "\n"; +		S32 total_objects = mObjectCacheHitCount + mObjectCacheMissCrcCount + mObjectCacheMissFullCount + mObjectFullUpdates + mObjectTerseUpdates + mObjectCacheMissRequests + mObjectCacheMissResponses + mObjectCacheUpdateDupes + mObjectCacheUpdateChanges + mObjectCacheUpdateAdds + mObjectCacheUpdateReplacements + mObjectUpdateFailures; +		if (mObjectCacheFile != NULL && +			total_objects > 0) +		{ +			std::ostringstream data_msg; -		fwrite(data_msg.str().c_str(), 1, data_msg.str().size(), mObjectCacheFile ); -	} +			F32 processing32 = (F32) mProcessingTotalTime; +			mProcessingTotalTime = 0.0; -	clearStats(); +			data_msg << getTimeSinceStart() +				<< ", " << processing32 +				<< ", " << mObjectCacheHitCount +				<< ", " << mObjectCacheMissFullCount +				<< ", " << mObjectCacheMissCrcCount +				<< ", " << mObjectFullUpdates +				<< ", " << mObjectTerseUpdates +				<< ", " << mObjectCacheMissRequests +				<< ", " << mObjectCacheMissResponses +				<< ", " << mObjectCacheUpdateDupes +				<< ", " << mObjectCacheUpdateChanges +				<< ", " << mObjectCacheUpdateAdds +				<< ", " << mObjectCacheUpdateReplacements +				<< ", " << mObjectUpdateFailures +				<< ", " << (mObjectCacheHitSize * 8 / delta_time) +				<< ", " << (mObjectCacheMissFullSize * 8 / delta_time) +				<< ", " << (mObjectCacheMissCrcSize * 8 / delta_time) +				<< ", " << (mObjectFullUpdatesSize * 8 / delta_time) +				<< ", " << (mObjectTerseUpdatesSize * 8 / delta_time) +				<< ", " << (mObjectCacheMissResponsesSize * 8 / delta_time) +				<< "\n"; + +			fwrite(data_msg.str().c_str(), 1, data_msg.str().size(), mObjectCacheFile ); +		} + +		clearStats(); +	}  }  F32 LLViewerStatsRecorder::getTimeSinceStart()  { -	return (F32) ((LLTimer::getTotalTime() - mStartTime) / 1000.0); +	return (F32) (LLTimer::getTotalSeconds() - mStartTime);  }  #endif diff --git a/indra/newview/llviewerstatsrecorder.h b/indra/newview/llviewerstatsrecorder.h index 612ac380f7..09530b13eb 100644 --- a/indra/newview/llviewerstatsrecorder.h +++ b/indra/newview/llviewerstatsrecorder.h @@ -32,7 +32,7 @@  // for analysis.  // This is normally 0.  Set to 1 to enable viewer stats recording -#define LL_RECORD_VIEWER_STATS	0 +#define LL_RECORD_VIEWER_STATS	1  #if LL_RECORD_VIEWER_STATS @@ -41,52 +41,59 @@  #include "llviewerregion.h"  class LLMutex; -class LLViewerRegion;  class LLViewerObject; -class LLViewerStatsRecorder +class LLViewerStatsRecorder : public LLSingleton<LLViewerStatsRecorder>  {   public: +	LOG_CLASS(LLViewerStatsRecorder);	   	LLViewerStatsRecorder();  	~LLViewerStatsRecorder(); -	static void initClass(); -	static void cleanupClass(); -	static LLViewerStatsRecorder* instance() {return sInstance; } +	void beginObjectUpdateEvents(F32 interval); -	void initStatsRecorder(LLViewerRegion *regionp); - -	void beginObjectUpdateEvents(LLViewerRegion *regionp); -	void recordObjectUpdateFailure(U32 local_id, const EObjectUpdateType update_type); -	void recordCacheMissEvent(U32 local_id, const EObjectUpdateType update_type, U8 cache_miss_type); -	void recordObjectUpdateEvent(U32 local_id, const EObjectUpdateType update_type, LLViewerObject * objectp); -	void recordCacheFullUpdate(U32 local_id, const EObjectUpdateType update_type, LLViewerRegion::eCacheUpdateResult update_result, LLViewerObject* objectp); +	void recordObjectUpdateFailure(U32 local_id, const EObjectUpdateType update_type, S32 msg_size); +	void recordCacheMissEvent(U32 local_id, const EObjectUpdateType update_type, U8 cache_miss_type, S32 msg_size); +	void recordObjectUpdateEvent(U32 local_id, const EObjectUpdateType update_type, LLViewerObject * objectp, S32 msg_size); +	void recordCacheFullUpdate(U32 local_id, const EObjectUpdateType update_type, LLViewerRegion::eCacheUpdateResult update_result, LLViewerObject* objectp, S32 msg_size);  	void recordRequestCacheMissesEvent(S32 count); +	  	void endObjectUpdateEvents();  	F32 getTimeSinceStart();  private: +	void takeSnapshot(); +  	static LLViewerStatsRecorder* sInstance;  	LLFILE *	mObjectCacheFile;		// File to write data into  	LLFrameTimer	mTimer; -	LLViewerRegion*	mRegionp;  	F64			mStartTime; -	F64			mProcessingTime; +	F64			mProcessingStartTime; +	F64			mProcessingTotalTime; +	F64			mSnapshotInterval; +	F64			mLastSnapshotTime;  	S32			mObjectCacheHitCount; +	S32			mObjectCacheHitSize;  	S32			mObjectCacheMissFullCount; +	S32			mObjectCacheMissFullSize;  	S32			mObjectCacheMissCrcCount; +	S32			mObjectCacheMissCrcSize;  	S32			mObjectFullUpdates; +	S32			mObjectFullUpdatesSize;  	S32			mObjectTerseUpdates; +	S32			mObjectTerseUpdatesSize;  	S32			mObjectCacheMissRequests;  	S32			mObjectCacheMissResponses; +	S32			mObjectCacheMissResponsesSize;  	S32			mObjectCacheUpdateDupes;  	S32			mObjectCacheUpdateChanges;  	S32			mObjectCacheUpdateAdds;  	S32			mObjectCacheUpdateReplacements;  	S32			mObjectUpdateFailures; +	S32			mObjectUpdateFailuresSize;  	void	clearStats(); | 
