зеркало из https://github.com/mozilla/gecko-dev.git
Performance improvements. Separate flags initialization from other cached values
and don't init cached values until first time needed.
This commit is contained in:
Родитель
db08f10bba
Коммит
464025592f
|
@ -99,6 +99,7 @@ public:
|
||||||
|
|
||||||
void Init();
|
void Init();
|
||||||
virtual nsresult InitCachedValues();
|
virtual nsresult InitCachedValues();
|
||||||
|
virtual nsresult InitFlags();
|
||||||
|
|
||||||
NS_DECL_ISUPPORTS
|
NS_DECL_ISUPPORTS
|
||||||
|
|
||||||
|
@ -130,7 +131,7 @@ protected:
|
||||||
// though I hope not.
|
// though I hope not.
|
||||||
nsMsgDatabase *m_mdb;
|
nsMsgDatabase *m_mdb;
|
||||||
nsIMdbRow *m_mdbRow;
|
nsIMdbRow *m_mdbRow;
|
||||||
PRBool m_cachedValuesInitialized;
|
PRUint32 m_initedValues;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -28,6 +28,9 @@ NS_IMPL_ISUPPORTS(nsMsgHdr, nsIMsgDBHdr::GetIID())
|
||||||
|
|
||||||
static NS_DEFINE_CID(kCMimeConverterCID, NS_MIME_CONVERTER_CID);
|
static NS_DEFINE_CID(kCMimeConverterCID, NS_MIME_CONVERTER_CID);
|
||||||
|
|
||||||
|
#define FLAGS_INITED 0x1
|
||||||
|
#define CACHED_VALUES_INITED 0x2
|
||||||
|
|
||||||
nsMsgHdr::nsMsgHdr(nsMsgDatabase *db, nsIMdbRow *dbRow)
|
nsMsgHdr::nsMsgHdr(nsMsgDatabase *db, nsIMdbRow *dbRow)
|
||||||
{
|
{
|
||||||
NS_INIT_REFCNT();
|
NS_INIT_REFCNT();
|
||||||
|
@ -36,13 +39,12 @@ nsMsgHdr::nsMsgHdr(nsMsgDatabase *db, nsIMdbRow *dbRow)
|
||||||
m_mdb->AddRef();
|
m_mdb->AddRef();
|
||||||
Init();
|
Init();
|
||||||
m_mdbRow = dbRow;
|
m_mdbRow = dbRow;
|
||||||
InitCachedValues();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void nsMsgHdr::Init()
|
void nsMsgHdr::Init()
|
||||||
{
|
{
|
||||||
m_cachedValuesInitialized = PR_FALSE;
|
m_initedValues = 0;
|
||||||
m_statusOffset = 0xffffffff;
|
m_statusOffset = 0xffffffff;
|
||||||
m_messageKey = nsMsgKey_None;
|
m_messageKey = nsMsgKey_None;
|
||||||
m_messageSize = 0;
|
m_messageSize = 0;
|
||||||
|
@ -62,14 +64,13 @@ nsresult nsMsgHdr::InitCachedValues()
|
||||||
if (!m_mdb || !m_mdbRow)
|
if (!m_mdb || !m_mdbRow)
|
||||||
return NS_ERROR_NULL_POINTER;
|
return NS_ERROR_NULL_POINTER;
|
||||||
|
|
||||||
if (!m_cachedValuesInitialized)
|
if (!(m_initedValues & CACHED_VALUES_INITED))
|
||||||
{
|
{
|
||||||
PRUint32 uint32Value;
|
PRUint32 uint32Value;
|
||||||
mdbOid outOid;
|
mdbOid outOid;
|
||||||
if (m_mdbRow->GetOid(m_mdb->GetEnv(), &outOid) == NS_OK)
|
if (m_mdbRow->GetOid(m_mdb->GetEnv(), &outOid) == NS_OK)
|
||||||
m_messageKey = outOid.mOid_Id;
|
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_messageSizeColumnToken, &m_messageSize);
|
||||||
|
|
||||||
err = GetUInt32Column(m_mdb->m_dateColumnToken, &uint32Value);
|
err = GetUInt32Column(m_mdb->m_dateColumnToken, &uint32Value);
|
||||||
|
@ -82,11 +83,31 @@ nsresult nsMsgHdr::InitCachedValues()
|
||||||
m_numReferences = (PRUint16) uint32Value;
|
m_numReferences = (PRUint16) uint32Value;
|
||||||
|
|
||||||
if (NS_SUCCEEDED(err))
|
if (NS_SUCCEEDED(err))
|
||||||
m_cachedValuesInitialized = PR_TRUE;
|
m_initedValues |= CACHED_VALUES_INITED;
|
||||||
}
|
}
|
||||||
return err;
|
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()
|
nsMsgHdr::~nsMsgHdr()
|
||||||
{
|
{
|
||||||
if (m_mdbRow)
|
if (m_mdbRow)
|
||||||
|
@ -114,6 +135,10 @@ NS_IMETHODIMP nsMsgHdr::GetMessageKey(nsMsgKey *result)
|
||||||
|
|
||||||
NS_IMETHODIMP nsMsgHdr::GetThreadId(nsMsgKey *result)
|
NS_IMETHODIMP nsMsgHdr::GetThreadId(nsMsgKey *result)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
if (!(m_initedValues & CACHED_VALUES_INITED))
|
||||||
|
InitCachedValues();
|
||||||
|
|
||||||
if (result)
|
if (result)
|
||||||
{
|
{
|
||||||
*result = m_threadId;
|
*result = m_threadId;
|
||||||
|
@ -137,6 +162,8 @@ NS_IMETHODIMP nsMsgHdr::SetMessageKey(nsMsgKey value)
|
||||||
|
|
||||||
NS_IMETHODIMP nsMsgHdr::GetFlags(PRUint32 *result)
|
NS_IMETHODIMP nsMsgHdr::GetFlags(PRUint32 *result)
|
||||||
{
|
{
|
||||||
|
if (!(m_initedValues & FLAGS_INITED))
|
||||||
|
InitFlags();
|
||||||
*result = m_flags;
|
*result = m_flags;
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
@ -248,6 +275,9 @@ NS_IMETHODIMP nsMsgHdr::SetUint32Property(const char *propertyName, PRUint32 val
|
||||||
|
|
||||||
NS_IMETHODIMP nsMsgHdr::GetNumReferences(PRUint16 *result)
|
NS_IMETHODIMP nsMsgHdr::GetNumReferences(PRUint16 *result)
|
||||||
{
|
{
|
||||||
|
if (!(m_initedValues & CACHED_VALUES_INITED))
|
||||||
|
InitCachedValues();
|
||||||
|
|
||||||
*result = m_numReferences;
|
*result = m_numReferences;
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
@ -275,6 +305,9 @@ NS_IMETHODIMP nsMsgHdr::GetStringReference(PRInt32 refNum, nsCString &resultRefe
|
||||||
|
|
||||||
NS_IMETHODIMP nsMsgHdr::GetDate(PRTime *result)
|
NS_IMETHODIMP nsMsgHdr::GetDate(PRTime *result)
|
||||||
{
|
{
|
||||||
|
if (!(m_initedValues & CACHED_VALUES_INITED))
|
||||||
|
InitCachedValues();
|
||||||
|
|
||||||
*result = m_date;
|
*result = m_date;
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче