Made everything more memory efficient.

This commit is contained in:
phr0z3nt04st
2010-06-09 17:52:03 -05:00
parent 4721c0d9bd
commit fd62612579
4 changed files with 21 additions and 14 deletions

View File

@@ -9,10 +9,18 @@ LLMessageLogEntry::LLMessageLogEntry(EType type, LLHost from_host, LLHost to_hos
{ {
if(data) if(data)
{ {
mData = new U8[data_size]; mData.resize(data_size);
memcpy(mData, data, data_size); memcpy(&(mData[0]), data, data_size);
} }
} }
LLMessageLogEntry::LLMessageLogEntry(EType type, LLHost from_host, LLHost to_host, std::vector<U8> data, S32 data_size)
: mType(type),
mFromHost(from_host),
mToHost(to_host),
mDataSize(data_size),
mData(data)
{
}
LLMessageLogEntry::~LLMessageLogEntry() LLMessageLogEntry::~LLMessageLogEntry()
{ {
} }
@@ -32,7 +40,7 @@ void LLMessageLog::setCallback(void (*callback)(LLMessageLogEntry))
void LLMessageLog::log(LLHost from_host, LLHost to_host, U8* data, S32 data_size) void LLMessageLog::log(LLHost from_host, LLHost to_host, U8* data, S32 data_size)
{ {
LLMessageLogEntry entry = LLMessageLogEntry(LLMessageLogEntry::TEMPLATE, from_host, to_host, data, data_size); LLMessageLogEntry entry = LLMessageLogEntry(LLMessageLogEntry::TEMPLATE, from_host, to_host, data, data_size);
if(!entry.mDataSize || !entry.mData) return; if(!entry.mDataSize || !entry.mData.size()) return;
if(sCallback) sCallback(entry); if(sCallback) sCallback(entry);
if(!sMaxSize) return; if(!sMaxSize) return;
sDeque.push_back(entry); sDeque.push_back(entry);

View File

@@ -17,12 +17,13 @@ public:
HTTP_RESPONSE HTTP_RESPONSE
}; };
LLMessageLogEntry(EType type, LLHost from_host, LLHost to_host, U8* data, S32 data_size); LLMessageLogEntry(EType type, LLHost from_host, LLHost to_host, U8* data, S32 data_size);
LLMessageLogEntry(EType type, LLHost from_host, LLHost to_host, std::vector<U8> data, S32 data_size);
~LLMessageLogEntry(); ~LLMessageLogEntry();
EType mType; EType mType;
LLHost mFromHost; LLHost mFromHost;
LLHost mToHost; LLHost mToHost;
S32 mDataSize; S32 mDataSize;
U8* mData; std::vector<U8> mData;
}; };
class LLMessageLog class LLMessageLog
{ {

View File

@@ -41,8 +41,8 @@ LLFloaterMessageLogItem::LLFloaterMessageLogItem(LLMessageLogEntry entry)
{ {
BOOL decode_invalid = FALSE; BOOL decode_invalid = FALSE;
S32 decode_len = mDataSize; S32 decode_len = mDataSize;
U8 DecodeBuffer[MAX_PACKET_LEN]; std::vector<U8> DecodeBuffer(MAX_PACKET_LEN,0);
memcpy(&(DecodeBuffer[0]),mData,decode_len); memcpy(&(DecodeBuffer[0]),&(mData[0]),decode_len);
U8* decodep = &(DecodeBuffer[0]); U8* decodep = &(DecodeBuffer[0]);
mFlags = DecodeBuffer[0]; mFlags = DecodeBuffer[0];
gMessageSystem->zeroCodeExpand(&decodep, &decode_len); gMessageSystem->zeroCodeExpand(&decodep, &decode_len);
@@ -142,8 +142,8 @@ std::string LLFloaterMessageLogItem::getFull(BOOL show_header)
{ {
BOOL decode_invalid = FALSE; BOOL decode_invalid = FALSE;
S32 decode_len = mDataSize; S32 decode_len = mDataSize;
U8 DecodeBuffer[MAX_PACKET_LEN]; std::vector<U8> DecodeBuffer(MAX_PACKET_LEN,0);
memcpy(&(DecodeBuffer[0]),mData,decode_len); memcpy(&(DecodeBuffer[0]),&(mData[0]),decode_len);
U8* decodep = &(DecodeBuffer[0]); U8* decodep = &(DecodeBuffer[0]);
gMessageSystem->zeroCodeExpand(&decodep, &decode_len); gMessageSystem->zeroCodeExpand(&decodep, &decode_len);
if(decode_len < 7) if(decode_len < 7)
@@ -413,8 +413,8 @@ LLMessageLogFilterApply::LLMessageLogFilterApply()
mProgress(0) mProgress(0)
{ {
//make extra sure we don't invalidate any iterators and reserve a deque exclusively for our use //make extra sure we don't invalidate any iterators and reserve a deque exclusively for our use
mFilterTempMessages = new std::deque <LLMessageLogEntry>(LLFloaterMessageLog::sMessageLogEntries); mFilterTempMessages = LLFloaterMessageLog::sMessageLogEntries;
mIter = mFilterTempMessages->begin(); mIter = mFilterTempMessages.begin();
} }
void LLMessageLogFilterApply::cancel() void LLMessageLogFilterApply::cancel()
{ {
@@ -422,7 +422,7 @@ void LLMessageLogFilterApply::cancel()
} }
BOOL LLMessageLogFilterApply::tick() BOOL LLMessageLogFilterApply::tick()
{ {
std::deque<LLMessageLogEntry>::iterator end = mFilterTempMessages->end(); std::deque<LLMessageLogEntry>::iterator end = mFilterTempMessages.end();
if(mIter == end || !LLFloaterMessageLog::sInstance) if(mIter == end || !LLFloaterMessageLog::sInstance)
{ {
mFinished = TRUE; mFinished = TRUE;
@@ -448,8 +448,6 @@ BOOL LLMessageLogFilterApply::tick()
} }
} }
delete mFilterTempMessages;
return TRUE; return TRUE;
} }

View File

@@ -46,7 +46,7 @@ public:
S32 mProgress; S32 mProgress;
BOOL mFinished; BOOL mFinished;
private: private:
std::deque<LLMessageLogEntry> *mFilterTempMessages; std::deque<LLMessageLogEntry> mFilterTempMessages;
std::deque<LLMessageLogEntry>::iterator mIter; std::deque<LLMessageLogEntry>::iterator mIter;
}; };
class LLFloaterMessageLog : public LLFloater, public LLEventTimer class LLFloaterMessageLog : public LLFloater, public LLEventTimer