From 464025592f6baefe9ca1d80e289ece64dfaa4064 Mon Sep 17 00:00:00 2001 From: "putterman%netscape.com" Date: Thu, 9 Sep 1999 06:19:47 +0000 Subject: [PATCH] Performance improvements. Separate flags initialization from other cached values and don't init cached values until first time needed. --- mailnews/db/msgdb/public/nsMsgHdr.h | 3 +- mailnews/db/msgdb/src/nsMsgHdr.cpp | 43 +++++++++++++++++++++++++---- 2 files changed, 40 insertions(+), 6 deletions(-) diff --git a/mailnews/db/msgdb/public/nsMsgHdr.h b/mailnews/db/msgdb/public/nsMsgHdr.h index 00622bfd7292..993d747eb777 100644 --- a/mailnews/db/msgdb/public/nsMsgHdr.h +++ b/mailnews/db/msgdb/public/nsMsgHdr.h @@ -99,6 +99,7 @@ public: void Init(); virtual nsresult InitCachedValues(); + virtual nsresult InitFlags(); NS_DECL_ISUPPORTS @@ -130,7 +131,7 @@ protected: // though I hope not. nsMsgDatabase *m_mdb; nsIMdbRow *m_mdbRow; - PRBool m_cachedValuesInitialized; + PRUint32 m_initedValues; }; #endif diff --git a/mailnews/db/msgdb/src/nsMsgHdr.cpp b/mailnews/db/msgdb/src/nsMsgHdr.cpp index f757f11cb304..79b9b219ad26 100644 --- a/mailnews/db/msgdb/src/nsMsgHdr.cpp +++ b/mailnews/db/msgdb/src/nsMsgHdr.cpp @@ -28,6 +28,9 @@ NS_IMPL_ISUPPORTS(nsMsgHdr, nsIMsgDBHdr::GetIID()) static NS_DEFINE_CID(kCMimeConverterCID, NS_MIME_CONVERTER_CID); +#define FLAGS_INITED 0x1 +#define CACHED_VALUES_INITED 0x2 + nsMsgHdr::nsMsgHdr(nsMsgDatabase *db, nsIMdbRow *dbRow) { NS_INIT_REFCNT(); @@ -36,13 +39,12 @@ nsMsgHdr::nsMsgHdr(nsMsgDatabase *db, nsIMdbRow *dbRow) m_mdb->AddRef(); Init(); m_mdbRow = dbRow; - InitCachedValues(); } void nsMsgHdr::Init() { - m_cachedValuesInitialized = PR_FALSE; + m_initedValues = 0; m_statusOffset = 0xffffffff; m_messageKey = nsMsgKey_None; m_messageSize = 0; @@ -62,14 +64,13 @@ nsresult nsMsgHdr::InitCachedValues() if (!m_mdb || !m_mdbRow) return NS_ERROR_NULL_POINTER; - if (!m_cachedValuesInitialized) + if (!(m_initedValues & CACHED_VALUES_INITED)) { PRUint32 uint32Value; mdbOid outOid; if (m_mdbRow->GetOid(m_mdb->GetEnv(), &outOid) == NS_OK) m_messageKey = outOid.mOid_Id; - err = GetUInt32Column(m_mdb->m_flagsColumnToken, &m_flags); err = GetUInt32Column(m_mdb->m_messageSizeColumnToken, &m_messageSize); err = GetUInt32Column(m_mdb->m_dateColumnToken, &uint32Value); @@ -82,11 +83,31 @@ nsresult nsMsgHdr::InitCachedValues() m_numReferences = (PRUint16) uint32Value; if (NS_SUCCEEDED(err)) - m_cachedValuesInitialized = PR_TRUE; + m_initedValues |= CACHED_VALUES_INITED; } return err; } +nsresult nsMsgHdr::InitFlags() +{ + + nsresult err = NS_OK; + + if (!m_mdb) + return NS_ERROR_NULL_POINTER; + + if(!(m_initedValues & FLAGS_INITED)) + { + err = GetUInt32Column(m_mdb->m_flagsColumnToken, &m_flags); + + if(NS_SUCCEEDED(err)) + m_initedValues |= FLAGS_INITED; + } + + return err; + +} + nsMsgHdr::~nsMsgHdr() { if (m_mdbRow) @@ -114,6 +135,10 @@ NS_IMETHODIMP nsMsgHdr::GetMessageKey(nsMsgKey *result) NS_IMETHODIMP nsMsgHdr::GetThreadId(nsMsgKey *result) { + + if (!(m_initedValues & CACHED_VALUES_INITED)) + InitCachedValues(); + if (result) { *result = m_threadId; @@ -137,6 +162,8 @@ NS_IMETHODIMP nsMsgHdr::SetMessageKey(nsMsgKey value) NS_IMETHODIMP nsMsgHdr::GetFlags(PRUint32 *result) { + if (!(m_initedValues & FLAGS_INITED)) + InitFlags(); *result = m_flags; return NS_OK; } @@ -248,6 +275,9 @@ NS_IMETHODIMP nsMsgHdr::SetUint32Property(const char *propertyName, PRUint32 val NS_IMETHODIMP nsMsgHdr::GetNumReferences(PRUint16 *result) { + if (!(m_initedValues & CACHED_VALUES_INITED)) + InitCachedValues(); + *result = m_numReferences; return NS_OK; } @@ -275,6 +305,9 @@ NS_IMETHODIMP nsMsgHdr::GetStringReference(PRInt32 refNum, nsCString &resultRefe NS_IMETHODIMP nsMsgHdr::GetDate(PRTime *result) { + if (!(m_initedValues & CACHED_VALUES_INITED)) + InitCachedValues(); + *result = m_date; return NS_OK; }