зеркало из https://github.com/mozilla/pjs.git
Turned on Style Context Data Sharing. b=39618, r=pierre, sr=hyatt
This commit is contained in:
Родитель
d86dcf53db
Коммит
dad1495c6a
|
@ -49,6 +49,8 @@
|
||||||
#include "nsIStyleSet.h"
|
#include "nsIStyleSet.h"
|
||||||
#include "nsISizeOfHandler.h"
|
#include "nsISizeOfHandler.h"
|
||||||
#include "nsIPresShell.h"
|
#include "nsIPresShell.h"
|
||||||
|
#include "nsLayoutAtoms.h"
|
||||||
|
#include "prenv.h"
|
||||||
|
|
||||||
static NS_DEFINE_IID(kIStyleContextIID, NS_ISTYLECONTEXT_IID);
|
static NS_DEFINE_IID(kIStyleContextIID, NS_ISTYLECONTEXT_IID);
|
||||||
|
|
||||||
|
@ -2147,13 +2149,19 @@ public:
|
||||||
NS_IMETHOD CalcStyleDifference(nsIStyleContext* aOther, PRInt32& aHint,PRBool aStopAtFirstDifference = PR_FALSE) const;
|
NS_IMETHOD CalcStyleDifference(nsIStyleContext* aOther, PRInt32& aHint,PRBool aStopAtFirstDifference = PR_FALSE) const;
|
||||||
|
|
||||||
#ifdef SHARE_STYLECONTEXTS
|
#ifdef SHARE_STYLECONTEXTS
|
||||||
|
// evaluate and execute the style data sharing
|
||||||
|
// - if nothing to share, it leaves the current style data intact,
|
||||||
|
// otherwise it calls ShareStyleDataFrom to share another context's data
|
||||||
|
// and releases the old data
|
||||||
|
nsresult ShareStyleData(void);
|
||||||
|
|
||||||
// share the style data of the StyleDataDonor
|
// share the style data of the StyleDataDonor
|
||||||
// NOTE: the donor instance is cast to a StyleContextImpl to keep the
|
// NOTE: the donor instance is cast to a StyleContextImpl to keep the
|
||||||
// interface free of implementation types. This may be invalid in
|
// interface free of implementation types. This may be invalid in
|
||||||
// the future
|
// the future
|
||||||
// XXX - reconfigure APIs to avoid casting the interface to the impl
|
// XXX - reconfigure APIs to avoid casting the interface to the impl
|
||||||
nsresult ShareStyleDataFrom(nsIStyleContext*aStyleDataDonor);
|
nsresult ShareStyleDataFrom(nsIStyleContext*aStyleDataDonor);
|
||||||
|
|
||||||
// sets aMatches to PR_TRUE if the style data of aStyleContextToMatch matches the
|
// sets aMatches to PR_TRUE if the style data of aStyleContextToMatch matches the
|
||||||
// style data of this, PR_FALSE otherwise
|
// style data of this, PR_FALSE otherwise
|
||||||
NS_IMETHOD StyleDataMatches(nsIStyleContext* aStyleContextToMatch, PRBool *aMatches);
|
NS_IMETHOD StyleDataMatches(nsIStyleContext* aStyleContextToMatch, PRBool *aMatches);
|
||||||
|
@ -2896,32 +2904,7 @@ StyleContextImpl::RemapStyle(nsIPresContext* aPresContext, PRBool aRecurse)
|
||||||
RecalcAutomaticData(aPresContext);
|
RecalcAutomaticData(aPresContext);
|
||||||
|
|
||||||
#ifdef SHARE_STYLECONTEXTS
|
#ifdef SHARE_STYLECONTEXTS
|
||||||
|
nsresult result = ShareStyleData();
|
||||||
static PRBool bEnableSharing = PR_FALSE;
|
|
||||||
// set to FALSE in debugger to turn off sharing of sc data
|
|
||||||
|
|
||||||
if (bEnableSharing) {
|
|
||||||
// set the CRC
|
|
||||||
mStyleData->SetCRC32();
|
|
||||||
|
|
||||||
NS_ASSERTION(mStyleSet, "Expected to have a style set ref...");
|
|
||||||
nsIStyleContext *matchingSC = nsnull;
|
|
||||||
|
|
||||||
// check if there is a matching context...
|
|
||||||
if ((NS_SUCCEEDED(mStyleSet->FindMatchingContext(this, &matchingSC))) &&
|
|
||||||
(nsnull != matchingSC)) {
|
|
||||||
ShareStyleDataFrom(matchingSC);
|
|
||||||
#ifdef NOISY_DEBUG
|
|
||||||
printf("SC Data Shared :)\n");
|
|
||||||
#endif
|
|
||||||
NS_IF_RELEASE(matchingSC);
|
|
||||||
} else {
|
|
||||||
#ifdef NOISY_DEBUG
|
|
||||||
printf("Unique SC Data - Not Shared :(\n");
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
} // if(bDisableSharing==false)
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (aRecurse) {
|
if (aRecurse) {
|
||||||
|
@ -3083,6 +3066,70 @@ nsresult StyleContextImpl::HaveStyleData(void) const
|
||||||
|
|
||||||
#ifdef SHARE_STYLECONTEXTS
|
#ifdef SHARE_STYLECONTEXTS
|
||||||
|
|
||||||
|
nsresult StyleContextImpl::ShareStyleData(void)
|
||||||
|
{
|
||||||
|
nsresult result = NS_OK;
|
||||||
|
|
||||||
|
// Enable flag: this is TRUE by default, however the env. var. moz_disable_style_sharing
|
||||||
|
// can be set to '1' to disable the sharing before the app is launched
|
||||||
|
static char *disableSharing = PR_GetEnv("moz_disable_style_sharing");
|
||||||
|
static PRBool bEnableSharing = (disableSharing == nsnull) ||
|
||||||
|
(*disableSharing != '1');
|
||||||
|
#ifdef DEBUG
|
||||||
|
static PRBool bOnce = PR_FALSE;
|
||||||
|
if(!bOnce){
|
||||||
|
printf( "Style Data Sharing is %s\n", bEnableSharing ? "Enabled :)" : "Disabled :(" );
|
||||||
|
bOnce = PR_TRUE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PRBool bSharingSupported = PR_TRUE;
|
||||||
|
if (bEnableSharing) {
|
||||||
|
// NOTE: sharing of style data for the GfxScrollFrame is problematic
|
||||||
|
// and is currently disabled. These pseudos indicate the use of a GfxScrollFrame
|
||||||
|
// so we check for them and disallow sharing when any are found.
|
||||||
|
// If you haen;t guessed it, this is a total hack until we can figure out
|
||||||
|
// why the GfxScrollFrame is not happy having its style data shared...
|
||||||
|
// (See bugzilla bug 39618 which also documents this problem)
|
||||||
|
if(mPseudoTag) {
|
||||||
|
if(mPseudoTag == nsLayoutAtoms::viewportPseudo ||
|
||||||
|
mPseudoTag == nsLayoutAtoms::canvasPseudo ||
|
||||||
|
mPseudoTag == nsLayoutAtoms::viewportScrollPseudo ||
|
||||||
|
mPseudoTag == nsLayoutAtoms::scrolledContentPseudo ||
|
||||||
|
mPseudoTag == nsLayoutAtoms::selectScrolledContentPseudo) {
|
||||||
|
bSharingSupported = PR_FALSE;
|
||||||
|
} else {
|
||||||
|
bSharingSupported = PR_TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bEnableSharing && bSharingSupported) {
|
||||||
|
// set the CRC
|
||||||
|
mStyleData->SetCRC32();
|
||||||
|
|
||||||
|
NS_ASSERTION(mStyleSet, "Expected to have a style set ref...");
|
||||||
|
nsIStyleContext *matchingSC = nsnull;
|
||||||
|
|
||||||
|
// check if there is a matching context...
|
||||||
|
result = mStyleSet->FindMatchingContext(this, &matchingSC);
|
||||||
|
if ((NS_SUCCEEDED(result)) &&
|
||||||
|
(nsnull != matchingSC)) {
|
||||||
|
ShareStyleDataFrom(matchingSC);
|
||||||
|
#ifdef NOISY_DEBUG
|
||||||
|
printf("SC Data Shared :)\n");
|
||||||
|
#endif
|
||||||
|
NS_IF_RELEASE(matchingSC);
|
||||||
|
} else {
|
||||||
|
#ifdef NOISY_DEBUG
|
||||||
|
printf("Unique SC Data - Not Shared :(\n");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
nsresult StyleContextImpl::ShareStyleDataFrom(nsIStyleContext*aStyleDataDonor)
|
nsresult StyleContextImpl::ShareStyleDataFrom(nsIStyleContext*aStyleDataDonor)
|
||||||
{
|
{
|
||||||
nsresult rv = NS_OK;
|
nsresult rv = NS_OK;
|
||||||
|
|
|
@ -49,6 +49,8 @@
|
||||||
#include "nsIStyleSet.h"
|
#include "nsIStyleSet.h"
|
||||||
#include "nsISizeOfHandler.h"
|
#include "nsISizeOfHandler.h"
|
||||||
#include "nsIPresShell.h"
|
#include "nsIPresShell.h"
|
||||||
|
#include "nsLayoutAtoms.h"
|
||||||
|
#include "prenv.h"
|
||||||
|
|
||||||
static NS_DEFINE_IID(kIStyleContextIID, NS_ISTYLECONTEXT_IID);
|
static NS_DEFINE_IID(kIStyleContextIID, NS_ISTYLECONTEXT_IID);
|
||||||
|
|
||||||
|
@ -2147,13 +2149,19 @@ public:
|
||||||
NS_IMETHOD CalcStyleDifference(nsIStyleContext* aOther, PRInt32& aHint,PRBool aStopAtFirstDifference = PR_FALSE) const;
|
NS_IMETHOD CalcStyleDifference(nsIStyleContext* aOther, PRInt32& aHint,PRBool aStopAtFirstDifference = PR_FALSE) const;
|
||||||
|
|
||||||
#ifdef SHARE_STYLECONTEXTS
|
#ifdef SHARE_STYLECONTEXTS
|
||||||
|
// evaluate and execute the style data sharing
|
||||||
|
// - if nothing to share, it leaves the current style data intact,
|
||||||
|
// otherwise it calls ShareStyleDataFrom to share another context's data
|
||||||
|
// and releases the old data
|
||||||
|
nsresult ShareStyleData(void);
|
||||||
|
|
||||||
// share the style data of the StyleDataDonor
|
// share the style data of the StyleDataDonor
|
||||||
// NOTE: the donor instance is cast to a StyleContextImpl to keep the
|
// NOTE: the donor instance is cast to a StyleContextImpl to keep the
|
||||||
// interface free of implementation types. This may be invalid in
|
// interface free of implementation types. This may be invalid in
|
||||||
// the future
|
// the future
|
||||||
// XXX - reconfigure APIs to avoid casting the interface to the impl
|
// XXX - reconfigure APIs to avoid casting the interface to the impl
|
||||||
nsresult ShareStyleDataFrom(nsIStyleContext*aStyleDataDonor);
|
nsresult ShareStyleDataFrom(nsIStyleContext*aStyleDataDonor);
|
||||||
|
|
||||||
// sets aMatches to PR_TRUE if the style data of aStyleContextToMatch matches the
|
// sets aMatches to PR_TRUE if the style data of aStyleContextToMatch matches the
|
||||||
// style data of this, PR_FALSE otherwise
|
// style data of this, PR_FALSE otherwise
|
||||||
NS_IMETHOD StyleDataMatches(nsIStyleContext* aStyleContextToMatch, PRBool *aMatches);
|
NS_IMETHOD StyleDataMatches(nsIStyleContext* aStyleContextToMatch, PRBool *aMatches);
|
||||||
|
@ -2896,32 +2904,7 @@ StyleContextImpl::RemapStyle(nsIPresContext* aPresContext, PRBool aRecurse)
|
||||||
RecalcAutomaticData(aPresContext);
|
RecalcAutomaticData(aPresContext);
|
||||||
|
|
||||||
#ifdef SHARE_STYLECONTEXTS
|
#ifdef SHARE_STYLECONTEXTS
|
||||||
|
nsresult result = ShareStyleData();
|
||||||
static PRBool bEnableSharing = PR_FALSE;
|
|
||||||
// set to FALSE in debugger to turn off sharing of sc data
|
|
||||||
|
|
||||||
if (bEnableSharing) {
|
|
||||||
// set the CRC
|
|
||||||
mStyleData->SetCRC32();
|
|
||||||
|
|
||||||
NS_ASSERTION(mStyleSet, "Expected to have a style set ref...");
|
|
||||||
nsIStyleContext *matchingSC = nsnull;
|
|
||||||
|
|
||||||
// check if there is a matching context...
|
|
||||||
if ((NS_SUCCEEDED(mStyleSet->FindMatchingContext(this, &matchingSC))) &&
|
|
||||||
(nsnull != matchingSC)) {
|
|
||||||
ShareStyleDataFrom(matchingSC);
|
|
||||||
#ifdef NOISY_DEBUG
|
|
||||||
printf("SC Data Shared :)\n");
|
|
||||||
#endif
|
|
||||||
NS_IF_RELEASE(matchingSC);
|
|
||||||
} else {
|
|
||||||
#ifdef NOISY_DEBUG
|
|
||||||
printf("Unique SC Data - Not Shared :(\n");
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
} // if(bDisableSharing==false)
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (aRecurse) {
|
if (aRecurse) {
|
||||||
|
@ -3083,6 +3066,70 @@ nsresult StyleContextImpl::HaveStyleData(void) const
|
||||||
|
|
||||||
#ifdef SHARE_STYLECONTEXTS
|
#ifdef SHARE_STYLECONTEXTS
|
||||||
|
|
||||||
|
nsresult StyleContextImpl::ShareStyleData(void)
|
||||||
|
{
|
||||||
|
nsresult result = NS_OK;
|
||||||
|
|
||||||
|
// Enable flag: this is TRUE by default, however the env. var. moz_disable_style_sharing
|
||||||
|
// can be set to '1' to disable the sharing before the app is launched
|
||||||
|
static char *disableSharing = PR_GetEnv("moz_disable_style_sharing");
|
||||||
|
static PRBool bEnableSharing = (disableSharing == nsnull) ||
|
||||||
|
(*disableSharing != '1');
|
||||||
|
#ifdef DEBUG
|
||||||
|
static PRBool bOnce = PR_FALSE;
|
||||||
|
if(!bOnce){
|
||||||
|
printf( "Style Data Sharing is %s\n", bEnableSharing ? "Enabled :)" : "Disabled :(" );
|
||||||
|
bOnce = PR_TRUE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PRBool bSharingSupported = PR_TRUE;
|
||||||
|
if (bEnableSharing) {
|
||||||
|
// NOTE: sharing of style data for the GfxScrollFrame is problematic
|
||||||
|
// and is currently disabled. These pseudos indicate the use of a GfxScrollFrame
|
||||||
|
// so we check for them and disallow sharing when any are found.
|
||||||
|
// If you haen;t guessed it, this is a total hack until we can figure out
|
||||||
|
// why the GfxScrollFrame is not happy having its style data shared...
|
||||||
|
// (See bugzilla bug 39618 which also documents this problem)
|
||||||
|
if(mPseudoTag) {
|
||||||
|
if(mPseudoTag == nsLayoutAtoms::viewportPseudo ||
|
||||||
|
mPseudoTag == nsLayoutAtoms::canvasPseudo ||
|
||||||
|
mPseudoTag == nsLayoutAtoms::viewportScrollPseudo ||
|
||||||
|
mPseudoTag == nsLayoutAtoms::scrolledContentPseudo ||
|
||||||
|
mPseudoTag == nsLayoutAtoms::selectScrolledContentPseudo) {
|
||||||
|
bSharingSupported = PR_FALSE;
|
||||||
|
} else {
|
||||||
|
bSharingSupported = PR_TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bEnableSharing && bSharingSupported) {
|
||||||
|
// set the CRC
|
||||||
|
mStyleData->SetCRC32();
|
||||||
|
|
||||||
|
NS_ASSERTION(mStyleSet, "Expected to have a style set ref...");
|
||||||
|
nsIStyleContext *matchingSC = nsnull;
|
||||||
|
|
||||||
|
// check if there is a matching context...
|
||||||
|
result = mStyleSet->FindMatchingContext(this, &matchingSC);
|
||||||
|
if ((NS_SUCCEEDED(result)) &&
|
||||||
|
(nsnull != matchingSC)) {
|
||||||
|
ShareStyleDataFrom(matchingSC);
|
||||||
|
#ifdef NOISY_DEBUG
|
||||||
|
printf("SC Data Shared :)\n");
|
||||||
|
#endif
|
||||||
|
NS_IF_RELEASE(matchingSC);
|
||||||
|
} else {
|
||||||
|
#ifdef NOISY_DEBUG
|
||||||
|
printf("Unique SC Data - Not Shared :(\n");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
nsresult StyleContextImpl::ShareStyleDataFrom(nsIStyleContext*aStyleDataDonor)
|
nsresult StyleContextImpl::ShareStyleDataFrom(nsIStyleContext*aStyleDataDonor)
|
||||||
{
|
{
|
||||||
nsresult rv = NS_OK;
|
nsresult rv = NS_OK;
|
||||||
|
|
|
@ -49,6 +49,8 @@
|
||||||
#include "nsIStyleSet.h"
|
#include "nsIStyleSet.h"
|
||||||
#include "nsISizeOfHandler.h"
|
#include "nsISizeOfHandler.h"
|
||||||
#include "nsIPresShell.h"
|
#include "nsIPresShell.h"
|
||||||
|
#include "nsLayoutAtoms.h"
|
||||||
|
#include "prenv.h"
|
||||||
|
|
||||||
static NS_DEFINE_IID(kIStyleContextIID, NS_ISTYLECONTEXT_IID);
|
static NS_DEFINE_IID(kIStyleContextIID, NS_ISTYLECONTEXT_IID);
|
||||||
|
|
||||||
|
@ -2147,13 +2149,19 @@ public:
|
||||||
NS_IMETHOD CalcStyleDifference(nsIStyleContext* aOther, PRInt32& aHint,PRBool aStopAtFirstDifference = PR_FALSE) const;
|
NS_IMETHOD CalcStyleDifference(nsIStyleContext* aOther, PRInt32& aHint,PRBool aStopAtFirstDifference = PR_FALSE) const;
|
||||||
|
|
||||||
#ifdef SHARE_STYLECONTEXTS
|
#ifdef SHARE_STYLECONTEXTS
|
||||||
|
// evaluate and execute the style data sharing
|
||||||
|
// - if nothing to share, it leaves the current style data intact,
|
||||||
|
// otherwise it calls ShareStyleDataFrom to share another context's data
|
||||||
|
// and releases the old data
|
||||||
|
nsresult ShareStyleData(void);
|
||||||
|
|
||||||
// share the style data of the StyleDataDonor
|
// share the style data of the StyleDataDonor
|
||||||
// NOTE: the donor instance is cast to a StyleContextImpl to keep the
|
// NOTE: the donor instance is cast to a StyleContextImpl to keep the
|
||||||
// interface free of implementation types. This may be invalid in
|
// interface free of implementation types. This may be invalid in
|
||||||
// the future
|
// the future
|
||||||
// XXX - reconfigure APIs to avoid casting the interface to the impl
|
// XXX - reconfigure APIs to avoid casting the interface to the impl
|
||||||
nsresult ShareStyleDataFrom(nsIStyleContext*aStyleDataDonor);
|
nsresult ShareStyleDataFrom(nsIStyleContext*aStyleDataDonor);
|
||||||
|
|
||||||
// sets aMatches to PR_TRUE if the style data of aStyleContextToMatch matches the
|
// sets aMatches to PR_TRUE if the style data of aStyleContextToMatch matches the
|
||||||
// style data of this, PR_FALSE otherwise
|
// style data of this, PR_FALSE otherwise
|
||||||
NS_IMETHOD StyleDataMatches(nsIStyleContext* aStyleContextToMatch, PRBool *aMatches);
|
NS_IMETHOD StyleDataMatches(nsIStyleContext* aStyleContextToMatch, PRBool *aMatches);
|
||||||
|
@ -2896,32 +2904,7 @@ StyleContextImpl::RemapStyle(nsIPresContext* aPresContext, PRBool aRecurse)
|
||||||
RecalcAutomaticData(aPresContext);
|
RecalcAutomaticData(aPresContext);
|
||||||
|
|
||||||
#ifdef SHARE_STYLECONTEXTS
|
#ifdef SHARE_STYLECONTEXTS
|
||||||
|
nsresult result = ShareStyleData();
|
||||||
static PRBool bEnableSharing = PR_FALSE;
|
|
||||||
// set to FALSE in debugger to turn off sharing of sc data
|
|
||||||
|
|
||||||
if (bEnableSharing) {
|
|
||||||
// set the CRC
|
|
||||||
mStyleData->SetCRC32();
|
|
||||||
|
|
||||||
NS_ASSERTION(mStyleSet, "Expected to have a style set ref...");
|
|
||||||
nsIStyleContext *matchingSC = nsnull;
|
|
||||||
|
|
||||||
// check if there is a matching context...
|
|
||||||
if ((NS_SUCCEEDED(mStyleSet->FindMatchingContext(this, &matchingSC))) &&
|
|
||||||
(nsnull != matchingSC)) {
|
|
||||||
ShareStyleDataFrom(matchingSC);
|
|
||||||
#ifdef NOISY_DEBUG
|
|
||||||
printf("SC Data Shared :)\n");
|
|
||||||
#endif
|
|
||||||
NS_IF_RELEASE(matchingSC);
|
|
||||||
} else {
|
|
||||||
#ifdef NOISY_DEBUG
|
|
||||||
printf("Unique SC Data - Not Shared :(\n");
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
} // if(bDisableSharing==false)
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (aRecurse) {
|
if (aRecurse) {
|
||||||
|
@ -3083,6 +3066,70 @@ nsresult StyleContextImpl::HaveStyleData(void) const
|
||||||
|
|
||||||
#ifdef SHARE_STYLECONTEXTS
|
#ifdef SHARE_STYLECONTEXTS
|
||||||
|
|
||||||
|
nsresult StyleContextImpl::ShareStyleData(void)
|
||||||
|
{
|
||||||
|
nsresult result = NS_OK;
|
||||||
|
|
||||||
|
// Enable flag: this is TRUE by default, however the env. var. moz_disable_style_sharing
|
||||||
|
// can be set to '1' to disable the sharing before the app is launched
|
||||||
|
static char *disableSharing = PR_GetEnv("moz_disable_style_sharing");
|
||||||
|
static PRBool bEnableSharing = (disableSharing == nsnull) ||
|
||||||
|
(*disableSharing != '1');
|
||||||
|
#ifdef DEBUG
|
||||||
|
static PRBool bOnce = PR_FALSE;
|
||||||
|
if(!bOnce){
|
||||||
|
printf( "Style Data Sharing is %s\n", bEnableSharing ? "Enabled :)" : "Disabled :(" );
|
||||||
|
bOnce = PR_TRUE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PRBool bSharingSupported = PR_TRUE;
|
||||||
|
if (bEnableSharing) {
|
||||||
|
// NOTE: sharing of style data for the GfxScrollFrame is problematic
|
||||||
|
// and is currently disabled. These pseudos indicate the use of a GfxScrollFrame
|
||||||
|
// so we check for them and disallow sharing when any are found.
|
||||||
|
// If you haen;t guessed it, this is a total hack until we can figure out
|
||||||
|
// why the GfxScrollFrame is not happy having its style data shared...
|
||||||
|
// (See bugzilla bug 39618 which also documents this problem)
|
||||||
|
if(mPseudoTag) {
|
||||||
|
if(mPseudoTag == nsLayoutAtoms::viewportPseudo ||
|
||||||
|
mPseudoTag == nsLayoutAtoms::canvasPseudo ||
|
||||||
|
mPseudoTag == nsLayoutAtoms::viewportScrollPseudo ||
|
||||||
|
mPseudoTag == nsLayoutAtoms::scrolledContentPseudo ||
|
||||||
|
mPseudoTag == nsLayoutAtoms::selectScrolledContentPseudo) {
|
||||||
|
bSharingSupported = PR_FALSE;
|
||||||
|
} else {
|
||||||
|
bSharingSupported = PR_TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bEnableSharing && bSharingSupported) {
|
||||||
|
// set the CRC
|
||||||
|
mStyleData->SetCRC32();
|
||||||
|
|
||||||
|
NS_ASSERTION(mStyleSet, "Expected to have a style set ref...");
|
||||||
|
nsIStyleContext *matchingSC = nsnull;
|
||||||
|
|
||||||
|
// check if there is a matching context...
|
||||||
|
result = mStyleSet->FindMatchingContext(this, &matchingSC);
|
||||||
|
if ((NS_SUCCEEDED(result)) &&
|
||||||
|
(nsnull != matchingSC)) {
|
||||||
|
ShareStyleDataFrom(matchingSC);
|
||||||
|
#ifdef NOISY_DEBUG
|
||||||
|
printf("SC Data Shared :)\n");
|
||||||
|
#endif
|
||||||
|
NS_IF_RELEASE(matchingSC);
|
||||||
|
} else {
|
||||||
|
#ifdef NOISY_DEBUG
|
||||||
|
printf("Unique SC Data - Not Shared :(\n");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
nsresult StyleContextImpl::ShareStyleDataFrom(nsIStyleContext*aStyleDataDonor)
|
nsresult StyleContextImpl::ShareStyleDataFrom(nsIStyleContext*aStyleDataDonor)
|
||||||
{
|
{
|
||||||
nsresult rv = NS_OK;
|
nsresult rv = NS_OK;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче