summaryrefslogtreecommitdiff
path: root/indra/newview/llviewerassetstats.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llviewerassetstats.cpp')
-rwxr-xr-xindra/newview/llviewerassetstats.cpp627
1 files changed, 375 insertions, 252 deletions
diff --git a/indra/newview/llviewerassetstats.cpp b/indra/newview/llviewerassetstats.cpp
index cc15d6433f..0b820f866e 100755
--- a/indra/newview/llviewerassetstats.cpp
+++ b/indra/newview/llviewerassetstats.cpp
@@ -31,6 +31,8 @@
#include "stdtypes.h"
#include "llvoavatar.h"
+#include "llsdparam.h"
+#include "llsdutil.h"
/*
* Classes and utility functions for per-thread and per-region
@@ -78,6 +80,152 @@
*
*/
+namespace LLViewerAssetStatsFF
+{
+ static EViewerAssetCategories asset_type_to_category(const LLViewerAssetType::EType at, bool with_http, bool is_temp)
+ {
+ // For statistical purposes, we divide GETs into several
+ // populations of asset fetches:
+ // - textures which are de-prioritized in the asset system
+ // - wearables (clothing, bodyparts) which directly affect
+ // user experiences when they log in
+ // - sounds
+ // - gestures
+ // - everything else.
+ //
+ llassert_always(50 == LLViewerAssetType::AT_COUNT);
+
+ // Multiple asset definitions are floating around so this requires some
+ // maintenance and attention.
+ static const EViewerAssetCategories asset_to_bin_map[LLViewerAssetType::AT_COUNT] =
+ {
+ EVACTextureTempHTTPGet, // (0) AT_TEXTURE
+ EVACSoundUDPGet, // AT_SOUND
+ EVACOtherGet, // AT_CALLINGCARD
+ EVACOtherGet, // AT_LANDMARK
+ EVACOtherGet, // AT_SCRIPT
+ EVACWearableUDPGet, // AT_CLOTHING
+ EVACOtherGet, // AT_OBJECT
+ EVACOtherGet, // AT_NOTECARD
+ EVACOtherGet, // AT_CATEGORY
+ EVACOtherGet, // AT_ROOT_CATEGORY
+ EVACOtherGet, // (10) AT_LSL_TEXT
+ EVACOtherGet, // AT_LSL_BYTECODE
+ EVACOtherGet, // AT_TEXTURE_TGA
+ EVACWearableUDPGet, // AT_BODYPART
+ EVACOtherGet, // AT_TRASH
+ EVACOtherGet, // AT_SNAPSHOT_CATEGORY
+ EVACOtherGet, // AT_LOST_AND_FOUND
+ EVACSoundUDPGet, // AT_SOUND_WAV
+ EVACOtherGet, // AT_IMAGE_TGA
+ EVACOtherGet, // AT_IMAGE_JPEG
+ EVACGestureUDPGet, // (20) AT_ANIMATION
+ EVACGestureUDPGet, // AT_GESTURE
+ EVACOtherGet, // AT_SIMSTATE
+ EVACOtherGet, // AT_FAVORITE
+ EVACOtherGet, // AT_LINK
+ EVACOtherGet, // AT_LINK_FOLDER
+ EVACOtherGet, //
+ EVACOtherGet, //
+ EVACOtherGet, //
+ EVACOtherGet, //
+ EVACOtherGet, // (30)
+ EVACOtherGet, //
+ EVACOtherGet, //
+ EVACOtherGet, //
+ EVACOtherGet, //
+ EVACOtherGet, //
+ EVACOtherGet, //
+ EVACOtherGet, //
+ EVACOtherGet, //
+ EVACOtherGet, //
+ EVACOtherGet, // (40)
+ EVACOtherGet, //
+ EVACOtherGet, //
+ EVACOtherGet, //
+ EVACOtherGet, //
+ EVACOtherGet, //
+ EVACOtherGet, //
+ EVACOtherGet, //
+ EVACOtherGet, //
+ EVACOtherGet, // AT_MESH
+ // (50)
+ };
+
+ if (at < 0 || at >= LLViewerAssetType::AT_COUNT)
+ {
+ return EVACOtherGet;
+ }
+ EViewerAssetCategories ret(asset_to_bin_map[at]);
+ if (EVACTextureTempHTTPGet == ret)
+ {
+ // Indexed with [is_temp][with_http]
+ static const EViewerAssetCategories texture_bin_map[2][2] =
+ {
+ {
+ EVACTextureNonTempUDPGet,
+ EVACTextureNonTempHTTPGet,
+ },
+ {
+ EVACTextureTempUDPGet,
+ EVACTextureTempHTTPGet,
+ }
+ };
+
+ ret = texture_bin_map[is_temp][with_http];
+ }
+ return ret;
+ }
+ static LLTrace::Count<> sEnqueued[EVACCount] = {LLTrace::Count<>("enqueuedassetrequeststemptexturehttp",
+ "Number of temporary texture asset http requests enqueued"),
+ LLTrace::Count<>("enqueuedassetrequeststemptextureudp",
+ "Number of temporary texture asset udp requests enqueued"),
+ LLTrace::Count<>("enqueuedassetrequestsnontemptexturehttp",
+ "Number of texture asset http requests enqueued"),
+ LLTrace::Count<>("enqueuedassetrequestsnontemptextureudp",
+ "Number of texture asset udp requests enqueued"),
+ LLTrace::Count<>("enqueuedassetrequestswearableudp",
+ "Number of wearable asset requests enqueued"),
+ LLTrace::Count<>("enqueuedassetrequestssoundudp",
+ "Number of sound asset requests enqueued"),
+ LLTrace::Count<>("enqueuedassetrequestsgestureudp",
+ "Number of gesture asset requests enqueued"),
+ LLTrace::Count<>("enqueuedassetrequestsother",
+ "Number of other asset requests enqueued")};
+
+ static LLTrace::Count<> sDequeued[EVACCount] = {LLTrace::Count<>("dequeuedassetrequeststemptexturehttp",
+ "Number of temporary texture asset http requests dequeued"),
+ LLTrace::Count<>("dequeuedassetrequeststemptextureudp",
+ "Number of temporary texture asset udp requests dequeued"),
+ LLTrace::Count<>("dequeuedassetrequestsnontemptexturehttp",
+ "Number of texture asset http requests dequeued"),
+ LLTrace::Count<>("dequeuedassetrequestsnontemptextureudp",
+ "Number of texture asset udp requests dequeued"),
+ LLTrace::Count<>("dequeuedassetrequestswearableudp",
+ "Number of wearable asset requests dequeued"),
+ LLTrace::Count<>("dequeuedassetrequestssoundudp",
+ "Number of sound asset requests dequeued"),
+ LLTrace::Count<>("dequeuedassetrequestsgestureudp",
+ "Number of gesture asset requests dequeued"),
+ LLTrace::Count<>("dequeuedassetrequestsother",
+ "Number of other asset requests dequeued")};
+ static LLTrace::Measurement<LLTrace::Seconds> sResponse[EVACCount] = {LLTrace::Measurement<LLTrace::Seconds>("assetresponsetimestemptexturehttp",
+ "Time spent responding to temporary texture asset http requests"),
+ LLTrace::Measurement<LLTrace::Seconds>("assetresponsetimestemptextureudp",
+ "Time spent responding to temporary texture asset udp requests"),
+ LLTrace::Measurement<LLTrace::Seconds>("assetresponsetimesnontemptexturehttp",
+ "Time spent responding to texture asset http requests"),
+ LLTrace::Measurement<LLTrace::Seconds>("assetresponsetimesnontemptextureudp",
+ "Time spent responding to texture asset udp requests"),
+ LLTrace::Measurement<LLTrace::Seconds>("assetresponsetimeswearableudp",
+ "Time spent responding to wearable asset requests"),
+ LLTrace::Measurement<LLTrace::Seconds>("assetresponsetimessoundudp",
+ "Time spent responding to sound asset requests"),
+ LLTrace::Measurement<LLTrace::Seconds>("assetresponsetimesgestureudp",
+ "Time spent responding to gesture asset requests"),
+ LLTrace::Measurement<LLTrace::Seconds>("assetresponsetimesother",
+ "Time spent responding to other asset requests")};
+}
// ------------------------------------------------------
// Global data definitions
@@ -88,7 +236,8 @@ LLViewerAssetStats * gViewerAssetStats(0);
// LLViewerAssetStats class definition
// ------------------------------------------------------
LLViewerAssetStats::LLViewerAssetStats()
- : mRegionHandle(U64(0))
+: mRegionHandle(U64(0)),
+ mCurRecording(NULL)
{
reset();
}
@@ -110,7 +259,10 @@ void LLViewerAssetStats::reset()
mRegionRecordings.clear();
// initialize new recording for current region
- mCurRecording = &mRegionRecordings[mRegionHandle];
+ if (mRegionHandle)
+ {
+ mCurRecording = &mRegionRecordings[mRegionHandle];
+ }
}
void LLViewerAssetStats::setRegion(region_handle_t region_handle)
@@ -121,9 +273,15 @@ void LLViewerAssetStats::setRegion(region_handle_t region_handle)
return;
}
- mCurRecording->stop();
- mCurRecording = &mRegionRecordings[region_handle];
- mCurRecording->start();
+ if (mCurRecording)
+ {
+ mCurRecording->pause();
+ }
+ if (region_handle)
+ {
+ mCurRecording = &mRegionRecordings[region_handle];
+ mCurRecording->start();
+ }
mRegionHandle = region_handle;
}
@@ -136,116 +294,169 @@ void LLViewerAssetStats::recordAvatarStats()
mPhaseStats["cloud-or-gray"] = LLViewerStats::PhaseMap::getPhaseStats("cloud-or-gray");
}
-struct AssetRequestType : public LLInitParam::Block<AssetRequestType>
+void LLViewerAssetStats::getStats(AssetStats& stats, bool compact_output)
{
- Optional<S32> enqueued,
- dequeued,
- resp_count;
- Optional<F64> resp_min,
- resp_max,
- resp_mean;
+ using namespace LLViewerAssetStatsFF;
+
+ if (mCurRecording)
+ {
+ mCurRecording->update();
+ }
- AssetRequestType()
- : enqueued("enqueued"),
- dequeued("dequeued"),
- resp_count("resp_count"),
- resp_min("resp_min"),
- resp_max("resp_max"),
- resp_mean("resp_mean")
- {}
-};
-
-struct FPSStats : public LLInitParam::Block<FPSStats>
-{
- Optional<S32> count;
- Optional<F64> min,
- max,
- mean;
- FPSStats()
- : count("count"),
- min("min"),
- max("max"),
- mean("mean")
- {}
-};
-
-struct RegionStats : public LLInitParam::Block<RegionStats>
-{
- Optional<AssetRequestType> get_texture_temp_http,
- get_texture_temp_udp,
- get_texture_non_temp_http,
- get_texture_non_temp_udp,
- get_wearable_udp,
- get_sound_udp,
- get_gesture_udp,
- get_other;
- Optional<FPSStats> fps;
- Mandatory<S32> grid_x,
- grid_y;
- Mandatory<F64> duration;
-
- RegionStats()
- : get_texture_temp_http("get_texture_temp_http"),
- get_texture_temp_udp("get_texture_temp_udp"),
- get_texture_non_temp_http("get_texture_non_temp_http"),
- get_texture_non_temp_udp("get_texture_non_temp_udp"),
- get_wearable_udp("get_wearable_udp"),
- get_sound_udp("get_sound_udp"),
- get_gesture_udp("get_gesture_udp"),
- get_other("get_other"),
- fps("fps"),
- grid_x("grid_x"),
- grid_y("grid_y"),
- duration("duration")
- {}
-};
-
-struct AvatarRezState : public LLInitParam::Block<AvatarRezState>
-{
- Mandatory<S32> cloud,
- gray,
- textured;
- AvatarRezState()
- : cloud("cloud"),
- gray("gray"),
- textured("textured")
- {}
-};
-
-struct AvatarPhaseStats : public LLInitParam::Block<AvatarPhaseStats>
-{
- Mandatory<LLSD> cloud,
- cloud_or_gray;
+ if (mRegionRecordings.empty())
+ {
+ stats.regions.add().empty.setProvided();
+ }
+ else
+ {
+ for (PerRegionRecordingContainer::iterator it = mRegionRecordings.begin(), end_it = mRegionRecordings.end();
+ it != end_it;
+ ++it)
+ {
+ RegionStats& r = stats.regions.add();
+ LLTrace::Recording& rec = it->second;
+ if (!compact_output
+ || rec.getSum(sEnqueued[EVACTextureTempHTTPGet])
+ || rec.getSum(sDequeued[EVACTextureTempHTTPGet])
+ || rec.getSum(sResponse[EVACTextureTempHTTPGet]).value())
+ {
+ r.get_texture_temp_http .enqueued(rec.getSum(sEnqueued[EVACTextureTempHTTPGet]))
+ .dequeued(rec.getSum(sDequeued[EVACTextureTempHTTPGet]))
+ .resp_count(rec.getSum(sResponse[EVACTextureTempHTTPGet]).value())
+ .resp_min(rec.getMin(sResponse[EVACTextureTempHTTPGet]).value())
+ .resp_max(rec.getMax(sResponse[EVACTextureTempHTTPGet]).value())
+ .resp_mean(rec.getMean(sResponse[EVACTextureTempHTTPGet]).value());
+ }
+ if (!compact_output
+ || rec.getSum(sEnqueued[EVACTextureTempUDPGet])
+ || rec.getSum(sDequeued[EVACTextureTempUDPGet])
+ || rec.getSum(sResponse[EVACTextureTempUDPGet]).value())
+ {
+ r.get_texture_temp_udp .enqueued(rec.getSum(sEnqueued[EVACTextureTempUDPGet]))
+ .dequeued(rec.getSum(sDequeued[EVACTextureTempUDPGet]))
+ .resp_count(rec.getSum(sResponse[EVACTextureTempUDPGet]).value())
+ .resp_min(rec.getMin(sResponse[EVACTextureTempUDPGet]).value())
+ .resp_max(rec.getMax(sResponse[EVACTextureTempUDPGet]).value())
+ .resp_mean(rec.getMean(sResponse[EVACTextureTempUDPGet]).value());
+ }
+ if (!compact_output
+ || rec.getSum(sEnqueued[EVACTextureNonTempHTTPGet])
+ || rec.getSum(sDequeued[EVACTextureNonTempHTTPGet])
+ || rec.getSum(sResponse[EVACTextureNonTempHTTPGet]).value())
+ {
+ r.get_texture_non_temp_http .enqueued(rec.getSum(sEnqueued[EVACTextureNonTempHTTPGet]))
+ .dequeued(rec.getSum(sDequeued[EVACTextureNonTempHTTPGet]))
+ .resp_count(rec.getSum(sResponse[EVACTextureNonTempHTTPGet]).value())
+ .resp_min(rec.getMin(sResponse[EVACTextureNonTempHTTPGet]).value())
+ .resp_max(rec.getMax(sResponse[EVACTextureNonTempHTTPGet]).value())
+ .resp_mean(rec.getMean(sResponse[EVACTextureNonTempHTTPGet]).value());
+ }
+
+ if (!compact_output
+ || rec.getSum(sEnqueued[EVACTextureNonTempUDPGet])
+ || rec.getSum(sDequeued[EVACTextureNonTempUDPGet])
+ || rec.getSum(sResponse[EVACTextureNonTempUDPGet]).value())
+ {
+ r.get_texture_non_temp_udp .enqueued(rec.getSum(sEnqueued[EVACTextureNonTempUDPGet]))
+ .dequeued(rec.getSum(sDequeued[EVACTextureNonTempUDPGet]))
+ .resp_count(rec.getSum(sResponse[EVACTextureNonTempUDPGet]).value())
+ .resp_min(rec.getMin(sResponse[EVACTextureNonTempUDPGet]).value())
+ .resp_max(rec.getMax(sResponse[EVACTextureNonTempUDPGet]).value())
+ .resp_mean(rec.getMean(sResponse[EVACTextureNonTempUDPGet]).value());
+ }
+
+ if (!compact_output
+ || rec.getSum(sEnqueued[EVACWearableUDPGet])
+ || rec.getSum(sDequeued[EVACWearableUDPGet])
+ || rec.getSum(sResponse[EVACWearableUDPGet]).value())
+ {
+ r.get_wearable_udp .enqueued(rec.getSum(sEnqueued[EVACWearableUDPGet]))
+ .dequeued(rec.getSum(sDequeued[EVACWearableUDPGet]))
+ .resp_count(rec.getSum(sResponse[EVACWearableUDPGet]).value())
+ .resp_min(rec.getMin(sResponse[EVACWearableUDPGet]).value())
+ .resp_max(rec.getMax(sResponse[EVACWearableUDPGet]).value())
+ .resp_mean(rec.getMean(sResponse[EVACWearableUDPGet]).value());
+ }
+
+ if (!compact_output
+ || rec.getSum(sEnqueued[EVACSoundUDPGet])
+ || rec.getSum(sDequeued[EVACSoundUDPGet])
+ || rec.getSum(sResponse[EVACSoundUDPGet]).value())
+ {
+ r.get_sound_udp .enqueued(rec.getSum(sEnqueued[EVACSoundUDPGet]))
+ .dequeued(rec.getSum(sDequeued[EVACSoundUDPGet]))
+ .resp_count(rec.getSum(sResponse[EVACSoundUDPGet]).value())
+ .resp_min(rec.getMin(sResponse[EVACSoundUDPGet]).value())
+ .resp_max(rec.getMax(sResponse[EVACSoundUDPGet]).value())
+ .resp_mean(rec.getMean(sResponse[EVACSoundUDPGet]).value());
+ }
+
+ if (!compact_output
+ || rec.getSum(sEnqueued[EVACGestureUDPGet])
+ || rec.getSum(sDequeued[EVACGestureUDPGet])
+ || rec.getSum(sResponse[EVACGestureUDPGet]).value())
+ {
+ r.get_gesture_udp .enqueued(rec.getSum(sEnqueued[EVACGestureUDPGet]))
+ .dequeued(rec.getSum(sDequeued[EVACGestureUDPGet]))
+ .resp_count(rec.getSum(sResponse[EVACGestureUDPGet]).value())
+ .resp_min(rec.getMin(sResponse[EVACGestureUDPGet]).value())
+ .resp_max(rec.getMax(sResponse[EVACGestureUDPGet]).value())
+ .resp_mean(rec.getMean(sResponse[EVACGestureUDPGet]).value());
+ }
+
+ if (!compact_output
+ || rec.getSum(sEnqueued[EVACOtherGet])
+ || rec.getSum(sDequeued[EVACOtherGet])
+ || rec.getSum(sResponse[EVACOtherGet]).value())
+ {
+ r.get_other .enqueued(rec.getSum(sEnqueued[EVACOtherGet]))
+ .dequeued(rec.getSum(sDequeued[EVACOtherGet]))
+ .resp_count(rec.getSum(sResponse[EVACOtherGet]).value())
+ .resp_min(rec.getMin(sResponse[EVACOtherGet]).value())
+ .resp_max(rec.getMax(sResponse[EVACOtherGet]).value())
+ .resp_mean(rec.getMean(sResponse[EVACOtherGet]).value());
+ }
+
+ S32 fps = rec.getSum(LLStatViewer::FPS_SAMPLE);
+ if (!compact_output || fps != 0)
+ {
+ r.fps.count(fps);
+ r.fps.min(rec.getMin(LLStatViewer::FPS_SAMPLE));
+ r.fps.max(rec.getMax(LLStatViewer::FPS_SAMPLE));
+ r.fps.mean(rec.getMean(LLStatViewer::FPS_SAMPLE));
+ }
+ U32 grid_x(0), grid_y(0);
+ grid_from_region_handle(it->first, &grid_x, &grid_y);
+ r.grid_x(grid_x);
+ r.grid_y(grid_y);
+ r.duration(LLUnit::Microseconds<F64>(rec.getDuration()).value());
+ }
+ }
- AvatarPhaseStats()
- : cloud("cloud"),
- cloud_or_gray("cloud-or-gray")
- {}
-};
+ stats.duration(mCurRecording ? LLUnit::Microseconds<F64>(mCurRecording->getDuration()).value() : 0.0);
+ //stats.avatar.setProvided(true);
-struct AvatarInfo : public LLInitParam::Block<AvatarInfo>
-{
- Mandatory<AvatarRezState> nearby;
- Mandatory<AvatarPhaseStats> phase_stats;
+ for (S32 rez_stat=0; rez_stat < mAvatarRezStates.size(); ++rez_stat)
+ {
+ stats.avatar.nearby .cloud(mAvatarRezStates[0])
+ .gray(mAvatarRezStates[1])
+ .textured(mAvatarRezStates[2]);
+ }
- AvatarInfo()
- : nearby("nearby"),
- phase_stats("phase_stats")
- {}
-};
+ stats.avatar.phase_stats .cloud(mPhaseStats["cloud"].asLLSD())
+ .cloud_or_gray(mPhaseStats["cloud-or-gray"].asLLSD());
+}
-struct AssetStats : public LLInitParam::Block<AssetStats>
+LLSD LLViewerAssetStats::asLLSD(bool compact_output)
{
- Multiple<RegionStats> regions;
- Mandatory<F64> duration;
-
- AssetStats()
- : regions("regions"),
- duration("duration")
- {}
-
-};
-
+ LLParamSDParser parser;
+ LLSD sd;
+ AssetStats stats;
+ getStats(stats, compact_output);
+ parser.writeSD(sd, stats);
+ llinfos << ll_pretty_print_sd(sd) << llendl;
+ return sd;
+}
//LLSD LLViewerAssetStats::asLLSD(bool compact_output)
//{
// // Top-level tags
@@ -358,150 +569,6 @@ struct AssetStats : public LLInitParam::Block<AssetStats>
namespace LLViewerAssetStatsFF
{
- static EViewerAssetCategories asset_type_to_category(const LLViewerAssetType::EType at, bool with_http, bool is_temp)
- {
- // For statistical purposes, we divide GETs into several
- // populations of asset fetches:
- // - textures which are de-prioritized in the asset system
- // - wearables (clothing, bodyparts) which directly affect
- // user experiences when they log in
- // - sounds
- // - gestures
- // - everything else.
- //
- llassert_always(50 == LLViewerAssetType::AT_COUNT);
-
- // Multiple asset definitions are floating around so this requires some
- // maintenance and attention.
- static const EViewerAssetCategories asset_to_bin_map[LLViewerAssetType::AT_COUNT] =
- {
- EVACTextureTempHTTPGet, // (0) AT_TEXTURE
- EVACSoundUDPGet, // AT_SOUND
- EVACOtherGet, // AT_CALLINGCARD
- EVACOtherGet, // AT_LANDMARK
- EVACOtherGet, // AT_SCRIPT
- EVACWearableUDPGet, // AT_CLOTHING
- EVACOtherGet, // AT_OBJECT
- EVACOtherGet, // AT_NOTECARD
- EVACOtherGet, // AT_CATEGORY
- EVACOtherGet, // AT_ROOT_CATEGORY
- EVACOtherGet, // (10) AT_LSL_TEXT
- EVACOtherGet, // AT_LSL_BYTECODE
- EVACOtherGet, // AT_TEXTURE_TGA
- EVACWearableUDPGet, // AT_BODYPART
- EVACOtherGet, // AT_TRASH
- EVACOtherGet, // AT_SNAPSHOT_CATEGORY
- EVACOtherGet, // AT_LOST_AND_FOUND
- EVACSoundUDPGet, // AT_SOUND_WAV
- EVACOtherGet, // AT_IMAGE_TGA
- EVACOtherGet, // AT_IMAGE_JPEG
- EVACGestureUDPGet, // (20) AT_ANIMATION
- EVACGestureUDPGet, // AT_GESTURE
- EVACOtherGet, // AT_SIMSTATE
- EVACOtherGet, // AT_FAVORITE
- EVACOtherGet, // AT_LINK
- EVACOtherGet, // AT_LINK_FOLDER
- EVACOtherGet, //
- EVACOtherGet, //
- EVACOtherGet, //
- EVACOtherGet, //
- EVACOtherGet, // (30)
- EVACOtherGet, //
- EVACOtherGet, //
- EVACOtherGet, //
- EVACOtherGet, //
- EVACOtherGet, //
- EVACOtherGet, //
- EVACOtherGet, //
- EVACOtherGet, //
- EVACOtherGet, //
- EVACOtherGet, // (40)
- EVACOtherGet, //
- EVACOtherGet, //
- EVACOtherGet, //
- EVACOtherGet, //
- EVACOtherGet, //
- EVACOtherGet, //
- EVACOtherGet, //
- EVACOtherGet, //
- EVACOtherGet, // AT_MESH
- // (50)
- };
-
- if (at < 0 || at >= LLViewerAssetType::AT_COUNT)
- {
- return EVACOtherGet;
- }
- EViewerAssetCategories ret(asset_to_bin_map[at]);
- if (EVACTextureTempHTTPGet == ret)
- {
- // Indexed with [is_temp][with_http]
- static const EViewerAssetCategories texture_bin_map[2][2] =
- {
- {
- EVACTextureNonTempUDPGet,
- EVACTextureNonTempHTTPGet,
- },
- {
- EVACTextureTempUDPGet,
- EVACTextureTempHTTPGet,
- }
- };
-
- ret = texture_bin_map[is_temp][with_http];
- }
- return ret;
- }
-static LLTrace::Count<> sEnqueued[EVACCount] = {LLTrace::Count<>("enqueuedassetrequeststemptexturehttp",
- "Number of temporary texture asset http requests enqueued"),
- LLTrace::Count<>("enqueuedassetrequeststemptextureudp",
- "Number of temporary texture asset udp requests enqueued"),
- LLTrace::Count<>("enqueuedassetrequestsnontemptexturehttp",
- "Number of texture asset http requests enqueued"),
- LLTrace::Count<>("enqueuedassetrequestsnontemptextureudp",
- "Number of texture asset udp requests enqueued"),
- LLTrace::Count<>("enqueuedassetrequestswearableudp",
- "Number of wearable asset requests enqueued"),
- LLTrace::Count<>("enqueuedassetrequestssoundudp",
- "Number of sound asset requests enqueued"),
- LLTrace::Count<>("enqueuedassetrequestsgestureudp",
- "Number of gesture asset requests enqueued"),
- LLTrace::Count<>("enqueuedassetrequestsother",
- "Number of other asset requests enqueued")};
-
-static LLTrace::Count<> sDequeued[EVACCount] = {LLTrace::Count<>("dequeuedassetrequeststemptexturehttp",
- "Number of temporary texture asset http requests dequeued"),
- LLTrace::Count<>("dequeuedassetrequeststemptextureudp",
- "Number of temporary texture asset udp requests dequeued"),
- LLTrace::Count<>("dequeuedassetrequestsnontemptexturehttp",
- "Number of texture asset http requests dequeued"),
- LLTrace::Count<>("dequeuedassetrequestsnontemptextureudp",
- "Number of texture asset udp requests dequeued"),
- LLTrace::Count<>("dequeuedassetrequestswearableudp",
- "Number of wearable asset requests dequeued"),
- LLTrace::Count<>("dequeuedassetrequestssoundudp",
- "Number of sound asset requests dequeued"),
- LLTrace::Count<>("dequeuedassetrequestsgestureudp",
- "Number of gesture asset requests dequeued"),
- LLTrace::Count<>("dequeuedassetrequestsother",
- "Number of other asset requests dequeued")};
-static LLTrace::Measurement<LLTrace::Seconds> sResponse[EVACCount] = {LLTrace::Measurement<LLTrace::Seconds>("assetresponsetimestemptexturehttp",
- "Time spent responding to temporary texture asset http requests"),
- LLTrace::Measurement<LLTrace::Seconds>("assetresponsetimestemptextureudp",
- "Time spent responding to temporary texture asset udp requests"),
- LLTrace::Measurement<LLTrace::Seconds>("assetresponsetimesnontemptexturehttp",
- "Time spent responding to texture asset http requests"),
- LLTrace::Measurement<LLTrace::Seconds>("assetresponsetimesnontemptextureudp",
- "Time spent responding to texture asset udp requests"),
- LLTrace::Measurement<LLTrace::Seconds>("assetresponsetimeswearableudp",
- "Time spent responding to wearable asset requests"),
- LLTrace::Measurement<LLTrace::Seconds>("assetresponsetimessoundudp",
- "Time spent responding to sound asset requests"),
- LLTrace::Measurement<LLTrace::Seconds>("assetresponsetimesgestureudp",
- "Time spent responding to gesture asset requests"),
- LLTrace::Measurement<LLTrace::Seconds>("assetresponsetimesother",
- "Time spent responding to other asset requests")};
-
//
// Target thread is elaborated in the function name. This could
// have been something 'templatey' like specializations iterated
@@ -577,3 +644,59 @@ cleanup()
} // namespace LLViewerAssetStatsFF
+
+LLViewerAssetStats::AssetRequestType::AssetRequestType()
+: enqueued("enqueued"),
+ dequeued("dequeued"),
+ resp_count("resp_count"),
+ resp_min("resp_min"),
+ resp_max("resp_max"),
+ resp_mean("resp_mean")
+{}
+
+LLViewerAssetStats::FPSStats::FPSStats()
+: count("count"),
+ min("min"),
+ max("max"),
+ mean("mean")
+{}
+
+LLViewerAssetStats::RegionStats::RegionStats()
+: get_texture_temp_http("get_texture_temp_http"),
+ get_texture_temp_udp("get_texture_temp_udp"),
+ get_texture_non_temp_http("get_texture_non_temp_http"),
+ get_texture_non_temp_udp("get_texture_non_temp_udp"),
+ get_wearable_udp("get_wearable_udp"),
+ get_sound_udp("get_sound_udp"),
+ get_gesture_udp("get_gesture_udp"),
+ get_other("get_other"),
+ fps("fps"),
+ grid_x("grid_x"),
+ grid_y("grid_y"),
+ duration("duration")
+{}
+
+LLViewerAssetStats::AvatarRezState::AvatarRezState()
+: cloud("cloud"),
+ gray("gray"),
+ textured("textured")
+{}
+
+LLViewerAssetStats::AvatarInfo::AvatarInfo()
+: nearby("nearby"),
+ phase_stats("phase_stats")
+{
+
+}
+
+LLViewerAssetStats::AssetStats::AssetStats()
+: regions("regions"),
+ duration("duration"),
+ avatar("avatar"),
+ session_id("session_id"),
+ agent_id("agent_id"),
+ message("message"),
+ sequence("sequence"),
+ initial("initial"),
+ break_("break")
+{}