зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1444580: Devirtualize frame loader stuff. r=smaug
MozReview-Commit-ID: As1MOpvoaI6
This commit is contained in:
Родитель
c8428d3e7e
Коммит
b9d38b736d
|
@ -1497,6 +1497,7 @@ nsIDocument::nsIDocument()
|
|||
mScrolledToRefAlready(false),
|
||||
mChangeScrollPosWhenScrollingToRef(false),
|
||||
mHasWarnedAboutBoxObjects(false),
|
||||
mDelayFrameLoaderInitialization(false),
|
||||
mIsScopedStyleEnabled(eScopedStyle_Unknown),
|
||||
mPendingFullscreenRequests(0),
|
||||
mCompatMode(eCompatibility_FullStandards),
|
||||
|
@ -1552,7 +1553,6 @@ nsIDocument::nsIDocument()
|
|||
|
||||
nsDocument::nsDocument(const char* aContentType)
|
||||
: nsIDocument()
|
||||
, mDelayFrameLoaderInitialization(false)
|
||||
, mSynchronousDOMContentLoaded(false)
|
||||
, mParserAborted(false)
|
||||
, mReportedUseCounters(false)
|
||||
|
@ -6600,7 +6600,7 @@ nsIDocument::SetMayStartLayout(bool aMayStartLayout)
|
|||
}
|
||||
|
||||
nsresult
|
||||
nsDocument::InitializeFrameLoader(nsFrameLoader* aLoader)
|
||||
nsIDocument::InitializeFrameLoader(nsFrameLoader* aLoader)
|
||||
{
|
||||
mInitializableFrameLoaders.RemoveElement(aLoader);
|
||||
// Don't even try to initialize.
|
||||
|
@ -6613,9 +6613,9 @@ nsDocument::InitializeFrameLoader(nsFrameLoader* aLoader)
|
|||
mInitializableFrameLoaders.AppendElement(aLoader);
|
||||
if (!mFrameLoaderRunner) {
|
||||
mFrameLoaderRunner =
|
||||
NewRunnableMethod("nsDocument::MaybeInitializeFinalizeFrameLoaders",
|
||||
NewRunnableMethod("nsIDocument::MaybeInitializeFinalizeFrameLoaders",
|
||||
this,
|
||||
&nsDocument::MaybeInitializeFinalizeFrameLoaders);
|
||||
&nsIDocument::MaybeInitializeFinalizeFrameLoaders);
|
||||
NS_ENSURE_TRUE(mFrameLoaderRunner, NS_ERROR_OUT_OF_MEMORY);
|
||||
nsContentUtils::AddScriptRunner(mFrameLoaderRunner);
|
||||
}
|
||||
|
@ -6623,7 +6623,7 @@ nsDocument::InitializeFrameLoader(nsFrameLoader* aLoader)
|
|||
}
|
||||
|
||||
nsresult
|
||||
nsDocument::FinalizeFrameLoader(nsFrameLoader* aLoader, nsIRunnable* aFinalizer)
|
||||
nsIDocument::FinalizeFrameLoader(nsFrameLoader* aLoader, nsIRunnable* aFinalizer)
|
||||
{
|
||||
mInitializableFrameLoaders.RemoveElement(aLoader);
|
||||
if (mInDestructor) {
|
||||
|
@ -6633,9 +6633,9 @@ nsDocument::FinalizeFrameLoader(nsFrameLoader* aLoader, nsIRunnable* aFinalizer)
|
|||
mFrameLoaderFinalizers.AppendElement(aFinalizer);
|
||||
if (!mFrameLoaderRunner) {
|
||||
mFrameLoaderRunner =
|
||||
NewRunnableMethod("nsDocument::MaybeInitializeFinalizeFrameLoaders",
|
||||
NewRunnableMethod("nsIDocument::MaybeInitializeFinalizeFrameLoaders",
|
||||
this,
|
||||
&nsDocument::MaybeInitializeFinalizeFrameLoaders);
|
||||
&nsIDocument::MaybeInitializeFinalizeFrameLoaders);
|
||||
NS_ENSURE_TRUE(mFrameLoaderRunner, NS_ERROR_OUT_OF_MEMORY);
|
||||
nsContentUtils::AddScriptRunner(mFrameLoaderRunner);
|
||||
}
|
||||
|
@ -6643,7 +6643,7 @@ nsDocument::FinalizeFrameLoader(nsFrameLoader* aLoader, nsIRunnable* aFinalizer)
|
|||
}
|
||||
|
||||
void
|
||||
nsDocument::MaybeInitializeFinalizeFrameLoaders()
|
||||
nsIDocument::MaybeInitializeFinalizeFrameLoaders()
|
||||
{
|
||||
if (mDelayFrameLoaderInitialization || mUpdateNestLevel != 0) {
|
||||
// This method will be recalled when mUpdateNestLevel drops to 0,
|
||||
|
@ -6659,9 +6659,9 @@ nsDocument::MaybeInitializeFinalizeFrameLoaders()
|
|||
(mInitializableFrameLoaders.Length() ||
|
||||
mFrameLoaderFinalizers.Length())) {
|
||||
mFrameLoaderRunner =
|
||||
NewRunnableMethod("nsDocument::MaybeInitializeFinalizeFrameLoaders",
|
||||
NewRunnableMethod("nsIDocument::MaybeInitializeFinalizeFrameLoaders",
|
||||
this,
|
||||
&nsDocument::MaybeInitializeFinalizeFrameLoaders);
|
||||
&nsIDocument::MaybeInitializeFinalizeFrameLoaders);
|
||||
nsContentUtils::AddScriptRunner(mFrameLoaderRunner);
|
||||
}
|
||||
return;
|
||||
|
@ -6689,7 +6689,7 @@ nsDocument::MaybeInitializeFinalizeFrameLoaders()
|
|||
}
|
||||
|
||||
void
|
||||
nsDocument::TryCancelFrameLoaderInitialization(nsIDocShell* aShell)
|
||||
nsIDocument::TryCancelFrameLoaderInitialization(nsIDocShell* aShell)
|
||||
{
|
||||
uint32_t length = mInitializableFrameLoaders.Length();
|
||||
for (uint32_t i = 0; i < length; ++i) {
|
||||
|
|
|
@ -301,10 +301,6 @@ public:
|
|||
virtual void BlockOnload() override;
|
||||
virtual void UnblockOnload(bool aFireSync) override;
|
||||
|
||||
virtual nsresult InitializeFrameLoader(nsFrameLoader* aLoader) override;
|
||||
virtual nsresult FinalizeFrameLoader(nsFrameLoader* aLoader, nsIRunnable* aFinalizer) override;
|
||||
virtual void TryCancelFrameLoaderInitialization(nsIDocShell* aShell) override;
|
||||
|
||||
NS_DECL_CYCLE_COLLECTION_SKIPPABLE_SCRIPT_HOLDER_CLASS_AMBIGUOUS(nsDocument,
|
||||
nsIDocument)
|
||||
|
||||
|
@ -316,8 +312,6 @@ public:
|
|||
|
||||
nsresult CloneDocHelper(nsDocument* clone, bool aPreallocateChildren) const;
|
||||
|
||||
void MaybeInitializeFinalizeFrameLoaders();
|
||||
|
||||
void MaybeEndOutermostXBLUpdate();
|
||||
|
||||
// Only BlockOnload should call this!
|
||||
|
@ -407,8 +401,6 @@ public:
|
|||
|
||||
nsClassHashtable<nsStringHashKey, nsRadioGroupStruct> mRadioGroups;
|
||||
|
||||
bool mDelayFrameLoaderInitialization:1;
|
||||
|
||||
bool mSynchronousDOMContentLoaded:1;
|
||||
|
||||
// Parser aborted. True if the parser of this document was forcibly
|
||||
|
@ -461,10 +453,6 @@ private:
|
|||
uint32_t mAsyncOnloadBlockCount;
|
||||
nsCOMPtr<nsIRequest> mOnloadBlocker;
|
||||
|
||||
nsTArray<RefPtr<nsFrameLoader> > mInitializableFrameLoaders;
|
||||
nsTArray<nsCOMPtr<nsIRunnable> > mFrameLoaderFinalizers;
|
||||
RefPtr<nsRunnableMethod<nsDocument> > mFrameLoaderRunner;
|
||||
|
||||
nsCOMPtr<nsIRunnable> mMaybeEndOutermostXBLUpdateRunner;
|
||||
|
||||
// These member variables cache information about the viewport so we don't have to
|
||||
|
|
|
@ -2556,12 +2556,12 @@ public:
|
|||
void SetCachedEncoder(already_AddRefed<nsIDocumentEncoder> aEncoder);
|
||||
|
||||
// In case of failure, the document really can't initialize the frame loader.
|
||||
virtual nsresult InitializeFrameLoader(nsFrameLoader* aLoader) = 0;
|
||||
nsresult InitializeFrameLoader(nsFrameLoader* aLoader);
|
||||
// In case of failure, the caller must handle the error, for example by
|
||||
// finalizing frame loader asynchronously.
|
||||
virtual nsresult FinalizeFrameLoader(nsFrameLoader* aLoader, nsIRunnable* aFinalizer) = 0;
|
||||
nsresult FinalizeFrameLoader(nsFrameLoader* aLoader, nsIRunnable* aFinalizer);
|
||||
// Removes the frame loader of aShell from the initialization list.
|
||||
virtual void TryCancelFrameLoaderInitialization(nsIDocShell* aShell) = 0;
|
||||
void TryCancelFrameLoaderInitialization(nsIDocShell* aShell);
|
||||
|
||||
/**
|
||||
* Check whether this document is a root document that is not an
|
||||
|
@ -3617,6 +3617,8 @@ public:
|
|||
nsIContent* GetContentInThisDocument(nsIFrame* aFrame) const;
|
||||
|
||||
protected:
|
||||
void MaybeInitializeFinalizeFrameLoaders();
|
||||
|
||||
/**
|
||||
* Returns the title element of the document as defined by the HTML
|
||||
* specification, or null if there isn't one. For documents whose root
|
||||
|
@ -4090,6 +4092,8 @@ protected:
|
|||
|
||||
bool mHasWarnedAboutBoxObjects: 1;
|
||||
|
||||
bool mDelayFrameLoaderInitialization: 1;
|
||||
|
||||
// Whether <style scoped> support is enabled in this document.
|
||||
enum { eScopedStyle_Unknown, eScopedStyle_Disabled, eScopedStyle_Enabled };
|
||||
unsigned int mIsScopedStyleEnabled : 2;
|
||||
|
@ -4397,6 +4401,10 @@ protected:
|
|||
uint16_t mCurrentOrientationAngle;
|
||||
mozilla::dom::OrientationType mCurrentOrientationType;
|
||||
|
||||
nsTArray<RefPtr<nsFrameLoader>> mInitializableFrameLoaders;
|
||||
nsTArray<nsCOMPtr<nsIRunnable>> mFrameLoaderFinalizers;
|
||||
RefPtr<nsRunnableMethod<nsIDocument>> mFrameLoaderRunner;
|
||||
|
||||
public:
|
||||
js::ExpandoAndGeneration mExpandoAndGeneration;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче