Bug 1419924 Part 1: Capture FlexLine cross start position to report to devtools when requested.
MozReview-Commit-ID: 8opVdr4W9S3
--- a/layout/generic/nsFlexContainerFrame.cpp
+++ b/layout/generic/nsFlexContainerFrame.cpp
@@ -4493,23 +4493,31 @@ nsFlexContainerFrame::DoFlexLayout(nsPre
contentBoxCrossSize, aReflowInput, aAxisTracker);
}
}
const auto justifyContent = IsLegacyBox(aReflowInput.mFrame) ?
ConvertLegacyStyleToJustifyContent(StyleXUL()) :
aReflowInput.mStylePosition->mJustifyContent;
- for (FlexLine* line = lines.getFirst(); line; line = line->getNext()) {
+ lineIndex = 0;
+ for (FlexLine* line = lines.getFirst(); line; line = line->getNext(),
+ ++lineIndex) {
// Main-Axis Alignment - Flexbox spec section 9.5
// ==============================================
line->PositionItemsInMainAxis(justifyContent,
aContentBoxMainSize,
aAxisTracker);
+ // See if we need to extract some computed info for this line.
+ if (MOZ_UNLIKELY(containerInfo)) {
+ ComputedFlexLineInfo& lineInfo = containerInfo->mLines[lineIndex];
+ lineInfo.mCrossStart = crossAxisPosnTracker.GetPosition();
+ }
+
// Cross-Axis Alignment - Flexbox spec section 9.6
// ===============================================
line->PositionItemsInCrossAxis(crossAxisPosnTracker.GetPosition(),
aAxisTracker);
crossAxisPosnTracker.TraverseLine(*line);
crossAxisPosnTracker.TraversePackingSpace();
}
@@ -4711,25 +4719,25 @@ nsFlexContainerFrame::DoFlexLayout(nsPre
}
FinishReflowWithAbsoluteFrames(aPresContext, aDesiredSize,
aReflowInput, aStatus);
NS_FRAME_SET_TRUNCATION(aStatus, aReflowInput, aDesiredSize)
// Finally update our line sizing values in our containerInfo.
- if (containerInfo) {
- uint32_t lineIndex = 0;
+ if (MOZ_UNLIKELY(containerInfo)) {
+ lineIndex = 0;
for (const FlexLine* line = lines.getFirst(); line;
line = line->getNext(), ++lineIndex) {
- ComputedFlexLineInfo* lineInfo = &containerInfo->mLines[lineIndex];
-
- lineInfo->mCrossSize = line->GetLineCrossSize();
- lineInfo->mFirstBaselineOffset = line->GetFirstBaselineOffset();
- lineInfo->mLastBaselineOffset = line->GetLastBaselineOffset();
+ ComputedFlexLineInfo& lineInfo = containerInfo->mLines[lineIndex];
+
+ lineInfo.mCrossSize = line->GetLineCrossSize();
+ lineInfo.mFirstBaselineOffset = line->GetFirstBaselineOffset();
+ lineInfo.mLastBaselineOffset = line->GetLastBaselineOffset();
}
}
}
void
nsFlexContainerFrame::MoveFlexItemToFinalPosition(
const ReflowInput& aReflowInput,
const FlexItem& aItem,
--- a/layout/generic/nsFlexContainerFrame.h
+++ b/layout/generic/nsFlexContainerFrame.h
@@ -49,16 +49,17 @@ struct ComputedFlexItemInfo
nscoord mMainMaxSize;
nscoord mCrossMinSize;
nscoord mCrossMaxSize;
};
struct ComputedFlexLineInfo
{
nsTArray<ComputedFlexItemInfo> mItems;
+ nscoord mCrossStart;
nscoord mCrossSize;
nscoord mFirstBaselineOffset;
nscoord mLastBaselineOffset;
enum GrowthState {
UNCHANGED,
SHRINKING,
GROWING,
} mGrowthState;