SH-4299 FIX Interesting: High fps shown temporarily off scale in statistics console
added ability to force uniqueness of LLCopyOnWritePointer converted more variables to units added convenience function for unit constantsmaster
parent
0f178ec33d
commit
ffa7123bb5
|
|
@ -383,7 +383,7 @@ BOOL LLFlyAdjustMotion::onUpdate(F32 time, U8* joint_mask)
|
|||
F32 target_roll = llclamp(ang_vel.mV[VZ], -4.f, 4.f) * roll_factor;
|
||||
|
||||
// roll is critically damped interpolation between current roll and angular velocity-derived target roll
|
||||
mRoll = LLSmoothInterpolation::lerp(mRoll, target_roll, LLUnit<F32, LLUnits::Milliseconds>(100));
|
||||
mRoll = LLSmoothInterpolation::lerp(mRoll, target_roll, LLUnits::Milliseconds::fromValue(100));
|
||||
|
||||
LLQuaternion roll(mRoll, LLVector3(0.f, 0.f, 1.f));
|
||||
mPelvisState->setRotation(roll);
|
||||
|
|
|
|||
|
|
@ -386,7 +386,7 @@ void TimeBlock::dumpCurTimes()
|
|||
U32 num_calls = last_frame_recording.getSum(timerp->callCount());
|
||||
|
||||
// Don't bother with really brief times, keep output concise
|
||||
if (total_time < LLUnit<F32, LLUnits::Milliseconds>(0.1)) continue;
|
||||
if (total_time < LLUnits::Milliseconds::fromValue(0.1f)) continue;
|
||||
|
||||
std::ostringstream out_str;
|
||||
TimeBlock* parent_timerp = timerp;
|
||||
|
|
@ -397,7 +397,7 @@ void TimeBlock::dumpCurTimes()
|
|||
}
|
||||
|
||||
out_str << timerp->getName() << " "
|
||||
<< std::setprecision(3) << total_time.getAs<LLUnits::Milliseconds>() << " ms, "
|
||||
<< std::setprecision(3) << total_time.valueAs<LLUnits::Milliseconds>() << " ms, "
|
||||
<< num_calls << " calls";
|
||||
|
||||
llinfos << out_str.str() << llendl;
|
||||
|
|
|
|||
|
|
@ -173,15 +173,23 @@ public:
|
|||
typedef LLPointer<Type> pointer_t;
|
||||
|
||||
LLCopyOnWritePointer()
|
||||
: mStayUnique(false)
|
||||
{}
|
||||
|
||||
LLCopyOnWritePointer(Type* ptr)
|
||||
: LLPointer<Type>(ptr)
|
||||
: LLPointer<Type>(ptr),
|
||||
mStayUnique(false)
|
||||
{}
|
||||
|
||||
LLCopyOnWritePointer(LLPointer<Type>& ptr)
|
||||
: LLPointer<Type>(ptr)
|
||||
{}
|
||||
: LLPointer<Type>(ptr),
|
||||
mStayUnique(false)
|
||||
{
|
||||
if (ptr.mForceUnique)
|
||||
{
|
||||
makeUnique();
|
||||
}
|
||||
}
|
||||
|
||||
Type* write()
|
||||
{
|
||||
|
|
@ -199,6 +207,10 @@ public:
|
|||
|
||||
const Type* operator->() const { return pointer_t::mPointer; }
|
||||
const Type& operator*() const { return *pointer_t::mPointer; }
|
||||
|
||||
void setStayUnique(bool stay) { makeUnique(); mStayUnique = stay; }
|
||||
private:
|
||||
bool mStayUnique;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -100,14 +100,15 @@ void Recording::handleReset()
|
|||
void Recording::handleStart()
|
||||
{
|
||||
mSamplingTimer.reset();
|
||||
mBuffers.setStayUnique(true);
|
||||
LLTrace::get_thread_recorder()->activate(mBuffers.write());
|
||||
}
|
||||
|
||||
void Recording::handleStop()
|
||||
{
|
||||
mElapsedSeconds += mSamplingTimer.getElapsedTimeF64();
|
||||
AccumulatorBufferGroup* buffers = mBuffers.write();
|
||||
LLTrace::get_thread_recorder()->deactivate(buffers);
|
||||
LLTrace::get_thread_recorder()->deactivate(mBuffers.write());
|
||||
mBuffers.setStayUnique(false);
|
||||
}
|
||||
|
||||
void Recording::handleSplitTo(Recording& other)
|
||||
|
|
|
|||
|
|
@ -99,14 +99,6 @@ TimeBlockTreeNode* ThreadRecorder::getTimeBlockTreeNode( S32 index )
|
|||
|
||||
void ThreadRecorder::activate( AccumulatorBufferGroup* recording )
|
||||
{
|
||||
active_recording_list_t::reverse_iterator it, end_it;
|
||||
for (it = mActiveRecordings.rbegin(), end_it = mActiveRecordings.rend();
|
||||
it != end_it;
|
||||
++it)
|
||||
{
|
||||
llassert((*it)->mTargetRecording != recording);
|
||||
}
|
||||
|
||||
ActiveRecording* active_recording = new ActiveRecording(recording);
|
||||
if (!mActiveRecordings.empty())
|
||||
{
|
||||
|
|
|
|||
|
|
@ -75,17 +75,11 @@ struct LLUnit
|
|||
}
|
||||
|
||||
template<typename NEW_UNIT_TYPE>
|
||||
STORAGE_TYPE getAs()
|
||||
STORAGE_TYPE valueAs()
|
||||
{
|
||||
return LLUnit<STORAGE_TYPE, NEW_UNIT_TYPE>(*this).value();
|
||||
}
|
||||
|
||||
template<typename NEW_UNIT_TYPE>
|
||||
STORAGE_TYPE setAs(STORAGE_TYPE val)
|
||||
{
|
||||
*this = LLUnit<STORAGE_TYPE, NEW_UNIT_TYPE>(val);
|
||||
}
|
||||
|
||||
void operator += (storage_t value)
|
||||
{
|
||||
mValue += value;
|
||||
|
|
@ -181,6 +175,7 @@ LL_FORCE_INLINE void ll_convert_units(LLUnit<S1, T1> in, LLUnit<S2, T2>& out, ..
|
|||
if (boost::is_same<T1, typename T1::base_unit_t>::value)
|
||||
{
|
||||
if (boost::is_same<T2, typename T2::base_unit_t>::value)
|
||||
|
||||
{
|
||||
// T1 and T2 fully reduced and equal...just copy
|
||||
out = (S2)in.value();
|
||||
|
|
@ -493,26 +488,45 @@ struct LLUnitInverseLinearOps
|
|||
}
|
||||
};
|
||||
|
||||
#define LL_DECLARE_BASE_UNIT(base_unit_name, unit_label) \
|
||||
struct base_unit_name { typedef base_unit_name base_unit_t; static const char* getUnitLabel() { return unit_label; }}
|
||||
#define LL_DECLARE_BASE_UNIT(base_unit_name, unit_label) \
|
||||
struct base_unit_name \
|
||||
{ \
|
||||
typedef base_unit_name base_unit_t; \
|
||||
static const char* getUnitLabel() { return unit_label; } \
|
||||
template<typename T> \
|
||||
static LLUnit<T, base_unit_name> fromValue(T value) { return LLUnit<T, base_unit_name>(value); } \
|
||||
template<typename STORAGE_T, typename UNIT_T> \
|
||||
static LLUnit<STORAGE_T, base_unit_name> fromValue(LLUnit<STORAGE_T, UNIT_T> value) \
|
||||
{ return LLUnit<STORAGE_T, base_unit_name>(value); } \
|
||||
}; \
|
||||
template<typename T> std::ostream& operator<<(std::ostream& s, const LLUnit<T, base_unit_name>& val) \
|
||||
{ s << val.value() << base_unit_name::getUnitLabel; return s; }
|
||||
|
||||
#define LL_DECLARE_DERIVED_UNIT(unit_name, unit_label, base_unit_name, conversion_operation) \
|
||||
struct unit_name \
|
||||
{ \
|
||||
typedef base_unit_name base_unit_t; \
|
||||
static const char* getUnitLabel() { return unit_label; } \
|
||||
}; \
|
||||
\
|
||||
template<typename S1, typename S2> \
|
||||
void ll_convert_units(LLUnit<S1, unit_name> in, LLUnit<S2, base_unit_name>& out) \
|
||||
{ \
|
||||
out = (S2)(LLUnitLinearOps<S1>(in.value()) conversion_operation).mValue; \
|
||||
} \
|
||||
\
|
||||
template<typename S1, typename S2> \
|
||||
void ll_convert_units(LLUnit<S1, base_unit_name> in, LLUnit<S2, unit_name>& out) \
|
||||
{ \
|
||||
out = (S2)(LLUnitInverseLinearOps<S1>(in.value()) conversion_operation).mValue; \
|
||||
|
||||
#define LL_DECLARE_DERIVED_UNIT(unit_name, unit_label, base_unit_name, conversion_operation) \
|
||||
struct unit_name \
|
||||
{ \
|
||||
typedef base_unit_name base_unit_t; \
|
||||
static const char* getUnitLabel() { return unit_label; } \
|
||||
template<typename T> \
|
||||
static LLUnit<T, unit_name> fromValue(T value) { return LLUnit<T, unit_name>(value); } \
|
||||
template<typename STORAGE_T, typename UNIT_T> \
|
||||
static LLUnit<STORAGE_T, unit_name> fromValue(LLUnit<STORAGE_T, UNIT_T> value) \
|
||||
{ return LLUnit<STORAGE_T, unit_name>(value); } \
|
||||
}; \
|
||||
template<typename T> std::ostream& operator<<(std::ostream& s, const LLUnit<T, unit_name>& val) \
|
||||
{ s << val.value() << unit_name::getUnitLabel; return s; } \
|
||||
\
|
||||
template<typename S1, typename S2> \
|
||||
void ll_convert_units(LLUnit<S1, unit_name> in, LLUnit<S2, base_unit_name>& out) \
|
||||
{ \
|
||||
out = (S2)(LLUnitLinearOps<S1>(in.value()) conversion_operation).mValue; \
|
||||
} \
|
||||
\
|
||||
template<typename S1, typename S2> \
|
||||
void ll_convert_units(LLUnit<S1, base_unit_name> in, LLUnit<S2, unit_name>& out) \
|
||||
{ \
|
||||
out = (S2)(LLUnitInverseLinearOps<S1>(in.value()) conversion_operation).mValue; \
|
||||
}
|
||||
|
||||
//
|
||||
|
|
|
|||
|
|
@ -1294,8 +1294,6 @@ bool LLAppViewer::mainLoop()
|
|||
{
|
||||
LLFastTimer _(FTM_FRAME);
|
||||
LLTrace::TimeBlock::processTimes();
|
||||
llassert((LLTrace::get_frame_recording().getCurRecording().update(),
|
||||
LLTrace::get_frame_recording().getCurRecording().getSampleCount(LLStatViewer::FPS) <= 1));
|
||||
LLTrace::get_frame_recording().nextPeriod();
|
||||
LLTrace::TimeBlock::logStats();
|
||||
|
||||
|
|
|
|||
|
|
@ -38,10 +38,8 @@
|
|||
#include "message.h"
|
||||
|
||||
LLClassifiedStatsResponder::LLClassifiedStatsResponder(LLUUID classified_id)
|
||||
:
|
||||
mClassifiedID(classified_id)
|
||||
{
|
||||
}
|
||||
: mClassifiedID(classified_id)
|
||||
{}
|
||||
|
||||
/*virtual*/
|
||||
void LLClassifiedStatsResponder::result(const LLSD& content)
|
||||
|
|
@ -53,12 +51,11 @@ void LLClassifiedStatsResponder::result(const LLSD& content)
|
|||
S32 search_map = content["search_map_clicks"].asInteger();
|
||||
S32 search_profile = content["search_profile_clicks"].asInteger();
|
||||
|
||||
LLPanelClassifiedInfo::setClickThrough(
|
||||
mClassifiedID,
|
||||
teleport + search_teleport,
|
||||
map + search_map,
|
||||
profile + search_profile,
|
||||
true);
|
||||
LLPanelClassifiedInfo::setClickThrough( mClassifiedID,
|
||||
teleport + search_teleport,
|
||||
map + search_map,
|
||||
profile + search_profile,
|
||||
true);
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
|
|
|
|||
|
|
@ -1101,7 +1101,7 @@ void LLFastTimerView::drawLineGraph()
|
|||
j--)
|
||||
{
|
||||
LLTrace::Recording& recording = mRecording.getPrevRecording(j);
|
||||
LLUnit<F32, LLUnits::Seconds> time = llmax(recording.getSum(*idp), LLUnit<F64, LLUnits::Seconds>(0.000001));
|
||||
LLUnit<F32, LLUnits::Seconds> time = llmax(recording.getSum(*idp), LLUnits::Seconds::fromValue(0.000001));
|
||||
U32 calls = recording.getSum(idp->callCount());
|
||||
|
||||
if (is_hover_timer)
|
||||
|
|
@ -1126,7 +1126,7 @@ void LLFastTimerView::drawLineGraph()
|
|||
}
|
||||
gGL.vertex2f(x,y);
|
||||
gGL.vertex2f(x,mGraphRect.mBottom);
|
||||
}
|
||||
}
|
||||
gGL.end();
|
||||
|
||||
if (mHoverID == idp)
|
||||
|
|
@ -1146,7 +1146,7 @@ void LLFastTimerView::drawLineGraph()
|
|||
max_time = lerp(max_time.value(), cur_max.value(), LLSmoothInterpolation::getInterpolant(0.1f));
|
||||
if (llabs((max_time - cur_max).value()) <= 1)
|
||||
{
|
||||
max_time = llmax(LLUnit<F32, LLUnits::Microseconds>(1), LLUnit<F32, LLUnits::Microseconds>(cur_max));
|
||||
max_time = llmax(LLUnits::Microseconds::fromValue(1.f), LLUnits::Microseconds::fromValue(cur_max));
|
||||
}
|
||||
|
||||
max_calls = llround(lerp((F32)max_calls, (F32) cur_max_calls, LLSmoothInterpolation::getInterpolant(0.1f)));
|
||||
|
|
@ -1423,11 +1423,11 @@ void LLFastTimerView::updateTotalTime()
|
|||
mTotalTimeDisplay = mRecording.getPeriodMax(FTM_FRAME, 20);
|
||||
break;
|
||||
default:
|
||||
mTotalTimeDisplay = LLUnit<F32, LLUnits::Milliseconds>(100);
|
||||
mTotalTimeDisplay = LLUnits::Milliseconds::fromValue(100);
|
||||
break;
|
||||
}
|
||||
|
||||
mTotalTimeDisplay = LLUnit<F32, LLUnits::Milliseconds>(llceil(mTotalTimeDisplay.getAs<LLUnits::Milliseconds>() / 20.f) * 20.f);
|
||||
mTotalTimeDisplay = LLUnits::Milliseconds::fromValue(llceil(mTotalTimeDisplay.valueAs<LLUnits::Milliseconds>() / 20.f) * 20.f);
|
||||
}
|
||||
|
||||
void LLFastTimerView::drawBars()
|
||||
|
|
|
|||
|
|
@ -624,7 +624,7 @@ void LLSceneMonitor::dumpToFile(std::string file_name)
|
|||
|
||||
for (S32 frame = 1; frame <= frame_count; frame++)
|
||||
{
|
||||
os << ", " << scene_load_recording.getPrevRecording(frame_count - frame).getMax(*it).getAs<LLUnits::Kibibytes>();
|
||||
os << ", " << scene_load_recording.getPrevRecording(frame_count - frame).getMax(*it).valueAs<LLUnits::Kibibytes>();
|
||||
}
|
||||
|
||||
os << '\n';
|
||||
|
|
|
|||
|
|
@ -504,81 +504,85 @@ private:
|
|||
static const char* sStateDescs[];
|
||||
e_state mState;
|
||||
void setState(e_state new_state);
|
||||
e_write_to_cache_state mWriteToCacheState;
|
||||
LLTextureFetch* mFetcher;
|
||||
|
||||
e_write_to_cache_state mWriteToCacheState;
|
||||
LLTextureFetch* mFetcher;
|
||||
LLPointer<LLImageFormatted> mFormattedImage;
|
||||
LLPointer<LLImageRaw> mRawImage;
|
||||
LLPointer<LLImageRaw> mAuxImage;
|
||||
FTType mFTType;
|
||||
LLUUID mID;
|
||||
LLHost mHost;
|
||||
std::string mUrl;
|
||||
U8 mType;
|
||||
F32 mImagePriority;
|
||||
U32 mWorkPriority;
|
||||
F32 mRequestedPriority;
|
||||
S32 mDesiredDiscard;
|
||||
S32 mSimRequestedDiscard;
|
||||
S32 mRequestedDiscard;
|
||||
S32 mLoadedDiscard;
|
||||
S32 mDecodedDiscard;
|
||||
LLFrameTimer mRequestedTimer;
|
||||
LLFrameTimer mFetchTimer;
|
||||
LLTimer mCacheReadTimer;
|
||||
F32 mCacheReadTime;
|
||||
LLTextureCache::handle_t mCacheReadHandle;
|
||||
LLTextureCache::handle_t mCacheWriteHandle;
|
||||
S32 mRequestedSize;
|
||||
S32 mRequestedOffset;
|
||||
S32 mDesiredSize;
|
||||
S32 mFileSize;
|
||||
S32 mCachedSize;
|
||||
e_request_state mSentRequest;
|
||||
handle_t mDecodeHandle;
|
||||
BOOL mLoaded;
|
||||
BOOL mDecoded;
|
||||
BOOL mWritten;
|
||||
BOOL mNeedsAux;
|
||||
BOOL mHaveAllData;
|
||||
BOOL mInLocalCache;
|
||||
BOOL mInCache;
|
||||
bool mCanUseHTTP ;
|
||||
bool mCanUseNET ; //can get from asset server.
|
||||
S32 mRetryAttempt;
|
||||
S32 mActiveCount;
|
||||
LLCore::HttpStatus mGetStatus;
|
||||
std::string mGetReason;
|
||||
LLPointer<LLImageRaw> mRawImage,
|
||||
mAuxImage;
|
||||
FTType mFTType;
|
||||
LLUUID mID;
|
||||
LLHost mHost;
|
||||
std::string mUrl;
|
||||
U8 mType;
|
||||
F32 mImagePriority;
|
||||
U32 mWorkPriority;
|
||||
F32 mRequestedPriority;
|
||||
S32 mDesiredDiscard,
|
||||
mSimRequestedDiscard,
|
||||
mRequestedDiscard,
|
||||
mLoadedDiscard,
|
||||
mDecodedDiscard;
|
||||
LLFrameTimer mRequestedTimer,
|
||||
mFetchTimer;
|
||||
LLTimer mCacheReadTimer;
|
||||
F32 mCacheReadTime;
|
||||
LLTextureCache::handle_t mCacheReadHandle,
|
||||
mCacheWriteHandle;
|
||||
S32 mRequestedSize,
|
||||
mRequestedOffset,
|
||||
mDesiredSize,
|
||||
mFileSize,
|
||||
mCachedSize;
|
||||
e_request_state mSentRequest;
|
||||
handle_t mDecodeHandle;
|
||||
BOOL mLoaded;
|
||||
BOOL mDecoded;
|
||||
BOOL mWritten;
|
||||
BOOL mNeedsAux;
|
||||
BOOL mHaveAllData;
|
||||
BOOL mInLocalCache;
|
||||
BOOL mInCache;
|
||||
bool mCanUseHTTP,
|
||||
mCanUseNET ; //can get from asset server.
|
||||
S32 mRetryAttempt;
|
||||
S32 mActiveCount;
|
||||
LLCore::HttpStatus mGetStatus;
|
||||
std::string mGetReason;
|
||||
|
||||
// Work Data
|
||||
LLMutex mWorkMutex;
|
||||
LLMutex mWorkMutex;
|
||||
struct PacketData
|
||||
{
|
||||
PacketData(U8* data, S32 size) { mData = data; mSize = size; }
|
||||
PacketData(U8* data, S32 size)
|
||||
: mData(data), mSize(size)
|
||||
{}
|
||||
~PacketData() { clearData(); }
|
||||
void clearData() { delete[] mData; mData = NULL; }
|
||||
U8* mData;
|
||||
U32 mSize;
|
||||
|
||||
U8* mData;
|
||||
U32 mSize;
|
||||
};
|
||||
std::vector<PacketData*> mPackets;
|
||||
S32 mFirstPacket;
|
||||
S32 mLastPacket;
|
||||
U16 mTotalPackets;
|
||||
U8 mImageCodec;
|
||||
std::vector<PacketData*> mPackets;
|
||||
S32 mFirstPacket;
|
||||
S32 mLastPacket;
|
||||
U16 mTotalPackets;
|
||||
U8 mImageCodec;
|
||||
|
||||
LLViewerAssetStats::duration_t mMetricsStartTime;
|
||||
|
||||
LLCore::HttpHandle mHttpHandle; // Handle of any active request
|
||||
LLCore::BufferArray * mHttpBufferArray; // Refcounted pointer to response data
|
||||
int mHttpPolicyClass;
|
||||
bool mHttpActive; // Active request to http library
|
||||
unsigned int mHttpReplySize; // Actual received data size
|
||||
unsigned int mHttpReplyOffset; // Actual received data offset
|
||||
bool mHttpHasResource; // Counts against Fetcher's mHttpSemaphore
|
||||
LLCore::HttpHandle mHttpHandle; // Handle of any active request
|
||||
LLCore::BufferArray * mHttpBufferArray; // Refcounted pointer to response data
|
||||
S32 mHttpPolicyClass;
|
||||
bool mHttpActive; // Active request to http library
|
||||
U32 mHttpReplySize, // Actual received data size
|
||||
mHttpReplyOffset; // Actual received data offset
|
||||
bool mHttpHasResource; // Counts against Fetcher's mHttpSemaphore
|
||||
|
||||
// State history
|
||||
U32 mCacheReadCount;
|
||||
U32 mCacheWriteCount;
|
||||
U32 mResourceWaitCount; // Requests entering WAIT_HTTP_RESOURCE2
|
||||
U32 mCacheReadCount,
|
||||
mCacheWriteCount,
|
||||
mResourceWaitCount; // Requests entering WAIT_HTTP_RESOURCE2
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
@ -2390,7 +2394,7 @@ LLTextureFetch::LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* image
|
|||
mFetcherLocked(FALSE)
|
||||
{
|
||||
mMaxBandwidth = gSavedSettings.getF32("ThrottleBandwidthKBPS");
|
||||
mTextureInfo.setUpLogging(gSavedSettings.getBOOL("LogTextureDownloadsToViewerLog"), gSavedSettings.getBOOL("LogTextureDownloadsToSimulator"), gSavedSettings.getU32("TextureLoggingThreshold"));
|
||||
mTextureInfo.setUpLogging(gSavedSettings.getBOOL("LogTextureDownloadsToViewerLog"), gSavedSettings.getBOOL("LogTextureDownloadsToSimulator"), LLUnits::Bytes::fromValue(gSavedSettings.getU32("TextureLoggingThreshold")));
|
||||
|
||||
LLTextureFetchDebugger::sDebuggerEnabled = gSavedSettings.getBOOL("TextureFetchDebuggerEnabled");
|
||||
if(LLTextureFetchDebugger::isEnabled())
|
||||
|
|
@ -3369,7 +3373,7 @@ bool LLTextureFetch::receiveImagePacket(const LLHost& host, const LLUUID& id, U1
|
|||
|
||||
if (log_to_viewer_log || log_to_sim)
|
||||
{
|
||||
U64 timeNow = LLTimer::getTotalTime();
|
||||
LLUnit<U64, LLUnits::Microseconds> timeNow = LLTimer::getTotalTime();
|
||||
mTextureInfo.setRequestSize(id, worker->mFileSize);
|
||||
mTextureInfo.setRequestCompleteTimeAndLog(id, timeNow);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,26 +29,28 @@
|
|||
#include "lltextureinfo.h"
|
||||
#include "lltexturestats.h"
|
||||
#include "llviewercontrol.h"
|
||||
#include "lltrace.h"
|
||||
|
||||
static LLTrace::CountStatHandle<S32> sTextureDownloadsStarted("texture_downloads_started", "number of texture downloads initiated");
|
||||
static LLTrace::CountStatHandle<S32> sTextureDownloadsCompleted("texture_downloads_completed", "number of texture downloads completed");
|
||||
static LLTrace::CountStatHandle<LLUnit<S32, LLUnits::Bytes> > sTextureDataDownloaded("texture_data_downloaded", "amount of texture data downloaded");
|
||||
static LLTrace::CountStatHandle<LLUnit<U32, LLUnits::Milliseconds> > sTexureDownloadTime("texture_download_time", "amount of time spent fetching textures");
|
||||
|
||||
LLTextureInfo::LLTextureInfo() :
|
||||
mLogTextureDownloadsToViewerLog(false),
|
||||
mLogTextureDownloadsToSimulator(false),
|
||||
mTotalBytes(0),
|
||||
mTotalMilliseconds(0),
|
||||
mTextureDownloadsStarted(0),
|
||||
mTextureDownloadsCompleted(0),
|
||||
mTextureDownloadProtocol("NONE"),
|
||||
mTextureLogThreshold(100 * 1024),
|
||||
mCurrentStatsBundleStartTime(0)
|
||||
mTextureLogThreshold(LLUnits::Kibibytes::fromValue(100))
|
||||
{
|
||||
mTextures.clear();
|
||||
mRecording.start();
|
||||
}
|
||||
|
||||
void LLTextureInfo::setUpLogging(bool writeToViewerLog, bool sendToSim, U32 textureLogThreshold)
|
||||
void LLTextureInfo::setUpLogging(bool writeToViewerLog, bool sendToSim, LLUnit<U32, LLUnits::Bytes> textureLogThreshold)
|
||||
{
|
||||
mLogTextureDownloadsToViewerLog = writeToViewerLog;
|
||||
mLogTextureDownloadsToSimulator = sendToSim;
|
||||
mTextureLogThreshold = textureLogThreshold;
|
||||
mTextureLogThreshold = LLUnit<U32, LLUnits::Bytes>(textureLogThreshold);
|
||||
}
|
||||
|
||||
LLTextureInfo::~LLTextureInfo()
|
||||
|
|
@ -94,7 +96,7 @@ void LLTextureInfo::setRequestStartTime(const LLUUID& id, U64 startTime)
|
|||
addRequest(id);
|
||||
}
|
||||
mTextures[id]->mStartTime = startTime;
|
||||
mTextureDownloadsStarted++;
|
||||
add(sTextureDownloadsStarted, 1);
|
||||
}
|
||||
|
||||
void LLTextureInfo::setRequestSize(const LLUUID& id, U32 size)
|
||||
|
|
@ -124,16 +126,19 @@ void LLTextureInfo::setRequestType(const LLUUID& id, LLTextureInfoDetails::LLReq
|
|||
mTextures[id]->mType = type;
|
||||
}
|
||||
|
||||
void LLTextureInfo::setRequestCompleteTimeAndLog(const LLUUID& id, U64 completeTime)
|
||||
void LLTextureInfo::setRequestCompleteTimeAndLog(const LLUUID& id, LLUnit<U64, LLUnits::Microseconds> completeTime)
|
||||
{
|
||||
if (!has(id))
|
||||
{
|
||||
addRequest(id);
|
||||
}
|
||||
mTextures[id]->mCompleteTime = completeTime;
|
||||
|
||||
LLTextureInfoDetails& details = *mTextures[id];
|
||||
|
||||
details.mCompleteTime = completeTime;
|
||||
|
||||
std::string protocol = "NONE";
|
||||
switch(mTextures[id]->mType)
|
||||
switch(details.mType)
|
||||
{
|
||||
case LLTextureInfoDetails::REQUEST_TYPE_HTTP:
|
||||
protocol = "HTTP";
|
||||
|
|
@ -150,24 +155,23 @@ void LLTextureInfo::setRequestCompleteTimeAndLog(const LLUUID& id, U64 completeT
|
|||
|
||||
if (mLogTextureDownloadsToViewerLog)
|
||||
{
|
||||
llinfos << "texture=" << id
|
||||
<< " start=" << mTextures[id]->mStartTime
|
||||
<< " end=" << mTextures[id]->mCompleteTime
|
||||
<< " size=" << mTextures[id]->mSize
|
||||
<< " offset=" << mTextures[id]->mOffset
|
||||
<< " length_in_ms=" << (mTextures[id]->mCompleteTime - mTextures[id]->mStartTime) / 1000
|
||||
<< " protocol=" << protocol
|
||||
<< llendl;
|
||||
llinfos << "texture=" << id
|
||||
<< " start=" << details.mStartTime
|
||||
<< " end=" << details.mCompleteTime
|
||||
<< " size=" << details.mSize
|
||||
<< " offset=" << details.mOffset
|
||||
<< " length=" << LLUnit<U32, LLUnits::Milliseconds>(details.mCompleteTime - details.mStartTime)
|
||||
<< " protocol=" << protocol
|
||||
<< llendl;
|
||||
}
|
||||
|
||||
if(mLogTextureDownloadsToSimulator)
|
||||
{
|
||||
S32 texture_stats_upload_threshold = mTextureLogThreshold;
|
||||
mTotalBytes += mTextures[id]->mSize;
|
||||
mTotalMilliseconds += mTextures[id]->mCompleteTime - mTextures[id]->mStartTime;
|
||||
mTextureDownloadsCompleted++;
|
||||
add(sTextureDataDownloaded, details.mSize);
|
||||
add(sTexureDownloadTime, details.mCompleteTime - details.mStartTime);
|
||||
add(sTextureDownloadsCompleted, 1);
|
||||
mTextureDownloadProtocol = protocol;
|
||||
if (mTotalBytes >= texture_stats_upload_threshold)
|
||||
if (mRecording.getSum(sTextureDataDownloaded) >= mTextureLogThreshold)
|
||||
{
|
||||
LLSD texture_data;
|
||||
std::stringstream startTime;
|
||||
|
|
@ -189,35 +193,33 @@ LLSD LLTextureInfo::getAverages()
|
|||
{
|
||||
LLSD averagedTextureData;
|
||||
S32 averageDownloadRate;
|
||||
if(mTotalMilliseconds == 0)
|
||||
LLUnit<U32, LLUnits::Milliseconds> download_time = mRecording.getSum(sTexureDownloadTime);
|
||||
if(download_time == 0)
|
||||
{
|
||||
averageDownloadRate = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
averageDownloadRate = (mTotalBytes * 8) / mTotalMilliseconds;
|
||||
averageDownloadRate = mRecording.getSum(sTextureDataDownloaded).valueAs<LLUnits::Bits>() / download_time.valueAs<LLUnits::Seconds>();
|
||||
}
|
||||
|
||||
averagedTextureData["bits_per_second"] = averageDownloadRate;
|
||||
averagedTextureData["bytes_downloaded"] = mTotalBytes;
|
||||
averagedTextureData["texture_downloads_started"] = mTextureDownloadsStarted;
|
||||
averagedTextureData["texture_downloads_completed"] = mTextureDownloadsCompleted;
|
||||
averagedTextureData["transport"] = mTextureDownloadProtocol;
|
||||
averagedTextureData["bits_per_second"] = averageDownloadRate;
|
||||
averagedTextureData["bytes_downloaded"] = mRecording.getSum(sTextureDataDownloaded).valueAs<LLUnits::Bytes>();
|
||||
averagedTextureData["texture_downloads_started"] = mRecording.getSum(sTextureDownloadsStarted);
|
||||
averagedTextureData["texture_downloads_completed"] = mRecording.getSum(sTextureDownloadsCompleted);
|
||||
averagedTextureData["transport"] = mTextureDownloadProtocol;
|
||||
|
||||
return averagedTextureData;
|
||||
}
|
||||
|
||||
void LLTextureInfo::resetTextureStatistics()
|
||||
{
|
||||
mTotalMilliseconds = 0;
|
||||
mTotalBytes = 0;
|
||||
mTextureDownloadsStarted = 0;
|
||||
mTextureDownloadsCompleted = 0;
|
||||
mRecording.restart();
|
||||
mTextureDownloadProtocol = "NONE";
|
||||
mCurrentStatsBundleStartTime = LLTimer::getTotalTime();
|
||||
}
|
||||
|
||||
U32 LLTextureInfo::getRequestStartTime(const LLUUID& id)
|
||||
LLUnit<U32, LLUnits::Microseconds> LLTextureInfo::getRequestStartTime(const LLUUID& id)
|
||||
{
|
||||
if (!has(id))
|
||||
{
|
||||
|
|
@ -230,7 +232,7 @@ U32 LLTextureInfo::getRequestStartTime(const LLUUID& id)
|
|||
}
|
||||
}
|
||||
|
||||
U32 LLTextureInfo::getRequestSize(const LLUUID& id)
|
||||
LLUnit<U32, LLUnits::Bytes> LLTextureInfo::getRequestSize(const LLUUID& id)
|
||||
{
|
||||
if (!has(id))
|
||||
{
|
||||
|
|
@ -269,7 +271,7 @@ LLTextureInfoDetails::LLRequestType LLTextureInfo::getRequestType(const LLUUID&
|
|||
}
|
||||
}
|
||||
|
||||
U32 LLTextureInfo::getRequestCompleteTime(const LLUUID& id)
|
||||
LLUnit<U32, LLUnits::Microseconds> LLTextureInfo::getRequestCompleteTime(const LLUUID& id)
|
||||
{
|
||||
if (!has(id))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@
|
|||
|
||||
#include "lluuid.h"
|
||||
#include "lltextureinfodetails.h"
|
||||
#include "lltracerecording.h"
|
||||
#include <map>
|
||||
|
||||
class LLTextureInfo
|
||||
|
|
@ -37,18 +38,18 @@ public:
|
|||
LLTextureInfo();
|
||||
~LLTextureInfo();
|
||||
|
||||
void setUpLogging(bool writeToViewerLog, bool sendToSim, U32 textureLogThreshold);
|
||||
void setUpLogging(bool writeToViewerLog, bool sendToSim, LLUnit<U32, LLUnits::Bytes> textureLogThreshold);
|
||||
bool has(const LLUUID& id);
|
||||
void setRequestStartTime(const LLUUID& id, U64 startTime);
|
||||
void setRequestSize(const LLUUID& id, U32 size);
|
||||
void setRequestOffset(const LLUUID& id, U32 offset);
|
||||
void setRequestType(const LLUUID& id, LLTextureInfoDetails::LLRequestType type);
|
||||
void setRequestCompleteTimeAndLog(const LLUUID& id, U64 completeTime);
|
||||
U32 getRequestStartTime(const LLUUID& id);
|
||||
U32 getRequestSize(const LLUUID& id);
|
||||
void setRequestCompleteTimeAndLog(const LLUUID& id, LLUnit<U64, LLUnits::Microseconds> completeTime);
|
||||
LLUnit<U32, LLUnits::Microseconds>getRequestStartTime(const LLUUID& id);
|
||||
LLUnit<U32, LLUnits::Bytes> getRequestSize(const LLUUID& id);
|
||||
U32 getRequestOffset(const LLUUID& id);
|
||||
LLTextureInfoDetails::LLRequestType getRequestType(const LLUUID& id);
|
||||
U32 getRequestCompleteTime(const LLUUID& id);
|
||||
LLUnit<U32, LLUnits::Microseconds> getRequestCompleteTime(const LLUUID& id);
|
||||
void resetTextureStatistics();
|
||||
U32 getTextureInfoMapSize();
|
||||
LLSD getAverages();
|
||||
|
|
@ -56,19 +57,14 @@ public:
|
|||
private:
|
||||
void addRequest(const LLUUID& id);
|
||||
|
||||
std::map<LLUUID, LLTextureInfoDetails *> mTextures;
|
||||
|
||||
LLSD mAverages;
|
||||
|
||||
bool mLogTextureDownloadsToViewerLog;
|
||||
bool mLogTextureDownloadsToSimulator;
|
||||
S32 mTotalBytes;
|
||||
S32 mTotalMilliseconds;
|
||||
S32 mTextureDownloadsStarted;
|
||||
S32 mTextureDownloadsCompleted;
|
||||
std::string mTextureDownloadProtocol;
|
||||
U32 mTextureLogThreshold; // in bytes
|
||||
U64 mCurrentStatsBundleStartTime;
|
||||
std::map<LLUUID, LLTextureInfoDetails *> mTextures;
|
||||
LLSD mAverages;
|
||||
bool mLogTextureDownloadsToViewerLog,
|
||||
mLogTextureDownloadsToSimulator;
|
||||
std::string mTextureDownloadProtocol;
|
||||
LLUnit<U32, LLUnits::Bytes> mTextureLogThreshold;
|
||||
LLUnit<U64, LLUnits::Microseconds> mCurrentStatsBundleStartTime;
|
||||
LLTrace::Recording mRecording;
|
||||
};
|
||||
|
||||
#endif // LL_LLTEXTUREINFO_H
|
||||
|
|
|
|||
|
|
@ -28,7 +28,9 @@
|
|||
|
||||
#include "lltextureinfodetails.h"
|
||||
|
||||
LLTextureInfoDetails::LLTextureInfoDetails() : mStartTime(0), mCompleteTime(0), mSize(0), mType(REQUEST_TYPE_NONE), mOffset(0)
|
||||
LLTextureInfoDetails::LLTextureInfoDetails()
|
||||
: mType(REQUEST_TYPE_NONE),
|
||||
mOffset(0)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -28,10 +28,10 @@
|
|||
#define LL_LLTEXTUREINFODETAILS_H
|
||||
|
||||
#include "lluuid.h"
|
||||
#include "llunit.h"
|
||||
|
||||
class LLTextureInfoDetails
|
||||
struct LLTextureInfoDetails
|
||||
{
|
||||
public:
|
||||
enum LLRequestType
|
||||
{
|
||||
REQUEST_TYPE_NONE,
|
||||
|
|
@ -39,11 +39,11 @@ public:
|
|||
REQUEST_TYPE_UDP
|
||||
};
|
||||
|
||||
U32 mStartTime;
|
||||
U32 mCompleteTime;
|
||||
U32 mOffset;
|
||||
U32 mSize;
|
||||
LLRequestType mType;
|
||||
LLUnit<U32, LLUnits::Microseconds> mStartTime,
|
||||
mCompleteTime;
|
||||
U32 mOffset;
|
||||
LLUnit<U32, LLUnits::Bytes> mSize;
|
||||
LLRequestType mType;
|
||||
|
||||
LLTextureInfoDetails();
|
||||
};
|
||||
|
|
|
|||
|
|
@ -48,8 +48,7 @@ void send_texture_stats_to_sim(const LLSD &texture_stats)
|
|||
texture_stats_report["stats_data"] = texture_stats;
|
||||
|
||||
std::string texture_cap_url = gAgent.getRegion()->getCapability("TextureStats");
|
||||
LLTextureStatsUploader tsu;
|
||||
llinfos << "uploading texture stats data to simulator" << llendl;
|
||||
tsu.uploadStatsToSimulator(texture_cap_url, texture_stats);
|
||||
LLTextureStatsUploader::uploadStatsToSimulator(texture_cap_url, texture_stats);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -30,14 +30,8 @@
|
|||
|
||||
#include "llhttpclient.h"
|
||||
|
||||
LLTextureStatsUploader::LLTextureStatsUploader()
|
||||
{
|
||||
}
|
||||
|
||||
LLTextureStatsUploader::~LLTextureStatsUploader()
|
||||
{
|
||||
}
|
||||
|
||||
// static
|
||||
void LLTextureStatsUploader::uploadStatsToSimulator(const std::string texture_cap_url, const LLSD &texture_stats)
|
||||
{
|
||||
if ( texture_cap_url != "" )
|
||||
|
|
|
|||
|
|
@ -34,9 +34,7 @@
|
|||
class LLTextureStatsUploader
|
||||
{
|
||||
public:
|
||||
LLTextureStatsUploader();
|
||||
~LLTextureStatsUploader();
|
||||
void uploadStatsToSimulator(const std::string texture_cap_url, const LLSD &texture_stats);
|
||||
static void uploadStatsToSimulator(const std::string texture_cap_url, const LLSD &texture_stats);
|
||||
};
|
||||
|
||||
#endif // LL_LLTEXTURESTATSUPLOADER_H
|
||||
|
|
|
|||
|
|
@ -291,9 +291,9 @@ F32 gAveLandCompression = 0.f,
|
|||
gWorstWaterCompression = 0.f;
|
||||
|
||||
LLUnit<U32, LLUnits::Bytes> gTotalWorldData = 0,
|
||||
gTotalObjectData = 0,
|
||||
gTotalTextureData = 0;
|
||||
U32 gSimPingCount = 0;
|
||||
gTotalObjectData = 0,
|
||||
gTotalTextureData = 0;
|
||||
U32 gSimPingCount = 0;
|
||||
LLUnit<U32, LLUnits::Bits> gObjectData = 0;
|
||||
F32 gAvgSimPing = 0.f;
|
||||
LLUnit<U32, LLUnits::Bytes> gTotalTextureBytesPerBoostLevel[LLViewerTexture::MAX_GL_IMAGE_CATEGORY] = {0};
|
||||
|
|
@ -353,7 +353,7 @@ void update_statistics()
|
|||
}
|
||||
else
|
||||
{
|
||||
sample(LLStatViewer::SIM_PING, LLUnit<F64, LLUnits::Seconds>(10));
|
||||
sample(LLStatViewer::SIM_PING, LLUnits::Seconds::fromValue(10));
|
||||
}
|
||||
|
||||
if (LLViewerStats::instance().getRecording().getSum(LLStatViewer::FPS))
|
||||
|
|
@ -403,7 +403,7 @@ void update_statistics()
|
|||
static LLFrameTimer texture_stats_timer;
|
||||
if (texture_stats_timer.getElapsedTimeF32() >= texture_stats_freq)
|
||||
{
|
||||
gTotalTextureData = LLUnit<F64, LLUnits::Bytes>(LLViewerStats::instance().getRecording().getSum(LLStatViewer::TEXTURE_KBIT));
|
||||
gTotalTextureData = LLViewerStats::instance().getRecording().getSum(LLStatViewer::TEXTURE_KBIT);
|
||||
texture_stats_timer.reset();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue