mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-12 21:05:36 +00:00
Bug 1463115 - Try to skip irrelevant (collapsed/trimmed) whitespace when collecting used font faces for devtools inspector. r=jwatt
This commit is contained in:
parent
2884d63e52
commit
ad2647f459
@ -3157,7 +3157,7 @@ nsRange::GetClientRectsAndTexts(
|
||||
|
||||
nsresult
|
||||
nsRange::GetUsedFontFaces(nsTArray<nsAutoPtr<InspectorFontFace>>& aResult,
|
||||
uint32_t aMaxRanges)
|
||||
uint32_t aMaxRanges, bool aSkipCollapsedWhitespace)
|
||||
{
|
||||
NS_ENSURE_TRUE(mStart.Container(), NS_ERROR_UNEXPECTED);
|
||||
|
||||
@ -3201,17 +3201,20 @@ nsRange::GetUsedFontFaces(nsTArray<nsAutoPtr<InspectorFontFace>>& aResult,
|
||||
int32_t offset = startContainer == endContainer ?
|
||||
mEnd.Offset() : content->GetText()->GetLength();
|
||||
nsLayoutUtils::GetFontFacesForText(frame, mStart.Offset(), offset,
|
||||
true, fontFaces, aMaxRanges);
|
||||
true, fontFaces, aMaxRanges,
|
||||
aSkipCollapsedWhitespace);
|
||||
continue;
|
||||
}
|
||||
if (node == endContainer) {
|
||||
nsLayoutUtils::GetFontFacesForText(frame, 0, mEnd.Offset(),
|
||||
true, fontFaces, aMaxRanges);
|
||||
true, fontFaces, aMaxRanges,
|
||||
aSkipCollapsedWhitespace);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
nsLayoutUtils::GetFontFacesForFrames(frame, fontFaces, aMaxRanges);
|
||||
nsLayoutUtils::GetFontFacesForFrames(frame, fontFaces, aMaxRanges,
|
||||
aSkipCollapsedWhitespace);
|
||||
}
|
||||
|
||||
// Take ownership of the InspectorFontFaces in the table and move them into
|
||||
|
@ -270,7 +270,8 @@ public:
|
||||
// where each face was used).
|
||||
nsresult GetUsedFontFaces(
|
||||
nsTArray<nsAutoPtr<mozilla::dom::InspectorFontFace>>& aResult,
|
||||
uint32_t aMaxRanges);
|
||||
uint32_t aMaxRanges,
|
||||
bool aSkipCollapsedWhitespace);
|
||||
|
||||
// nsIMutationObserver methods
|
||||
NS_DECL_NSIMUTATIONOBSERVER_CHARACTERDATACHANGED
|
||||
|
@ -65,7 +65,8 @@ namespace InspectorUtils {
|
||||
// to access via its .ranges attribute.
|
||||
[NewObject, Throws] sequence<InspectorFontFace> getUsedFontFaces(
|
||||
Range range,
|
||||
optional unsigned long maxRanges = 0);
|
||||
optional unsigned long maxRanges = 0,
|
||||
optional boolean skipCollapsedWhitespace = true);
|
||||
|
||||
sequence<DOMString> getCSSPseudoElementNames();
|
||||
void addPseudoClassLock(Element element,
|
||||
|
@ -7864,14 +7864,16 @@ nsLayoutUtils::AssertTreeOnlyEmptyNextInFlows(nsIFrame *aSubtreeRoot)
|
||||
static void
|
||||
GetFontFacesForFramesInner(nsIFrame* aFrame,
|
||||
nsLayoutUtils::UsedFontFaceTable& aFontFaces,
|
||||
uint32_t aMaxRanges)
|
||||
uint32_t aMaxRanges,
|
||||
bool aSkipCollapsedWhitespace)
|
||||
{
|
||||
MOZ_ASSERT(aFrame, "NULL frame pointer");
|
||||
|
||||
if (aFrame->IsTextFrame()) {
|
||||
if (!aFrame->GetPrevContinuation()) {
|
||||
nsLayoutUtils::GetFontFacesForText(aFrame, 0, INT32_MAX, true,
|
||||
aFontFaces, aMaxRanges);
|
||||
aFontFaces, aMaxRanges,
|
||||
aSkipCollapsedWhitespace);
|
||||
}
|
||||
return;
|
||||
}
|
||||
@ -7883,7 +7885,8 @@ GetFontFacesForFramesInner(nsIFrame* aFrame,
|
||||
for (nsFrameList::Enumerator e(children); !e.AtEnd(); e.Next()) {
|
||||
nsIFrame* child = e.get();
|
||||
child = nsPlaceholderFrame::GetRealFrameFor(child);
|
||||
GetFontFacesForFramesInner(child, aFontFaces, aMaxRanges);
|
||||
GetFontFacesForFramesInner(child, aFontFaces, aMaxRanges,
|
||||
aSkipCollapsedWhitespace);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -7891,12 +7894,14 @@ GetFontFacesForFramesInner(nsIFrame* aFrame,
|
||||
/* static */ nsresult
|
||||
nsLayoutUtils::GetFontFacesForFrames(nsIFrame* aFrame,
|
||||
UsedFontFaceTable& aFontFaces,
|
||||
uint32_t aMaxRanges)
|
||||
uint32_t aMaxRanges,
|
||||
bool aSkipCollapsedWhitespace)
|
||||
{
|
||||
MOZ_ASSERT(aFrame, "NULL frame pointer");
|
||||
|
||||
while (aFrame) {
|
||||
GetFontFacesForFramesInner(aFrame, aFontFaces, aMaxRanges);
|
||||
GetFontFacesForFramesInner(aFrame, aFontFaces, aMaxRanges,
|
||||
aSkipCollapsedWhitespace);
|
||||
aFrame = GetNextContinuationOrIBSplitSibling(aFrame);
|
||||
}
|
||||
|
||||
@ -7967,7 +7972,8 @@ nsLayoutUtils::GetFontFacesForText(nsIFrame* aFrame,
|
||||
int32_t aEndOffset,
|
||||
bool aFollowContinuations,
|
||||
UsedFontFaceTable& aFontFaces,
|
||||
uint32_t aMaxRanges)
|
||||
uint32_t aMaxRanges,
|
||||
bool aSkipCollapsedWhitespace)
|
||||
{
|
||||
MOZ_ASSERT(aFrame, "NULL frame pointer");
|
||||
|
||||
@ -8007,9 +8013,13 @@ nsLayoutUtils::GetFontFacesForText(nsIFrame* aFrame,
|
||||
}
|
||||
}
|
||||
|
||||
if (!aSkipCollapsedWhitespace ||
|
||||
(curr->HasAnyNoncollapsedCharacters() &&
|
||||
curr->HasNonSuppressedText())) {
|
||||
gfxTextRun::Range range(iter.ConvertOriginalToSkipped(fstart),
|
||||
iter.ConvertOriginalToSkipped(fend));
|
||||
AddFontsFromTextRun(textRun, curr, iter, range, aFontFaces, aMaxRanges);
|
||||
}
|
||||
|
||||
curr = next;
|
||||
} while (aFollowContinuations && curr);
|
||||
|
@ -2288,7 +2288,8 @@ public:
|
||||
*/
|
||||
static nsresult GetFontFacesForFrames(nsIFrame* aFrame,
|
||||
UsedFontFaceTable& aResult,
|
||||
uint32_t aMaxRanges);
|
||||
uint32_t aMaxRanges,
|
||||
bool aSkipCollapsedWhitespace);
|
||||
|
||||
/**
|
||||
* Adds all font faces used within the specified range of text in aFrame,
|
||||
@ -2302,7 +2303,8 @@ public:
|
||||
int32_t aEndOffset,
|
||||
bool aFollowContinuations,
|
||||
UsedFontFaceTable& aResult,
|
||||
uint32_t aMaxRanges);
|
||||
uint32_t aMaxRanges,
|
||||
bool aSkipCollapsedWhitespace);
|
||||
|
||||
/**
|
||||
* Walks the frame tree starting at aFrame looking for textRuns.
|
||||
|
@ -10420,7 +10420,11 @@ nsTextFrame::CountGraphemeClusters() const
|
||||
bool
|
||||
nsTextFrame::HasNonSuppressedText()
|
||||
{
|
||||
if (HasAnyStateBits(TEXT_ISNOT_ONLY_WHITESPACE)) {
|
||||
if (HasAnyStateBits(TEXT_ISNOT_ONLY_WHITESPACE |
|
||||
// If we haven't reflowed yet, or are currently doing so,
|
||||
// just return true because we can't be sure.
|
||||
NS_FRAME_FIRST_REFLOW |
|
||||
NS_FRAME_IN_REFLOW)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -666,6 +666,8 @@ public:
|
||||
|
||||
uint32_t CountGraphemeClusters() const;
|
||||
|
||||
bool HasAnyNoncollapsedCharacters() override;
|
||||
|
||||
protected:
|
||||
virtual ~nsTextFrame();
|
||||
|
||||
@ -882,8 +884,6 @@ protected:
|
||||
|
||||
void ClearFrameOffsetCache();
|
||||
|
||||
bool HasAnyNoncollapsedCharacters() override;
|
||||
|
||||
void ClearMetrics(ReflowOutput& aMetrics);
|
||||
|
||||
/**
|
||||
|
@ -617,10 +617,12 @@ InspectorUtils::GetCleanComputedStyleForElement(dom::Element* aElement,
|
||||
InspectorUtils::GetUsedFontFaces(GlobalObject& aGlobalObject,
|
||||
nsRange& aRange,
|
||||
uint32_t aMaxRanges,
|
||||
bool aSkipCollapsedWhitespace,
|
||||
nsTArray<nsAutoPtr<InspectorFontFace>>& aResult,
|
||||
ErrorResult& aRv)
|
||||
{
|
||||
nsresult rv = aRange.GetUsedFontFaces(aResult, aMaxRanges);
|
||||
nsresult rv = aRange.GetUsedFontFaces(aResult, aMaxRanges,
|
||||
aSkipCollapsedWhitespace);
|
||||
if (NS_FAILED(rv)) {
|
||||
aRv.Throw(rv);
|
||||
}
|
||||
|
@ -225,6 +225,7 @@ public:
|
||||
nsRange& aRange,
|
||||
uint32_t aMaxRanges, // max number of ranges to
|
||||
// record for each face
|
||||
bool aSkipCollapsedWhitespace,
|
||||
nsTArray<nsAutoPtr<InspectorFontFace>>& aResult,
|
||||
ErrorResult& aRv);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user