summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorMonty Brandenberg <monty@lindenlab.com>2012-06-22 14:41:08 -0400
committerMonty Brandenberg <monty@lindenlab.com>2012-06-22 14:41:08 -0400
commit5ff1758b633f1984f601aacbb7920c3c744b87f7 (patch)
tree74916117ab2e64b70bd55975ec4d5ae826502d73 /indra/newview
parented55eec8e352a9c38670a9155bc239748f578da4 (diff)
SH-3177, SH-3180 std::iostream and LLSD serialization for BufferArray objects.
Seems to be working correctly. Not certain this is the fastest possible way to provide a std::streambuf interface but it's visually acceptable.
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/lltexturefetch.cpp27
-rw-r--r--indra/newview/lltexturefetch.h8
2 files changed, 21 insertions, 14 deletions
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index 4995d9f5ea..6b186811f1 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -58,6 +58,7 @@
#include "httphandler.h"
#include "httpresponse.h"
#include "bufferarray.h"
+#include "bufferstream.h"
//////////////////////////////////////////////////////////////////////////////
@@ -2182,6 +2183,7 @@ LLTextureFetch::LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* image
mHttpRequest(NULL),
mHttpOptions(NULL),
mHttpHeaders(NULL),
+ mHttpMetricsHeaders(NULL),
mHttpSemaphore(HTTP_REQUESTS_IN_QUEUE_HIGH_WATER),
mTotalCacheReadCount(0U),
mTotalCacheWriteCount(0U),
@@ -2194,6 +2196,8 @@ LLTextureFetch::LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* image
mHttpOptions = new LLCore::HttpOptions;
mHttpHeaders = new LLCore::HttpHeaders;
mHttpHeaders->mHeaders.push_back("Accept: image/x-j2c");
+ mHttpMetricsHeaders = new LLCore::HttpHeaders;
+ mHttpMetricsHeaders->mHeaders.push_back("Content-Type: application/llsd+xml");
}
LLTextureFetch::~LLTextureFetch()
@@ -2219,6 +2223,12 @@ LLTextureFetch::~LLTextureFetch()
mHttpHeaders = NULL;
}
+ if (mHttpMetricsHeaders)
+ {
+ mHttpMetricsHeaders->release();
+ mHttpMetricsHeaders = NULL;
+ }
+
mHttpWaitResource.clear();
delete mHttpRequest;
@@ -3501,29 +3511,18 @@ TFReqSendMetrics::doWork(LLTextureFetch * fetcher)
if (! mCapsURL.empty())
{
- // *FIXME: This mess to get an llsd into a string though
- // it's actually no worse than what we currently do...
- std::stringstream body;
- LLSDSerialize::toXML(merged_llsd, body);
- std::string body_str(body.str());
- body.clear();
-
- LLCore::HttpHeaders * headers = new LLCore::HttpHeaders;
- headers->mHeaders.push_back("Content-Type: application/llsd+xml");
-
LLCore::BufferArray * ba = new LLCore::BufferArray;
- ba->append(body_str.c_str(), body_str.length());
- body_str.clear();
+ LLCore::BufferArrayStream bas(ba);
+ LLSDSerialize::toXML(merged_llsd, bas);
fetcher->getHttpRequest().requestPost(report_policy_class,
report_priority,
mCapsURL,
ba,
NULL,
- headers,
+ fetcher->getMetricsHeaders(),
handler);
ba->release();
- headers->release();
LLTextureFetch::svMetricsDataBreak = false;
}
else
diff --git a/indra/newview/lltexturefetch.h b/indra/newview/lltexturefetch.h
index e17c71113a..4d762a0e05 100644
--- a/indra/newview/lltexturefetch.h
+++ b/indra/newview/lltexturefetch.h
@@ -157,6 +157,13 @@ public:
// Threads: T*
LLCore::HttpRequest & getHttpRequest() { return *mHttpRequest; }
+ // Return a pointer to the shared metrics headers definition.
+ // Does not increment the reference count, caller is required
+ // to do that to hold a reference for any length of time.
+ //
+ // Threads: T*
+ LLCore::HttpHeaders * getMetricsHeaders() const { return mHttpMetricsHeaders; }
+
bool isQAMode() const { return mQAMode; }
// ----------------------------------
@@ -322,6 +329,7 @@ private:
LLCore::HttpRequest * mHttpRequest; // Ttf
LLCore::HttpOptions * mHttpOptions; // Ttf
LLCore::HttpHeaders * mHttpHeaders; // Ttf
+ LLCore::HttpHeaders * mHttpMetricsHeaders; // Ttf
// We use a resource semaphore to keep HTTP requests in
// WAIT_HTTP_RESOURCE2 if there aren't sufficient slots in the