Bug 1419924 Part 1: Capture FlexLine cross start position to report to devtools when requested. draft
authorBrad Werth <bwerth@mozilla.com>
Fri, 01 Dec 2017 13:02:35 -0800
changeset 709360 a8715fcbb35d69991dad5c37c5577b927587bdbd
parent 709358 de929d0cc98a08670de2580009ebe56fdf0d86d4
child 709361 c2566011721b77a47180fc6e9e5c9b0c1725c4f1
push id92627
push userbwerth@mozilla.com
push dateFri, 08 Dec 2017 00:02:37 +0000
bugs1419924
milestone59.0a1
Bug 1419924 Part 1: Capture FlexLine cross start position to report to devtools when requested. MozReview-Commit-ID: 8opVdr4W9S3
layout/generic/nsFlexContainerFrame.cpp
layout/generic/nsFlexContainerFrame.h
--- 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;