Bug 1364805 part 3 - Implement Type() by indexing a static array using the mClass field. Remove the nsIFrame::mType field. r=jfkthame

In the nsWindowMemoryReporter.cpp / nsArenaMemoryStats.h I'm only
including the concrete frame classes now - we obviously never have
instances of the other IDs so there's no need to collect stats for them.

MozReview-Commit-ID: 48uFCZ3xKBC
This commit is contained in:
Mats Palmgren 2017-05-26 12:11:11 +02:00
Родитель 1242172259
Коммит 483a804512
7 изменённых файлов: 233 добавлений и 191 удалений

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

@ -407,7 +407,7 @@ CollectWindowReports(nsGlobalWindow *aWindow,
js::MemoryReportingSundriesThreshold();
size_t frameSundriesSize = 0;
#define FRAME_ID(classname) \
#define FRAME_ID(classname, ...) \
{ \
size_t frameSize \
= windowSizes.mArenaStats.FRAME_ID_STAT_FIELD(classname); \
@ -421,8 +421,10 @@ CollectWindowReports(nsGlobalWindow *aWindow,
aWindowTotalSizes->mArenaStats.FRAME_ID_STAT_FIELD(classname) \
+= frameSize; \
}
#define ABSTRACT_FRAME_ID(...)
#include "nsFrameIdList.h"
#undef FRAME_ID
#undef ABSTRACT_FRAME_ID
if (frameSundriesSize > 0) {
REPORT_SIZE("/layout/frames/sundries", frameSundriesSize,
@ -564,10 +566,12 @@ nsWindowMemoryReporter::CollectReports(nsIHandleReportCallback* aHandleReport,
"This is the sum of all windows' 'layout/pres-contexts' numbers.");
size_t frameTotal = 0;
#define FRAME_ID(classname) \
#define FRAME_ID(classname, ...) \
frameTotal += windowTotalSizes.mArenaStats.FRAME_ID_STAT_FIELD(classname);
#define ABSTRACT_FRAME_ID(...)
#include "nsFrameIdList.h"
#undef FRAME_ID
#undef ABSTRACT_FRAME_ID
REPORT("window-objects/layout/frames", frameTotal,
"Memory used for layout frames within windows. "

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

@ -50,9 +50,11 @@ struct nsArenaMemoryStats {
#define ZERO_SIZE(kind, mSize) mSize(0),
FOR_EACH_SIZE(ZERO_SIZE)
#undef ZERO_SIZE
#define FRAME_ID(classname) FRAME_ID_STAT_FIELD(classname)(),
#define FRAME_ID(classname, ...) FRAME_ID_STAT_FIELD(classname)(),
#define ABSTRACT_FRAME_ID(...)
#include "nsFrameIdList.h"
#undef FRAME_ID
#undef ABSTRACT_FRAME_ID
dummy()
{}
@ -61,10 +63,12 @@ struct nsArenaMemoryStats {
#define ADD_TO_TAB_SIZES(kind, mSize) sizes->add(nsTabSizes::kind, mSize);
FOR_EACH_SIZE(ADD_TO_TAB_SIZES)
#undef ADD_TO_TAB_SIZES
#define FRAME_ID(classname) \
#define FRAME_ID(classname, ...) \
sizes->add(nsTabSizes::Other, FRAME_ID_STAT_FIELD(classname));
#define ABSTRACT_FRAME_ID(...)
#include "nsFrameIdList.h"
#undef FRAME_ID
#undef ABSTRACT_FRAME_ID
}
size_t getTotalSize() const
@ -73,19 +77,23 @@ struct nsArenaMemoryStats {
#define ADD_TO_TOTAL_SIZE(kind, mSize) total += mSize;
FOR_EACH_SIZE(ADD_TO_TOTAL_SIZE)
#undef ADD_TO_TOTAL_SIZE
#define FRAME_ID(classname) \
total += FRAME_ID_STAT_FIELD(classname);
#define FRAME_ID(classname, ...) \
total += FRAME_ID_STAT_FIELD(classname);
#define ABSTRACT_FRAME_ID(...)
#include "nsFrameIdList.h"
#undef FRAME_ID
#undef ABSTRACT_FRAME_ID
return total;
}
#define DECL_SIZE(kind, mSize) size_t mSize;
FOR_EACH_SIZE(DECL_SIZE)
#undef DECL_SIZE
#define FRAME_ID(classname) size_t FRAME_ID_STAT_FIELD(classname);
#define FRAME_ID(classname, ...) size_t FRAME_ID_STAT_FIELD(classname);
#define ABSTRACT_FRAME_ID(...)
#include "nsFrameIdList.h"
#undef FRAME_ID
#undef ABSTRACT_FRAME_ID
int dummy; // present just to absorb the trailing comma from FRAME_ID in the
// constructor

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

@ -194,12 +194,14 @@ nsPresArena::AddSizeOfExcludingThis(mozilla::MallocSizeOf aMallocSizeOf,
size_t* p;
switch (entry - mFreeLists) {
#define FRAME_ID(classname) \
#define FRAME_ID(classname, ...) \
case nsQueryFrame::classname##_id: \
p = &aArenaStats->FRAME_ID_STAT_FIELD(classname); \
break;
#define ABSTRACT_FRAME_ID(...)
#include "nsFrameIdList.h"
#undef FRAME_ID
#undef ABSTRACT_FRAME_ID
case eArenaObjectID_nsLineBox:
p = &aArenaStats->mLineBoxes;
break;

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

@ -116,6 +116,20 @@ using namespace mozilla::layers;
using namespace mozilla::layout;
typedef nsAbsoluteContainingBlock::AbsPosReflowFlags AbsPosReflowFlags;
const mozilla::LayoutFrameType nsIFrame::sLayoutFrameTypes[
#define FRAME_ID(...) 1 +
#define ABSTRACT_FRAME_ID(...)
#include "nsFrameIdList.h"
#undef FRAME_ID
#undef ABSTRACT_FRAME_ID
0] = {
#define FRAME_ID(class_, type_, ...) mozilla::LayoutFrameType:: type_,
#define ABSTRACT_FRAME_ID(...)
#include "nsFrameIdList.h"
#undef FRAME_ID
#undef ABSTRACT_FRAME_ID
};
// Struct containing cached metrics for box-wrapped frames.
struct nsBoxLayoutMetrics
{

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

@ -2,179 +2,183 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
FRAME_ID(BRFrame)
FRAME_ID(DetailsFrame)
FRAME_ID(nsAutoRepeatBoxFrame)
FRAME_ID(nsBCTableCellFrame)
FRAME_ID(nsBackdropFrame)
FRAME_ID(nsBlockFrame)
FRAME_ID(nsBox)
FRAME_ID(nsBoxFrame)
FRAME_ID(nsBulletFrame)
FRAME_ID(nsButtonBoxFrame)
FRAME_ID(nsCanvasFrame)
FRAME_ID(nsColorControlFrame)
FRAME_ID(nsColumnSetFrame)
FRAME_ID(nsComboboxControlFrame)
FRAME_ID(nsComboboxDisplayFrame)
FRAME_ID(nsContainerFrame)
FRAME_ID(nsContinuingTextFrame)
FRAME_ID(nsDateTimeControlFrame)
FRAME_ID(nsDeckFrame)
FRAME_ID(nsDocElementBoxFrame)
FRAME_ID(nsFieldSetFrame)
FRAME_ID(nsFileControlFrame)
FRAME_ID(nsFirstLetterFrame)
FRAME_ID(nsFirstLineFrame)
FRAME_ID(nsFlexContainerFrame)
FRAME_ID(nsFormControlFrame)
FRAME_ID(nsFrame)
FRAME_ID(nsGfxButtonControlFrame)
FRAME_ID(nsGfxCheckboxControlFrame)
FRAME_ID(nsGfxRadioControlFrame)
FRAME_ID(nsGridContainerFrame)
FRAME_ID(nsGridRowGroupFrame)
FRAME_ID(nsGridRowLeafFrame)
FRAME_ID(nsGroupBoxFrame)
FRAME_ID(nsHTMLButtonControlFrame)
FRAME_ID(nsHTMLCanvasFrame)
FRAME_ID(nsHTMLFramesetBlankFrame)
FRAME_ID(nsHTMLFramesetBorderFrame)
FRAME_ID(nsHTMLFramesetFrame)
FRAME_ID(nsHTMLScrollFrame)
FRAME_ID(nsIAnonymousContentCreator)
FRAME_ID(nsIComboboxControlFrame)
FRAME_ID(nsIFormControlFrame)
FRAME_ID(nsIFrame)
FRAME_ID(nsIFrameFrame)
FRAME_ID(nsIListControlFrame)
FRAME_ID(nsIMathMLFrame)
FRAME_ID(nsIMenuFrame)
FRAME_ID(nsIObjectFrame)
FRAME_ID(nsIPageSequenceFrame)
FRAME_ID(nsIPercentBSizeObserver)
FRAME_ID(nsIRootBox)
FRAME_ID(nsSVGDisplayableFrame)
FRAME_ID(nsISVGSVGFrame)
FRAME_ID(nsIScrollableFrame)
FRAME_ID(nsIScrollbarMediator)
FRAME_ID(nsISelectControlFrame)
FRAME_ID(nsIStatefulFrame)
FRAME_ID(nsITableCellLayout)
FRAME_ID(nsITableLayout)
FRAME_ID(nsITextControlFrame)
FRAME_ID(nsITreeBoxObject)
FRAME_ID(nsImageBoxFrame)
FRAME_ID(nsImageControlFrame)
FRAME_ID(nsImageFrame)
FRAME_ID(nsInlineFrame)
FRAME_ID(nsLeafBoxFrame)
FRAME_ID(nsLeafFrame)
FRAME_ID(nsLegendFrame)
FRAME_ID(nsListBoxBodyFrame)
FRAME_ID(nsListControlFrame)
FRAME_ID(nsListItemFrame)
FRAME_ID(nsMathMLContainerFrame)
FRAME_ID(nsMathMLFrame)
FRAME_ID(nsMathMLmactionFrame)
FRAME_ID(nsMathMLmathBlockFrame)
FRAME_ID(nsMathMLmathInlineFrame)
FRAME_ID(nsMathMLmencloseFrame)
FRAME_ID(nsMathMLmfencedFrame)
FRAME_ID(nsMathMLmfracFrame)
FRAME_ID(nsMathMLmmultiscriptsFrame)
FRAME_ID(nsMathMLmoFrame)
FRAME_ID(nsMathMLmoverFrame)
FRAME_ID(nsMathMLmpaddedFrame)
FRAME_ID(nsMathMLmrootFrame)
FRAME_ID(nsMathMLmrowFrame)
FRAME_ID(nsMathMLmspaceFrame)
FRAME_ID(nsMathMLmsqrtFrame)
FRAME_ID(nsMathMLmstyleFrame)
FRAME_ID(nsMathMLmtableFrame)
FRAME_ID(nsMathMLmtableWrapperFrame)
FRAME_ID(nsMathMLmtdFrame)
FRAME_ID(nsMathMLmtdInnerFrame)
FRAME_ID(nsMathMLmtrFrame)
FRAME_ID(nsMathMLmunderFrame)
FRAME_ID(nsMathMLmunderoverFrame)
FRAME_ID(nsMathMLsemanticsFrame)
FRAME_ID(nsMathMLTokenFrame)
FRAME_ID(nsMenuBarFrame)
FRAME_ID(nsMenuFrame)
FRAME_ID(nsMenuPopupFrame)
FRAME_ID(nsMeterFrame)
FRAME_ID(nsNumberControlFrame)
FRAME_ID(nsPluginFrame)
FRAME_ID(nsPageBreakFrame)
FRAME_ID(nsPageContentFrame)
FRAME_ID(nsPageFrame)
FRAME_ID(nsPlaceholderFrame)
FRAME_ID(nsPopupSetFrame)
FRAME_ID(nsProgressFrame)
FRAME_ID(nsProgressMeterFrame)
FRAME_ID(nsRangeFrame)
FRAME_ID(nsResizerFrame)
FRAME_ID(nsRootBoxFrame)
FRAME_ID(nsRubyBaseContainerFrame)
FRAME_ID(nsRubyBaseFrame)
FRAME_ID(nsRubyContentFrame)
FRAME_ID(nsRubyFrame)
FRAME_ID(nsRubyTextContainerFrame)
FRAME_ID(nsRubyTextFrame)
FRAME_ID(nsScrollbarButtonFrame)
FRAME_ID(nsScrollbarFrame)
FRAME_ID(nsSelectsAreaFrame)
FRAME_ID(nsSimplePageSequenceFrame)
FRAME_ID(nsSliderFrame)
FRAME_ID(nsSplittableFrame)
FRAME_ID(nsSplitterFrame)
FRAME_ID(nsStackFrame)
FRAME_ID(nsSubDocumentFrame)
FRAME_ID(nsSVGAFrame)
FRAME_ID(nsSVGClipPathFrame)
FRAME_ID(nsSVGContainerFrame)
FRAME_ID(nsSVGDisplayContainerFrame)
FRAME_ID(SVGFEContainerFrame)
FRAME_ID(SVGFEImageFrame)
FRAME_ID(SVGFELeafFrame)
FRAME_ID(SVGFEUnstyledLeafFrame)
FRAME_ID(nsSVGFilterFrame)
FRAME_ID(nsSVGForeignObjectFrame)
FRAME_ID(nsSVGGenericContainerFrame)
FRAME_ID(nsSVGGFrame)
FRAME_ID(nsSVGGradientFrame)
FRAME_ID(nsSVGImageFrame)
FRAME_ID(nsSVGInnerSVGFrame)
FRAME_ID(nsSVGLinearGradientFrame)
FRAME_ID(nsSVGMarkerFrame)
FRAME_ID(nsSVGMarkerAnonChildFrame)
FRAME_ID(nsSVGMaskFrame)
FRAME_ID(nsSVGOuterSVGFrame)
FRAME_ID(nsSVGOuterSVGAnonChildFrame)
FRAME_ID(nsSVGPaintServerFrame)
FRAME_ID(SVGGeometryFrame)
FRAME_ID(nsSVGPatternFrame)
FRAME_ID(nsSVGRadialGradientFrame)
FRAME_ID(nsSVGStopFrame)
FRAME_ID(nsSVGSwitchFrame)
FRAME_ID(SVGTextFrame)
FRAME_ID(nsSVGUseFrame)
FRAME_ID(SVGViewFrame)
FRAME_ID(nsTableCellFrame)
FRAME_ID(nsTableColFrame)
FRAME_ID(nsTableColGroupFrame)
FRAME_ID(nsTableFrame)
FRAME_ID(nsTableWrapperFrame)
FRAME_ID(nsTableRowFrame)
FRAME_ID(nsTableRowGroupFrame)
FRAME_ID(nsTextBoxFrame)
FRAME_ID(nsTextControlFrame)
FRAME_ID(nsTextFrame)
FRAME_ID(nsTitleBarFrame)
FRAME_ID(nsTreeBodyFrame)
FRAME_ID(nsTreeColFrame)
FRAME_ID(nsVideoFrame)
FRAME_ID(nsXULLabelFrame)
FRAME_ID(nsXULScrollFrame)
FRAME_ID(ViewportFrame)
FRAME_ID(BRFrame, Br)
FRAME_ID(DetailsFrame, Details)
FRAME_ID(nsAutoRepeatBoxFrame, Box)
FRAME_ID(nsBCTableCellFrame, BCTableCell)
FRAME_ID(nsBackdropFrame, Backdrop)
FRAME_ID(nsBlockFrame, Block)
FRAME_ID(nsBox, None)
FRAME_ID(nsBoxFrame, Box)
FRAME_ID(nsBulletFrame, Bullet)
FRAME_ID(nsButtonBoxFrame, Box)
FRAME_ID(nsCanvasFrame, Canvas)
FRAME_ID(nsColorControlFrame, ColorControl)
FRAME_ID(nsColumnSetFrame, ColumnSet)
FRAME_ID(nsComboboxControlFrame, ComboboxControl)
FRAME_ID(nsComboboxDisplayFrame, ComboboxDisplay)
FRAME_ID(nsContinuingTextFrame, Text)
FRAME_ID(nsDateTimeControlFrame, DateTimeControl)
FRAME_ID(nsDeckFrame, Deck)
FRAME_ID(nsDocElementBoxFrame, Box)
FRAME_ID(nsFieldSetFrame, FieldSet)
FRAME_ID(nsFileControlFrame, Block)
FRAME_ID(nsFirstLetterFrame, Letter)
FRAME_ID(nsFirstLineFrame, Line)
FRAME_ID(nsFlexContainerFrame, FlexContainer)
FRAME_ID(nsFrame, None)
FRAME_ID(nsGfxButtonControlFrame, GfxButtonControl)
FRAME_ID(nsGfxCheckboxControlFrame, FormControl)
FRAME_ID(nsGfxRadioControlFrame, FormControl)
FRAME_ID(nsGridContainerFrame, GridContainer)
FRAME_ID(nsGridRowGroupFrame, Box)
FRAME_ID(nsGridRowLeafFrame, Box)
FRAME_ID(nsGroupBoxFrame, Box)
FRAME_ID(nsHTMLButtonControlFrame, HTMLButtonControl)
FRAME_ID(nsHTMLCanvasFrame, HTMLCanvas)
FRAME_ID(nsHTMLFramesetBlankFrame, None)
FRAME_ID(nsHTMLFramesetBorderFrame, None)
FRAME_ID(nsHTMLFramesetFrame, FrameSet)
FRAME_ID(nsHTMLScrollFrame, Scroll)
FRAME_ID(nsImageBoxFrame, ImageBox)
FRAME_ID(nsImageControlFrame, ImageControl)
FRAME_ID(nsImageFrame, Image)
FRAME_ID(nsInlineFrame, Inline)
FRAME_ID(nsLeafBoxFrame, LeafBox)
FRAME_ID(nsLegendFrame, Legend)
FRAME_ID(nsListBoxBodyFrame, Box)
FRAME_ID(nsListControlFrame, ListControl)
FRAME_ID(nsListItemFrame, Box)
FRAME_ID(nsMathMLFrame, None)
FRAME_ID(nsMathMLmactionFrame, None)
FRAME_ID(nsMathMLmathBlockFrame, Block)
FRAME_ID(nsMathMLmathInlineFrame, Inline)
FRAME_ID(nsMathMLmencloseFrame, None)
FRAME_ID(nsMathMLmfencedFrame, None)
FRAME_ID(nsMathMLmfracFrame, None)
FRAME_ID(nsMathMLmmultiscriptsFrame, None)
FRAME_ID(nsMathMLmoFrame, None)
FRAME_ID(nsMathMLmoverFrame, None) // XXX unused?
FRAME_ID(nsMathMLmpaddedFrame, None)
FRAME_ID(nsMathMLmrootFrame, None)
FRAME_ID(nsMathMLmrowFrame, None)
FRAME_ID(nsMathMLmspaceFrame, None)
FRAME_ID(nsMathMLmsqrtFrame, None)
FRAME_ID(nsMathMLmstyleFrame, None) // XXX unused?
FRAME_ID(nsMathMLmtableFrame, Table)
FRAME_ID(nsMathMLmtableWrapperFrame, TableWrapper)
FRAME_ID(nsMathMLmtdFrame, TableCell)
FRAME_ID(nsMathMLmtdInnerFrame, Block)
FRAME_ID(nsMathMLmtrFrame, TableRow)
FRAME_ID(nsMathMLmunderFrame, None) // XXX unused?
FRAME_ID(nsMathMLmunderoverFrame, None)
FRAME_ID(nsMathMLsemanticsFrame, None)
FRAME_ID(nsMathMLTokenFrame, None)
FRAME_ID(nsMenuBarFrame, Box)
FRAME_ID(nsMenuFrame, Menu)
FRAME_ID(nsMenuPopupFrame, MenuPopup)
FRAME_ID(nsMeterFrame, Meter)
FRAME_ID(nsNumberControlFrame, NumberControl)
FRAME_ID(nsPluginFrame, Object)
FRAME_ID(nsPageBreakFrame, PageBreak)
FRAME_ID(nsPageContentFrame, PageContent)
FRAME_ID(nsPageFrame, Page)
FRAME_ID(nsPlaceholderFrame, Placeholder)
FRAME_ID(nsPopupSetFrame, PopupSet)
FRAME_ID(nsProgressFrame, Progress)
FRAME_ID(nsProgressMeterFrame, Box)
FRAME_ID(nsRangeFrame, Range)
FRAME_ID(nsResizerFrame, Box)
FRAME_ID(nsRootBoxFrame, Root)
FRAME_ID(nsRubyBaseContainerFrame, RubyBaseContainer)
FRAME_ID(nsRubyBaseFrame, RubyBase)
FRAME_ID(nsRubyFrame, Ruby)
FRAME_ID(nsRubyTextContainerFrame, RubyTextContainer)
FRAME_ID(nsRubyTextFrame, RubyText)
FRAME_ID(nsScrollbarButtonFrame, Box)
FRAME_ID(nsScrollbarFrame, Scrollbar)
FRAME_ID(nsSelectsAreaFrame, Block)
FRAME_ID(nsSimplePageSequenceFrame, Sequence)
FRAME_ID(nsSliderFrame, Slider)
FRAME_ID(nsSplitterFrame, Box)
FRAME_ID(nsStackFrame, Box)
FRAME_ID(nsSubDocumentFrame, SubDocument)
FRAME_ID(nsSVGAFrame, SVGA)
FRAME_ID(nsSVGClipPathFrame, SVGClipPath)
FRAME_ID(nsSVGContainerFrame, None)
FRAME_ID(SVGFEContainerFrame, SVGFEContainer)
FRAME_ID(SVGFEImageFrame, SVGFEImage)
FRAME_ID(SVGFELeafFrame, SVGFELeaf)
FRAME_ID(SVGFEUnstyledLeafFrame, SVGFEUnstyledLeaf)
FRAME_ID(nsSVGFilterFrame, SVGFilter)
FRAME_ID(nsSVGForeignObjectFrame, SVGForeignObject)
FRAME_ID(nsSVGGenericContainerFrame, SVGGenericContainer)
FRAME_ID(nsSVGGFrame, SVGG)
FRAME_ID(nsSVGImageFrame, SVGImage)
FRAME_ID(nsSVGInnerSVGFrame, SVGInnerSVG)
FRAME_ID(nsSVGLinearGradientFrame, SVGLinearGradient)
FRAME_ID(nsSVGMarkerFrame, SVGMarker)
FRAME_ID(nsSVGMarkerAnonChildFrame, SVGMarkerAnonChild)
FRAME_ID(nsSVGMaskFrame, SVGMask)
FRAME_ID(nsSVGOuterSVGFrame, SVGOuterSVG)
FRAME_ID(nsSVGOuterSVGAnonChildFrame, SVGOuterSVGAnonChild)
FRAME_ID(SVGGeometryFrame, SVGGeometry)
FRAME_ID(nsSVGPatternFrame, SVGPattern)
FRAME_ID(nsSVGRadialGradientFrame, SVGRadialGradient)
FRAME_ID(nsSVGStopFrame, SVGStop)
FRAME_ID(nsSVGSwitchFrame, SVGSwitch)
FRAME_ID(SVGTextFrame, SVGText)
FRAME_ID(nsSVGUseFrame, SVGUse)
FRAME_ID(SVGViewFrame, SVGView)
FRAME_ID(nsTableCellFrame, TableCell)
FRAME_ID(nsTableColFrame, TableCol)
FRAME_ID(nsTableColGroupFrame, TableColGroup)
FRAME_ID(nsTableFrame, Table)
FRAME_ID(nsTableWrapperFrame, TableWrapper)
FRAME_ID(nsTableRowFrame, TableRow)
FRAME_ID(nsTableRowGroupFrame, TableRowGroup)
FRAME_ID(nsTextBoxFrame, LeafBox)
FRAME_ID(nsTextControlFrame, TextInput)
FRAME_ID(nsTextFrame, Text)
FRAME_ID(nsTitleBarFrame, Box)
FRAME_ID(nsTreeBodyFrame, LeafBox)
FRAME_ID(nsTreeColFrame, Box)
FRAME_ID(nsVideoFrame, HTMLVideo)
FRAME_ID(nsXULLabelFrame, XULLabel)
FRAME_ID(nsXULScrollFrame, Scroll)
FRAME_ID(ViewportFrame, Viewport)
// Non-concrete classes (for FrameIID use)
ABSTRACT_FRAME_ID(nsContainerFrame)
ABSTRACT_FRAME_ID(nsFormControlFrame)
ABSTRACT_FRAME_ID(nsIFrame)
ABSTRACT_FRAME_ID(nsLeafFrame)
ABSTRACT_FRAME_ID(nsMathMLContainerFrame)
ABSTRACT_FRAME_ID(nsRubyContentFrame)
ABSTRACT_FRAME_ID(nsSplittableFrame)
ABSTRACT_FRAME_ID(nsSVGDisplayContainerFrame)
ABSTRACT_FRAME_ID(nsSVGGradientFrame)
ABSTRACT_FRAME_ID(nsSVGPaintServerFrame)
// Interfaces (for FrameIID use)
ABSTRACT_FRAME_ID(nsIAnonymousContentCreator)
ABSTRACT_FRAME_ID(nsIComboboxControlFrame)
ABSTRACT_FRAME_ID(nsIFormControlFrame)
ABSTRACT_FRAME_ID(nsIFrameFrame)
ABSTRACT_FRAME_ID(nsIListControlFrame)
ABSTRACT_FRAME_ID(nsIMathMLFrame)
ABSTRACT_FRAME_ID(nsIMenuFrame)
ABSTRACT_FRAME_ID(nsIObjectFrame)
ABSTRACT_FRAME_ID(nsIPageSequenceFrame)
ABSTRACT_FRAME_ID(nsIPercentBSizeObserver)
ABSTRACT_FRAME_ID(nsIRootBox)
ABSTRACT_FRAME_ID(nsIScrollableFrame)
ABSTRACT_FRAME_ID(nsIScrollbarMediator)
ABSTRACT_FRAME_ID(nsISelectControlFrame)
ABSTRACT_FRAME_ID(nsISVGSVGFrame)
ABSTRACT_FRAME_ID(nsIStatefulFrame)
ABSTRACT_FRAME_ID(nsITableCellLayout)
ABSTRACT_FRAME_ID(nsITableLayout)
ABSTRACT_FRAME_ID(nsITextControlFrame)
ABSTRACT_FRAME_ID(nsITreeBoxObject)
ABSTRACT_FRAME_ID(nsSVGDisplayableFrame)

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

@ -615,7 +615,6 @@ public:
, mNextSibling(nullptr)
, mPrevSibling(nullptr)
, mState(NS_FRAME_FIRST_REFLOW | NS_FRAME_IS_DIRTY)
, mType(aType)
, mClass(aID)
{
mozilla::PodZero(&mOverflow);
@ -2704,12 +2703,15 @@ public:
*
* @see mozilla::LayoutFrameType
*/
mozilla::LayoutFrameType Type() const { return mType; }
mozilla::LayoutFrameType Type() const {
MOZ_ASSERT(uint8_t(mClass) < mozilla::ArrayLength(sLayoutFrameTypes));
return sLayoutFrameTypes[uint8_t(mClass)];
}
#define FRAME_TYPE(name_) \
bool Is##name_##Frame() const \
{ \
return mType == mozilla::LayoutFrameType::name_; \
return Type() == mozilla::LayoutFrameType::name_; \
}
#include "mozilla/FrameTypeList.h"
#undef FRAME_TYPE
@ -3901,9 +3903,6 @@ protected:
/** @see GetWritingMode() */
mozilla::WritingMode mWritingMode;
/** The type of the frame. */
mozilla::LayoutFrameType mType;
/** The ClassID of the concrete class of this instance. */
ClassID mClass; // 1 byte
@ -4030,6 +4029,15 @@ private:
bool HasOpacityInternal(float aThreshold,
mozilla::EffectSet* aEffectSet = nullptr) const;
// Maps mClass to LayoutFrameType.
static const mozilla::LayoutFrameType sLayoutFrameTypes[
#define FRAME_ID(...) 1 +
#define ABSTRACT_FRAME_ID(...)
#include "nsFrameIdList.h"
#undef FRAME_ID
#undef ABSTRACT_FRAME_ID
0];
#ifdef DEBUG_FRAME_DUMP
public:
static void IndentBy(FILE* out, int32_t aIndent) {

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

@ -58,9 +58,11 @@ class nsQueryFrame
{
public:
enum FrameIID {
#define FRAME_ID(classname) classname##_id,
#define FRAME_ID(classname, ...) classname##_id,
#define ABSTRACT_FRAME_ID(classname) classname##_id,
#include "nsFrameIdList.h"
#undef FRAME_ID
#undef ABSTRACT_FRAME_ID
// This marker allows mozilla::ArenaObjectID to "extend" this enum
// with additional sequential values for use in nsPresArena and