Bug 1444580: Devirtualize frame loader stuff. r=smaug

MozReview-Commit-ID: As1MOpvoaI6
This commit is contained in:
Emilio Cobos Álvarez 2018-03-11 15:49:48 +01:00
Родитель c8428d3e7e
Коммит b9d38b736d
3 изменённых файлов: 22 добавлений и 26 удалений

Просмотреть файл

@ -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;