Bug 1444580: Devirtualize the responsive content stuff. r=smaug

MozReview-Commit-ID: LCz01o31RoC
This commit is contained in:
Emilio Cobos Álvarez 2018-03-11 13:04:01 +01:00
Родитель cde280f7f4
Коммит 87f132ff06
3 изменённых файлов: 26 добавлений и 38 удалений

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

@ -9969,34 +9969,15 @@ nsDocument::GetPlugins(nsTArray<nsIObjectLoadingContent*>& aPlugins)
EnumerateSubDocuments(AllSubDocumentPluginEnum, &aPlugins);
}
nsresult
nsDocument::AddResponsiveContent(nsIContent* aContent)
{
MOZ_ASSERT(aContent);
MOZ_ASSERT(aContent->IsHTMLElement(nsGkAtoms::img));
mResponsiveContent.PutEntry(aContent);
return NS_OK;
}
void
nsDocument::RemoveResponsiveContent(nsIContent* aContent)
{
MOZ_ASSERT(aContent);
mResponsiveContent.RemoveEntry(aContent);
}
void
nsDocument::NotifyMediaFeatureValuesChanged()
nsIDocument::NotifyMediaFeatureValuesChanged()
{
for (auto iter = mResponsiveContent.ConstIter(); !iter.Done();
iter.Next()) {
nsCOMPtr<nsIContent> content = iter.Get()->GetKey();
if (content->IsHTMLElement(nsGkAtoms::img)) {
auto* imageElement = static_cast<HTMLImageElement*>(content.get());
RefPtr<HTMLImageElement> imageElement = iter.Get()->GetKey();
imageElement->MediaFeatureValuesChanged();
}
}
}
already_AddRefed<Touch>
nsIDocument::CreateTouch(nsGlobalWindowInner* aView,

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

@ -646,16 +646,6 @@ public:
// the frame and any subframes.
virtual void GetPlugins(nsTArray<nsIObjectLoadingContent*>& aPlugins) override;
// Adds an element to mResponsiveContent when the element is
// added to the tree.
virtual nsresult AddResponsiveContent(nsIContent* aContent) override;
// Removes an element from mResponsiveContent when the element is
// removed from the tree.
virtual void RemoveResponsiveContent(nsIContent* aContent) override;
// Notifies any responsive content added by AddResponsiveContent upon media
// features values changing.
virtual void NotifyMediaFeatureValuesChanged() override;
virtual nsresult GetStateObject(nsIVariant** aResult) override;
// Returns the size of the mBlockedTrackingNodes array. (nsIDocument.h)
@ -837,9 +827,6 @@ private:
uint32_t mAsyncOnloadBlockCount;
nsCOMPtr<nsIRequest> mOnloadBlocker;
// A set of responsive images keyed by address pointer.
nsTHashtable< nsPtrHashKey<nsIContent> > mResponsiveContent;
nsTArray<RefPtr<nsFrameLoader> > mInitializableFrameLoaders;
nsTArray<nsCOMPtr<nsIRunnable> > mFrameLoaderFinalizers;
RefPtr<nsRunnableMethod<nsDocument> > mFrameLoaderRunner;

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

@ -157,6 +157,7 @@ class FrameRequestCallback;
struct FullscreenRequest;
class ImageTracker;
class HTMLBodyElement;
class HTMLImageElement;
struct LifecycleCallbackArgs;
class Link;
class Location;
@ -2785,9 +2786,25 @@ public:
virtual void RemovePlugin(nsIObjectLoadingContent* aPlugin) = 0;
virtual void GetPlugins(nsTArray<nsIObjectLoadingContent*>& aPlugins) = 0;
virtual nsresult AddResponsiveContent(nsIContent* aContent) = 0;
virtual void RemoveResponsiveContent(nsIContent* aContent) = 0;
virtual void NotifyMediaFeatureValuesChanged() = 0;
// Adds an element to mResponsiveContent when the element is
// added to the tree.
void AddResponsiveContent(mozilla::dom::HTMLImageElement* aContent)
{
MOZ_ASSERT(aContent);
mResponsiveContent.PutEntry(aContent);
}
// Removes an element from mResponsiveContent when the element is
// removed from the tree.
void RemoveResponsiveContent(mozilla::dom::HTMLImageElement* aContent)
{
MOZ_ASSERT(aContent);
mResponsiveContent.RemoveEntry(aContent);
}
// Notifies any responsive content added by AddResponsiveContent upon media
// features values changing.
void NotifyMediaFeatureValuesChanged();
virtual nsresult GetStateObject(nsIVariant** aResult) = 0;
@ -4056,6 +4073,9 @@ protected:
RefPtr<nsContentList> mImageMaps;
// A set of responsive images keyed by address pointer.
nsTHashtable<nsPtrHashKey<mozilla::dom::HTMLImageElement>> mResponsiveContent;
public:
js::ExpandoAndGeneration mExpandoAndGeneration;