summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad Payne (Vir Linden) <vir@lindenlab.com>2017-03-03 15:14:09 -0500
committerBrad Payne (Vir Linden) <vir@lindenlab.com>2017-03-03 15:14:09 -0500
commitf70abb4ad628b19c993a22c7e86d350395555fcf (patch)
treefcee761280477842d967b485f23bfc35ec927107
parentbcd0453562e032ba1eed3858629bf8a554557543 (diff)
SL-409 - added tracking for bytes fetched to viewer assets metrics (does not currently work for textures)
-rw-r--r--indra/llcommon/llerror.cpp2
-rw-r--r--indra/llmessage/llassetstorage.cpp17
-rw-r--r--indra/llmessage/llassetstorage.h1
-rw-r--r--indra/newview/llviewerassetstats.cpp10
-rw-r--r--indra/newview/llviewerassetstats.h9
-rw-r--r--indra/newview/llviewerassetstorage.cpp7
-rw-r--r--indra/newview/llviewerassetstorage.h5
-rw-r--r--scripts/metrics/viewer_asset_logs.py8
8 files changed, 45 insertions, 14 deletions
diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp
index e6407ecf22..9c49f7eff4 100644
--- a/indra/llcommon/llerror.cpp
+++ b/indra/llcommon/llerror.cpp
@@ -572,7 +572,7 @@ namespace LLError
mFunctionString += std::string(mFunction) + ":";
for (size_t i = 0; i < mTagCount; i++)
{
- mTagString += std::string("#") + mTags[i] + ((i == mTagCount - 1) ? "" : ",");
+ mTagString += std::string("#") + mTags[i] + ((i == mTagCount - 1) ? " " : ",");
}
}
diff --git a/indra/llmessage/llassetstorage.cpp b/indra/llmessage/llassetstorage.cpp
index 7bf886ef26..ab6fc69413 100644
--- a/indra/llmessage/llassetstorage.cpp
+++ b/indra/llmessage/llassetstorage.cpp
@@ -195,7 +195,8 @@ LLAssetRequest::LLAssetRequest(const LLUUID &uuid, const LLAssetType::EType type
mInfoCallback( NULL ),
mIsLocal(FALSE),
mIsUserWaiting(FALSE),
- mTimeout(LL_ASSET_STORAGE_TIMEOUT)
+ mTimeout(LL_ASSET_STORAGE_TIMEOUT),
+ mBytesFetched(0)
{
}
@@ -641,6 +642,20 @@ void LLAssetStorage::downloadCompleteCallback(
result = LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE;
vfile.remove();
}
+ else
+ {
+#if 1
+ for (request_list_t::iterator iter = gAssetStorage->mPendingDownloads.begin();
+ iter != gAssetStorage->mPendingDownloads.end(); ++iter )
+ {
+ LLAssetRequest* dlreq = *iter;
+ if ((dlreq->getUUID() == file_id) && (dlreq->getType()== file_type))
+ {
+ dlreq->mBytesFetched = vfile.getSize();
+ }
+ }
+#endif
+ }
}
removeAndCallbackPendingDownloads(file_id, file_type, callback_id, callback_type, ext_status, result);
diff --git a/indra/llmessage/llassetstorage.h b/indra/llmessage/llassetstorage.h
index 2ec8ac31b4..d6b4fa0c7b 100644
--- a/indra/llmessage/llassetstorage.h
+++ b/indra/llmessage/llassetstorage.h
@@ -138,6 +138,7 @@ public:
BOOL mIsUserWaiting; // We don't want to try forever if a user is waiting for a result.
F64Seconds mTimeout; // Amount of time before timing out.
LLUUID mRequestingAgentID; // Only valid for uploads from an agent
+ F64 mBytesFetched;
virtual LLSD getTerseDetails() const;
virtual LLSD getFullDetails() const;
diff --git a/indra/newview/llviewerassetstats.cpp b/indra/newview/llviewerassetstats.cpp
index d47f73ccce..a9e0ba7b5d 100644
--- a/indra/newview/llviewerassetstats.cpp
+++ b/indra/newview/llviewerassetstats.cpp
@@ -168,6 +168,7 @@ namespace LLViewerAssetStatsFF
static LLTrace::DCCountStatHandle<> sEnqueued[EVACCount];
static LLTrace::DCCountStatHandle<> sDequeued[EVACCount];
+ static LLTrace::DCEventStatHandle<> sBytesFetched[EVACCount];
static LLTrace::DCEventStatHandle<F64Seconds > sResponse[EVACCount];
}
@@ -277,7 +278,8 @@ void LLViewerAssetStats::getStat(LLTrace::Recording& rec, T& req, LLViewerAssetS
.resp_count(rec.getSampleCount(sResponse[cat]))
.resp_min(rec.getMin(sResponse[cat]).value())
.resp_max(rec.getMax(sResponse[cat]).value())
- .resp_mean(rec.getMean(sResponse[cat]).value());
+ .resp_mean(rec.getMean(sResponse[cat]).value())
+ .resp_mean_bytes(rec.getMean(sBytesFetched[cat]));
}
}
@@ -370,11 +372,12 @@ void record_dequeue(LLViewerAssetType::EType at, bool with_http, bool is_temp)
add(sDequeued[int(eac)], 1);
}
-void record_response(LLViewerAssetType::EType at, bool with_http, bool is_temp, LLViewerAssetStats::duration_t duration)
+void record_response(LLViewerAssetType::EType at, bool with_http, bool is_temp, LLViewerAssetStats::duration_t duration, F64 bytes)
{
const EViewerAssetCategories eac(asset_type_to_category(at, with_http, is_temp));
record(sResponse[int(eac)], F64Microseconds(duration));
+ record(sBytesFetched[int(eac)], bytes);
}
void init()
@@ -403,7 +406,8 @@ LLViewerAssetStats::AssetRequestType::AssetRequestType()
resp_count("resp_count"),
resp_min("resp_min"),
resp_max("resp_max"),
- resp_mean("resp_mean")
+ resp_mean("resp_mean"),
+ resp_mean_bytes("resp_mean_bytes")
{}
LLViewerAssetStats::FPSStats::FPSStats()
diff --git a/indra/newview/llviewerassetstats.h b/indra/newview/llviewerassetstats.h
index a2545c0bad..718c284224 100644
--- a/indra/newview/llviewerassetstats.h
+++ b/indra/newview/llviewerassetstats.h
@@ -118,11 +118,12 @@ public:
struct AssetRequestType : public LLInitParam::Block<AssetRequestType>
{
Mandatory<S32> enqueued,
- dequeued,
- resp_count;
+ dequeued,
+ resp_count;
Mandatory<F64> resp_min,
resp_max,
- resp_mean;
+ resp_mean,
+ resp_mean_bytes;
AssetRequestType();
};
@@ -272,7 +273,7 @@ void record_enqueue(LLViewerAssetType::EType at, bool with_http, bool is_temp);
void record_dequeue(LLViewerAssetType::EType at, bool with_http, bool is_temp);
void record_response(LLViewerAssetType::EType at, bool with_http, bool is_temp,
- LLViewerAssetStats::duration_t duration);
+ LLViewerAssetStats::duration_t duration, F64 bytes=0);
void record_avatar_stats();
diff --git a/indra/newview/llviewerassetstorage.cpp b/indra/newview/llviewerassetstorage.cpp
index 85150bf7fa..fa3567620c 100644
--- a/indra/newview/llviewerassetstorage.cpp
+++ b/indra/newview/llviewerassetstorage.cpp
@@ -82,7 +82,8 @@ protected:
LLViewerAssetStatsFF::record_dequeue(mType, mWithHTTP, false);
LLViewerAssetStatsFF::record_response(mType, mWithHTTP, false,
(LLViewerAssetStatsFF::get_timestamp()
- - mMetricsStartTime));
+ - mMetricsStartTime),
+ mBytesFetched);
mMetricsStartTime = (U32Seconds)0;
}
}
@@ -458,12 +459,13 @@ void LLViewerAssetStorage::queueRequestHttp(
LLViewerAssetStatsFF::record_enqueue(atype, with_http, is_temp);
LLCoros::instance().launch("LLViewerAssetStorage::assetRequestCoro",
- boost::bind(&LLViewerAssetStorage::assetRequestCoro, this, uuid, atype, callback, user_data));
+ boost::bind(&LLViewerAssetStorage::assetRequestCoro, this, req, uuid, atype, callback, user_data));
}
}
}
void LLViewerAssetStorage::assetRequestCoro(
+ LLViewerAssetRequest *req,
const LLUUID& uuid,
LLAssetType::EType atype,
LLGetAssetCallback callback,
@@ -506,6 +508,7 @@ void LLViewerAssetStorage::assetRequestCoro(
temp_id.generate();
LLVFile vf(gAssetStorage->mVFS, temp_id, atype, LLVFile::WRITE);
vf.setMaxSize(size);
+ req->mBytesFetched = size;
if (!vf.write(raw.data(),size))
{
// TODO asset-http: handle error
diff --git a/indra/newview/llviewerassetstorage.h b/indra/newview/llviewerassetstorage.h
index d28a8a276f..3ca8112601 100644
--- a/indra/newview/llviewerassetstorage.h
+++ b/indra/newview/llviewerassetstorage.h
@@ -31,6 +31,8 @@
class LLVFile;
+class LLViewerAssetRequest;
+
class LLViewerAssetStorage : public LLAssetStorage
{
public:
@@ -85,7 +87,8 @@ protected:
BOOL duplicate,
BOOL is_priority);
- void assetRequestCoro(const LLUUID& uuid,
+ void assetRequestCoro(LLViewerAssetRequest *req,
+ const LLUUID& uuid,
LLAssetType::EType atype,
void (*callback) (LLVFS *vfs, const LLUUID&, LLAssetType::EType, void *, S32, LLExtStat),
void *user_data);
diff --git a/scripts/metrics/viewer_asset_logs.py b/scripts/metrics/viewer_asset_logs.py
index 47f0658138..8e46ca4707 100644
--- a/scripts/metrics/viewer_asset_logs.py
+++ b/scripts/metrics/viewer_asset_logs.py
@@ -72,6 +72,7 @@ def update_stats(stats,rec):
#print "field",field,"count",type_stats["count"]
if (newcount>0):
type_stats["sum"] = type_stats.get("sum",0) + val["resp_count"] * val["resp_mean"]
+ type_stats["sum_bytes"] = type_stats.get("sum_bytes",0) + val["resp_count"] * val.get("resp_mean_bytes",0)
type_stats["enqueued"] = type_stats.get("enqueued",0) + val["enqueued"]
type_stats["dequeued"] = type_stats.get("dequeued",0) + val["dequeued"]
@@ -92,7 +93,10 @@ if __name__ == "__main__":
update_stats(stats,rec)
- for key, val in stats.iteritems():
+ for key in sorted(stats.keys()):
+ val = stats[key]
if val["count"] > 0:
- print "key",key,"count",val["count"],"mean",val["sum"]/val["count"],"enqueued",val["enqueued"],"dequeued",val["dequeued"]
+ print key,"count",val["count"],"mean_time",val["sum"]/val["count"],"mean_bytes",val["sum_bytes"]/val["count"],"enqueued",val["enqueued"],"dequeued",val["dequeued"]
+ else:
+ print key,"count",val["count"],"enqueued",val["enqueued"],"dequeued",val["dequeued"]