Bug 1405875 - Remove old dump/compare regression data methods on frames, and nsIFrameUtil interface and implementation. r=mats
authorL. David Baron <dbaron@dbaron.org>
Thu, 05 Oct 2017 11:15:57 -0700
changeset 435461 c559a947b2ad0739a3f0ca575f9add6f31bcc845
parent 435460 873f355209106292ed7fc47b09034396fa58f1b6
child 435462 694eb292fcf67b75fdeec89060665e601336c52f
push id8114
push userjlorenzo@mozilla.com
push dateThu, 02 Nov 2017 16:33:21 +0000
treeherdermozilla-beta@73e0d89a540f [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmats
bugs1405875
milestone58.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1405875 - Remove old dump/compare regression data methods on frames, and nsIFrameUtil interface and implementation. r=mats These became unused as a result of the removal of nsRegressionTester and the removal of the printing debug file mechanism, earlier in this patch sequence. MozReview-Commit-ID: 9Tftf2AjpPb
layout/build/nsLayoutCID.h
layout/build/nsLayoutModule.cpp
layout/generic/moz.build
layout/generic/nsFrame.cpp
layout/generic/nsFrame.h
layout/generic/nsFrameUtil.cpp
layout/generic/nsIFrame.h
layout/generic/nsIFrameUtil.h
layout/generic/nsSplittableFrame.cpp
layout/generic/nsSplittableFrame.h
--- a/layout/build/nsLayoutCID.h
+++ b/layout/build/nsLayoutCID.h
@@ -9,20 +9,16 @@
 // {1691E1F4-EE41-11d4-9885-00C04FA0CF4B}
 #define NS_FRAMETRAVERSAL_CID \
 { 0x1691e1f4, 0xee41, 0x11d4, { 0x98, 0x85, 0x0, 0xc0, 0x4f, 0xa0, 0xcf, 0x4b } }
 
 /* a6cf90f9-15b3-11d2-932e-00805f8add32 */
 #define NS_LAYOUT_DEBUGGER_CID \
  { 0xa6cf90f9, 0x15b3, 0x11d2,{0x93, 0x2e, 0x00, 0x80, 0x5f, 0x8a, 0xdd, 0x32}}
 
-/* a6cf90d7-15b3-11d2-932e-00805f8add32 */
-#define NS_FRAME_UTIL_CID \
- { 0xa6cf90d5, 0x15b3, 0x11d2,{0x93, 0x2e, 0x00, 0x80, 0x5f, 0x8a, 0xdd, 0x32}}
-
 #define NS_DOMSELECTION_CID \
 {/* {C87A37FC-8109-4ce2-A322-8CDEC925379F}*/ \
  0xc87a37fc, 0x8109, 0x4ce2, { 0xa3, 0x22, 0x8c, 0xde, 0xc9, 0x25, 0x37, 0x9f } }
 
 // {D750A964-2D14-484c-B3AA-8ED7823B5C7B}
 #define NS_BOXOBJECT_CID \
 { 0xd750a964, 0x2d14, 0x484c, { 0xb3, 0xaa, 0x8e, 0xd7, 0x82, 0x3b, 0x5c, 0x7b } }
 
--- a/layout/build/nsLayoutModule.cpp
+++ b/layout/build/nsLayoutModule.cpp
@@ -22,17 +22,16 @@
 #include "nsIContentSerializer.h"
 #include "nsIContentViewer.h"
 #include "nsIController.h"
 #include "nsIControllers.h"
 #include "nsIDOMDOMImplementation.h"
 #include "nsIDocument.h"
 #include "nsIDocumentEncoder.h"
 #include "nsIFactory.h"
-#include "nsIFrameUtil.h"
 #include "nsIIdleService.h"
 #include "nsHTMLStyleSheet.h"
 #include "nsILayoutDebugger.h"
 #include "nsNameSpaceManager.h"
 #include "nsIObserver.h"
 #include "nsIObserverService.h"
 #include "nsIScriptNameSpaceManager.h"
 #include "nsIScriptError.h"
@@ -337,17 +336,16 @@ Shutdown()
     return;
 
   gInitialized = false;
 
   nsLayoutStatics::Release();
 }
 
 #ifdef DEBUG
-nsresult NS_NewFrameUtil(nsIFrameUtil** aResult);
 nsresult NS_NewLayoutDebugger(nsILayoutDebugger** aResult);
 #endif
 
 nsresult NS_NewBoxObject(nsIBoxObject** aResult);
 
 #ifdef MOZ_XUL
 nsresult NS_NewListBoxObject(nsIBoxObject** aResult);
 nsresult NS_NewScrollBoxObject(nsIBoxObject** aResult);
@@ -406,17 +404,16 @@ ctor_(nsISupports* aOuter, REFNSIID aIID
     return NS_ERROR_NO_AGGREGATION;                       \
   }                                                       \
   nsCOMPtr<iface_> inst = func_();                        \
   inst.forget(aResult);                                   \
   return NS_OK;                                           \
 }
 
 #ifdef DEBUG
-MAKE_CTOR(CreateNewFrameUtil,             nsIFrameUtil,                NS_NewFrameUtil)
 MAKE_CTOR(CreateNewLayoutDebugger,        nsILayoutDebugger,           NS_NewLayoutDebugger)
 #endif
 
 MAKE_CTOR(CreateNewFrameTraversal,      nsIFrameTraversal,      NS_CreateFrameTraversal)
 MAKE_CTOR(CreateNewBoxObject,           nsIBoxObject,           NS_NewBoxObject)
 
 #ifdef MOZ_XUL
 MAKE_CTOR(CreateNewListBoxObject,       nsIBoxObject,           NS_NewListBoxObject)
@@ -563,17 +560,16 @@ Construct_nsIScriptSecurityManager(nsISu
     if (!obj)
         return NS_ERROR_OUT_OF_MEMORY;
     if (NS_FAILED(obj->QueryInterface(aIID, aResult)))
         return NS_ERROR_FAILURE;
     return NS_OK;
 }
 
 #ifdef DEBUG
-NS_DEFINE_NAMED_CID(NS_FRAME_UTIL_CID);
 NS_DEFINE_NAMED_CID(NS_LAYOUT_DEBUGGER_CID);
 #endif
 NS_DEFINE_NAMED_CID(NS_FRAMETRAVERSAL_CID);
 NS_DEFINE_NAMED_CID(NS_BOXOBJECT_CID);
 #ifdef MOZ_XUL
 NS_DEFINE_NAMED_CID(NS_LISTBOXOBJECT_CID);
 NS_DEFINE_NAMED_CID(NS_MENUBOXOBJECT_CID);
 NS_DEFINE_NAMED_CID(NS_POPUPBOXOBJECT_CID);
@@ -822,17 +818,16 @@ nsEditingCommandTableConstructor(nsISupp
   // or a service, so we can't become immutable
 
   return commandTable->QueryInterface(aIID, aResult);
 }
 
 static const mozilla::Module::CIDEntry kLayoutCIDs[] = {
   XPCONNECT_CIDENTRIES
 #ifdef DEBUG
-  { &kNS_FRAME_UTIL_CID, false, nullptr, CreateNewFrameUtil },
   { &kNS_LAYOUT_DEBUGGER_CID, false, nullptr, CreateNewLayoutDebugger },
 #endif
   { &kNS_FRAMETRAVERSAL_CID, false, nullptr, CreateNewFrameTraversal },
   { &kNS_BOXOBJECT_CID, false, nullptr, CreateNewBoxObject },
 #ifdef MOZ_XUL
   { &kNS_LISTBOXOBJECT_CID, false, nullptr, CreateNewListBoxObject },
   { &kNS_MENUBOXOBJECT_CID, false, nullptr, CreateNewMenuBoxObject },
   { &kNS_POPUPBOXOBJECT_CID, false, nullptr, CreateNewPopupBoxObject },
--- a/layout/generic/moz.build
+++ b/layout/generic/moz.build
@@ -76,17 +76,16 @@ EXPORTS += [
     'nsFrameList.h',
     'nsFrameSelection.h',
     'nsFrameState.h',
     'nsFrameStateBits.h',
     'nsHTMLParts.h',
     'nsIAnonymousContentCreator.h',
     'nsIFrame.h',
     'nsIFrameInlines.h',
-    'nsIFrameUtil.h',
     'nsILineIterator.h',
     'nsIObjectFrame.h',
     'nsIPageSequenceFrame.h',
     'nsIScrollableFrame.h',
     'nsIScrollPositionListener.h',
     'nsIStatefulFrame.h',
     'nsPluginFrame.h',
     'nsQueryFrame.h',
@@ -143,17 +142,16 @@ UNIFIED_SOURCES += [
     'nsFlexContainerFrame.cpp',
     'nsFloatManager.cpp',
     'nsFontInflationData.cpp',
     'nsFrame.cpp',
     'nsFrameList.cpp',
     'nsFrameSelection.cpp',
     'nsFrameSetFrame.cpp',
     'nsFrameState.cpp',
-    'nsFrameUtil.cpp',
     'nsGfxScrollFrame.cpp',
     'nsGridContainerFrame.cpp',
     'nsHTMLCanvasFrame.cpp',
     'nsImageFrame.cpp',
     'nsImageMap.cpp',
     'nsInlineFrame.cpp',
     'nsIntervalSet.cpp',
     'nsLeafFrame.cpp',
--- a/layout/generic/nsFrame.cpp
+++ b/layout/generic/nsFrame.cpp
@@ -7453,84 +7453,16 @@ nsIFrame::GetConstFrameSelection() const
       return tcf->GetOwnedFrameSelection();
     }
     frame = frame->GetParent();
   }
 
   return PresContext()->PresShell()->ConstFrameSelection();
 }
 
-#ifdef DEBUG
-nsresult
-nsFrame::DumpRegressionData(nsPresContext* aPresContext, FILE* out, int32_t aIndent)
-{
-  IndentBy(out, aIndent);
-  fprintf(out, "<frame va=\"%p\" type=\"", (void*)this);
-  nsAutoString name;
-  GetFrameName(name);
-  XMLQuote(name);
-  fputs(NS_LossyConvertUTF16toASCII(name).get(), out);
-  fprintf(out, "\" state=\"%016llx\" parent=\"%p\">\n",
-          (unsigned long long)GetDebugStateBits(), (void*)GetParent());
-
-  aIndent++;
-  DumpBaseRegressionData(aPresContext, out, aIndent);
-  aIndent--;
-
-  IndentBy(out, aIndent);
-  fprintf(out, "</frame>\n");
-
-  return NS_OK;
-}
-
-void
-nsFrame::DumpBaseRegressionData(nsPresContext* aPresContext, FILE* out, int32_t aIndent)
-{
-  if (GetNextSibling()) {
-    IndentBy(out, aIndent);
-    fprintf(out, "<next-sibling va=\"%p\"/>\n", (void*)GetNextSibling());
-  }
-
-  if (HasView()) {
-    IndentBy(out, aIndent);
-    fprintf(out, "<view va=\"%p\">\n", (void*)GetView());
-    aIndent++;
-    // XXX add in code to dump out view state too...
-    aIndent--;
-    IndentBy(out, aIndent);
-    fprintf(out, "</view>\n");
-  }
-
-  IndentBy(out, aIndent);
-  fprintf(out, "<bbox x=\"%d\" y=\"%d\" w=\"%d\" h=\"%d\"/>\n",
-          mRect.x, mRect.y, mRect.width, mRect.height);
-
-  // Now dump all of the children on all of the child lists
-  ChildListIterator lists(this);
-  for (; !lists.IsDone(); lists.Next()) {
-    IndentBy(out, aIndent);
-    if (lists.CurrentID() != kPrincipalList) {
-      fprintf(out, "<child-list name=\"%s\">\n", mozilla::layout::ChildListName(lists.CurrentID()));
-    }
-    else {
-      fprintf(out, "<child-list>\n");
-    }
-    aIndent++;
-    nsFrameList::Enumerator childFrames(lists.CurrentList());
-    for (; !childFrames.AtEnd(); childFrames.Next()) {
-      nsIFrame* kid = childFrames.get();
-      kid->DumpRegressionData(aPresContext, out, aIndent);
-    }
-    aIndent--;
-    IndentBy(out, aIndent);
-    fprintf(out, "</child-list>\n");
-  }
-}
-#endif
-
 bool
 nsIFrame::IsFrameSelected() const
 {
   NS_ASSERTION(!GetContent() || GetContent()->IsSelectionDescendant(),
                "use the public IsSelected() instead");
   return nsRange::IsNodeSelected(GetContent(), 0,
                                  GetContent()->GetChildCount());
 }
--- a/layout/generic/nsFrame.h
+++ b/layout/generic/nsFrame.h
@@ -491,27 +491,16 @@ public:
   void TraceMsg(const char* fmt, ...) MOZ_FORMAT_PRINTF(2, 3);
 
   // Helper function that verifies that each frame in the list has the
   // NS_FRAME_IS_DIRTY bit set
   static void VerifyDirtyBitSet(const nsFrameList& aFrameList);
 
   static void XMLQuote(nsString& aString);
 
-  /**
-   * Dump out the "base classes" regression data. This should dump
-   * out the interior data, not the "frame" XML container. And it
-   * should call the base classes same named method before doing
-   * anything specific in a derived class. This means that derived
-   * classes need not override DumpRegressionData unless they need
-   * some custom behavior that requires changing how the outer "frame"
-   * XML container is dumped.
-   */
-  virtual void DumpBaseRegressionData(nsPresContext* aPresContext, FILE* out, int32_t aIndent);
-
   // Display Reflow Debugging
   static void* DisplayReflowEnter(nsPresContext*          aPresContext,
                                   nsIFrame*                aFrame,
                                   const ReflowInput& aReflowInput);
   static void* DisplayLayoutEnter(nsIFrame* aFrame);
   static void* DisplayIntrinsicISizeEnter(nsIFrame* aFrame,
                                           const char* aType);
   static void* DisplayIntrinsicSizeEnter(nsIFrame* aFrame,
@@ -739,27 +728,16 @@ public:
 #ifdef DEBUG
 public:
   /**
    * Return the state bits that are relevant to regression tests (that
    * is, those bits which indicate a real difference when they differ
    */
   nsFrameState GetDebugStateBits() const override;
   /**
-   * Called to dump out regression data that describes the layout
-   * of the frame and its children, and so on. The format of the
-   * data is dictated to be XML (using a specific DTD); the
-   * specific kind of data dumped is up to the frame itself, with
-   * the caveat that some base types are defined.
-   * For more information, see XXX.
-   */
-  nsresult DumpRegressionData(nsPresContext* aPresContext,
-                              FILE* out, int32_t aIndent) override;
-
-  /**
    * See if style tree verification is enabled. To enable style tree
    * verification add "styleverifytree:1" to your MOZ_LOG
    * environment variable (any non-zero debug level will work). Or,
    * call SetVerifyStyleTreeEnable with true.
    */
   static bool GetVerifyStyleTreeEnable();
 
   /**
deleted file mode 100644
--- a/layout/generic/nsFrameUtil.cpp
+++ /dev/null
@@ -1,670 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * 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/. */
-
-/* utilities for regression tests based on frame tree comparison */
-
-#include "nsIFrameUtil.h"
-#include "nsFrame.h"
-#include "nsString.h"
-#include "nsRect.h"
-#include <stdlib.h>
-#include "plstr.h"
-
-
-#ifdef DEBUG
-class nsFrameUtil : public nsIFrameUtil {
-protected:
-  virtual ~nsFrameUtil();
-
-public:
-  nsFrameUtil();
-
-  NS_DECL_ISUPPORTS
-
-  NS_IMETHOD CompareRegressionData(FILE* aFile1, FILE* aFile2,int32_t aRegressionOutput=0) override;
-  NS_IMETHOD DumpRegressionData(FILE* aInputFile, FILE* aOutputFile) override;
-
-  struct Node;
-  struct Tag;
-
-  struct NodeList {
-    NodeList();
-    ~NodeList();
-
-    static void Destroy(NodeList* aLists);
-
-    NodeList* next;            // for lists of lists
-    Node* node;
-    char* name;
-  };
-
-  struct Node {
-    Node();
-    ~Node();
-
-    static void Destroy(Node* aNode);
-
-    static Node* Read(FILE* aFile, Tag* aTag);
-
-    static Node* ReadTree(FILE* aFile);
-
-    Node* next;
-    char* type;
-    uint32_t state;
-    nsRect bbox;
-    nsCString styleData;
-    NodeList* lists;
-  };
-
-  struct Tag {
-    Tag();
-    ~Tag();
-
-    static Tag* Parse(FILE* aFile);
-
-    void AddAttr(char* aAttr, char* aValue);
-
-    const char* GetAttr(const char* aAttr);
-
-    void ReadAttrs(FILE* aFile);
-
-    void ToString(nsString& aResult);
-
-    enum Type {
-      open,
-      close,
-      openClose
-    };
-
-    char* name;
-    Type type;
-    char** attributes;
-    int32_t num;
-    int32_t size;
-    char** values;
-  };
-
-  static char* Copy(const char* aString);
-
-  static void DumpNode(Node* aNode, FILE* aOutputFile, int32_t aIndent);
-  static void DumpTree(Node* aNode, FILE* aOutputFile, int32_t aIndent);
-  static bool CompareTrees(Node* aNode1, Node* aNode2);
-};
-
-char*
-nsFrameUtil::Copy(const char* aString)
-{
-  if (aString) {
-    int l = ::strlen(aString);
-    char* c = new char[l+1];
-    if (!c)
-      return nullptr;
-    memcpy(c, aString, l+1);
-    return c;
-  }
-  return nullptr;
-}
-
-//----------------------------------------------------------------------
-
-nsFrameUtil::NodeList::NodeList()
-  : next(nullptr), node(nullptr), name(nullptr)
-{
-}
-
-nsFrameUtil::NodeList::~NodeList()
-{
-  if (nullptr != name) {
-    delete name;
-  }
-  if (nullptr != node) {
-    Node::Destroy(node);
-  }
-}
-
-void
-nsFrameUtil::NodeList::Destroy(NodeList* aLists)
-{
-  while (nullptr != aLists) {
-    NodeList* next = aLists->next;
-    delete aLists;
-    aLists = next;
-  }
-}
-
-//----------------------------------------------------------------------
-
-nsFrameUtil::Node::Node()
-  : next(nullptr), type(nullptr), state(0), lists(nullptr)
-{
-}
-
-nsFrameUtil::Node::~Node()
-{
-  if (nullptr != type) {
-    delete type;
-  }
-  if (nullptr != lists) {
-    NodeList::Destroy(lists);
-  }
-}
-
-void
-nsFrameUtil::Node::Destroy(Node* aList)
-{
-  while (nullptr != aList) {
-    Node* next = aList->next;
-    delete aList;
-    aList = next;
-  }
-}
-
-static int32_t GetInt(nsFrameUtil::Tag* aTag, const char* aAttr)
-{
-  const char* value = aTag->GetAttr(aAttr);
-  if (nullptr != value) {
-    return int32_t( atoi(value) );
-  }
-  return 0;
-}
-
-nsFrameUtil::Node*
-nsFrameUtil::Node::ReadTree(FILE* aFile)
-{
-  Tag* tag = Tag::Parse(aFile);
-  if (nullptr == tag) {
-    return nullptr;
-  }
-  if (PL_strcmp(tag->name, "frame") != 0) {
-    delete tag;
-    return nullptr;
-  }
-  Node* result = Read(aFile, tag);
-  fclose(aFile);
-  return result;
-}
-
-nsFrameUtil::Node*
-nsFrameUtil::Node::Read(FILE* aFile, Tag* tag)
-{
-  Node* node = new Node;
-  node->type = Copy(tag->GetAttr("type"));
-  if (!node->type) {
-    /* crash() */
-  }
-  node->state = GetInt(tag, "state");
-  delete tag;
-
-  for (;;) {
-    tag = Tag::Parse(aFile);
-    if (nullptr == tag) break;
-    if (PL_strcmp(tag->name, "frame") == 0) {
-      delete tag;
-      break;
-    }
-    if (PL_strcmp(tag->name, "bbox") == 0) {
-      nscoord x = nscoord( GetInt(tag, "x") );
-      nscoord y = nscoord( GetInt(tag, "y") );
-      nscoord w = nscoord( GetInt(tag, "w") );
-      nscoord h = nscoord( GetInt(tag, "h") );
-      node->bbox.SetRect(x, y, w, h);
-    }
-    else if (PL_strcmp(tag->name, "child-list") == 0) {
-      NodeList* list = new NodeList();
-      list->name = Copy(tag->GetAttr("name"));
-      if (!list->name) {
-        /* crash() */
-      }
-      list->next = node->lists;
-      node->lists = list;
-      delete tag;
-
-      Node** tailp = &list->node;
-      for (;;) {
-        tag = Tag::Parse(aFile);
-        if (nullptr == tag) {
-          break;
-        }
-        if (PL_strcmp(tag->name, "child-list") == 0) {
-          break;
-        }
-        if (PL_strcmp(tag->name, "frame") != 0) {
-          break;
-        }
-        Node* child = Node::Read(aFile, tag);
-        if (nullptr == child) {
-          break;
-        }
-        *tailp = child;
-        tailp = &child->next;
-      }
-    }
-    else if((PL_strcmp(tag->name, "font") == 0) ||
-            (PL_strcmp(tag->name, "color") == 0) ||
-            (PL_strcmp(tag->name, "spacing") == 0) ||
-            (PL_strcmp(tag->name, "list") == 0) ||
-            (PL_strcmp(tag->name, "position") == 0) ||
-            (PL_strcmp(tag->name, "text") == 0) ||
-            (PL_strcmp(tag->name, "display") == 0) ||
-            (PL_strcmp(tag->name, "table") == 0) ||
-            (PL_strcmp(tag->name, "content") == 0) ||
-            (PL_strcmp(tag->name, "UI") == 0) ||
-            (PL_strcmp(tag->name, "print") == 0)) {
-      const char* attr = tag->GetAttr("data");
-      node->styleData.Append('|');
-      node->styleData.Append(attr ? attr : "null attr");
-    }
-
-    delete tag;
-  }
-  return node;
-}
-
-//----------------------------------------------------------------------
-
-nsFrameUtil::Tag::Tag()
-  : name(nullptr), type(open), attributes(nullptr), num(0), size(0),
-    values(nullptr)
-{
-}
-
-nsFrameUtil::Tag::~Tag()
-{
-  int32_t i, n = num;
-  if (0 != n) {
-    for (i = 0; i < n; i++) {
-      delete attributes[i];
-      delete values[i];
-    }
-    delete attributes;
-    delete values;
-  }
-}
-
-void
-nsFrameUtil::Tag::AddAttr(char* aAttr, char* aValue)
-{
-  if (num == size) {
-    int32_t newSize = size * 2 + 4;
-    char** a = new char*[newSize];
-    char** v = new char*[newSize];
-    if (0 != num) {
-      memcpy(a, attributes, num * sizeof(char*));
-      memcpy(v, values, num * sizeof(char*));
-      delete attributes;
-      delete values;
-    }
-    attributes = a;
-    values = v;
-    size = newSize;
-  }
-  attributes[num] = aAttr;
-  values[num] = aValue;
-  num = num + 1;
-}
-
-const char*
-nsFrameUtil::Tag::GetAttr(const char* aAttr)
-{
-  int32_t i, n = num;
-  for (i = 0; i < n; i++) {
-    if (PL_strcmp(attributes[i], aAttr) == 0) {
-      return values[i];
-    }
-  }
-  return nullptr;
-}
-
-static inline int IsWhiteSpace(int c) {
-  return (c == ' ') || (c == '\t') || (c == '\n') || (c == '\r');
-}
-
-static bool EatWS(FILE* aFile)
-{
-  for (;;) {
-    int c = getc(aFile);
-    if (c < 0) {
-      return false;
-    }
-    if (!IsWhiteSpace(c)) {
-      ungetc(c, aFile);
-      break;
-    }
-  }
-  return true;
-}
-
-static bool Expect(FILE* aFile, char aChar)
-{
-  int c = getc(aFile);
-  if (c < 0) return false;
-  if (c != aChar) {
-    ungetc(c, aFile);
-    return false;
-  }
-  return true;
-}
-
-static char* ReadIdent(FILE* aFile)
-{
-  char id[1000];
-  char* ip = id;
-  char* end = ip + sizeof(id) - 1;
-  while (ip < end) {
-    int c = fgetc(aFile);
-    if (c < 0) return nullptr;
-    if ((c == '=') || (c == '>') || (c == '/') || IsWhiteSpace(c)) {
-      ungetc(c, aFile);
-      break;
-    }
-    *ip++ = char(c);
-  }
-  *ip = '\0';
-  return nsFrameUtil::Copy(id);
-  /* may return a null pointer */
-}
-
-static char* ReadString(FILE* aFile)
-{
-  if (!Expect(aFile, '\"')) {
-    return nullptr;
-  }
-  char id[1000];
-  char* ip = id;
-  char* end = ip + sizeof(id) - 1;
-  while (ip < end) {
-    int c = fgetc(aFile);
-    if (c < 0) return nullptr;
-    if (c == '\"') {
-      break;
-    }
-    *ip++ = char(c);
-  }
-  *ip = '\0';
-  return nsFrameUtil::Copy(id);
-  /* may return a null pointer */
-}
-
-void
-nsFrameUtil::Tag::ReadAttrs(FILE* aFile)
-{
-  for (;;) {
-    if (!EatWS(aFile)) {
-      break;
-    }
-    int c = getc(aFile);
-    if (c < 0) break;
-    if (c == '/') {
-      if (!EatWS(aFile)) {
-        return;
-      }
-      if (Expect(aFile, '>')) {
-        type = openClose;
-        break;
-      }
-    }
-    else if (c == '>') {
-      break;
-    }
-    ungetc(c, aFile);
-    char* attr = ReadIdent(aFile);
-    if ((nullptr == attr) || !EatWS(aFile)) {
-      break;
-    }
-    char* value = nullptr;
-    if (Expect(aFile, '=')) {
-      value = ReadString(aFile);
-      if (nullptr == value) {
-        delete [] attr;
-        break;
-      }
-    }
-    AddAttr(attr, value);
-  }
-}
-
-nsFrameUtil::Tag*
-nsFrameUtil::Tag::Parse(FILE* aFile)
-{
-  if (!EatWS(aFile)) {
-    return nullptr;
-  }
-  if (Expect(aFile, '<')) {
-    Tag* tag = new Tag;
-    if (Expect(aFile, '/')) {
-      tag->type = close;
-    }
-    else {
-      tag->type = open;
-    }
-    tag->name = ReadIdent(aFile);
-    tag->ReadAttrs(aFile);
-    return tag;
-  }
-  return nullptr;
-}
-
-void
-nsFrameUtil::Tag::ToString(nsString& aResult)
-{
-  aResult.Truncate();
-  aResult.Append(char16_t('<'));
-  if (type == close) {
-    aResult.Append(char16_t('/'));
-  }
-  aResult.AppendASCII(name);
-  if (0 != num) {
-    int32_t i, n = num;
-    for (i = 0; i < n; i++) {
-      aResult.Append(char16_t(' '));
-      aResult.AppendASCII(attributes[i]);
-      if (values[i]) {
-        aResult.AppendLiteral("=\"");
-        aResult.AppendASCII(values[i]);
-        aResult.Append(char16_t('\"'));
-      }
-    }
-  }
-  if (type == openClose) {
-    aResult.Append(char16_t('/'));
-  }
-  aResult.Append(char16_t('>'));
-}
-
-//----------------------------------------------------------------------
-
-nsresult
-NS_NewFrameUtil(nsIFrameUtil** aResult)
-{
-  NS_PRECONDITION(nullptr != aResult, "null pointer");
-  if (nullptr == aResult) {
-    return NS_ERROR_NULL_POINTER;
-  }
-
-  nsFrameUtil* it = new nsFrameUtil();
-
-  NS_ADDREF(*aResult = it);
-  return NS_OK;
-}
-
-nsFrameUtil::nsFrameUtil()
-{
-}
-
-nsFrameUtil::~nsFrameUtil()
-{
-}
-
-NS_IMPL_ISUPPORTS(nsFrameUtil, nsIFrameUtil)
-
-void
-nsFrameUtil::DumpNode(Node* aNode, FILE* aOutputFile, int32_t aIndent)
-{
-  nsFrame::IndentBy(aOutputFile, aIndent);
-  fprintf(aOutputFile, "%s 0x%x %d,%d,%d,%d, %s\n", aNode->type, aNode->state,
-          aNode->bbox.x, aNode->bbox.y,
-          aNode->bbox.width, aNode->bbox.height,
-          aNode->styleData.get());
-}
-
-void
-nsFrameUtil::DumpTree(Node* aNode, FILE* aOutputFile, int32_t aIndent)
-{
-  while (nullptr != aNode) {
-    DumpNode(aNode, aOutputFile, aIndent);
-    nsFrameUtil::NodeList* lists = aNode->lists;
-    if (nullptr != lists) {
-      while (nullptr != lists) {
-        nsFrame::IndentBy(aOutputFile, aIndent);
-        fprintf(aOutputFile, " list: %s\n",
-                lists->name ? lists->name : "primary");
-        DumpTree(lists->node, aOutputFile, aIndent + 1);
-        lists = lists->next;
-      }
-    }
-    aNode = aNode->next;
-  }
-}
-
-bool
-nsFrameUtil::CompareTrees(Node* tree1, Node* tree2)
-{
-  bool result = true;
-  for (;; tree1 = tree1->next, tree2 = tree2->next) {
-    // Make sure both nodes are non-null, or at least agree with each other
-    if (nullptr == tree1) {
-      if (nullptr == tree2) {
-        break;
-      }
-      printf("first tree prematurely ends\n");
-      return false;
-    }
-    else if (nullptr == tree2) {
-      printf("second tree prematurely ends\n");
-      return false;
-    }
-
-    // Check the attributes that we care about
-    if (0 != PL_strcmp(tree1->type, tree2->type)) {
-      printf("frame type mismatch: %s vs. %s\n", tree1->type, tree2->type);
-      printf("Node 1:\n");
-      DumpNode(tree1, stdout, 1);
-      printf("Node 2:\n");
-      DumpNode(tree2, stdout, 1);
-      return false;
-    }
-
-    // Ignore the XUL scrollbar frames
-    static const char kScrollbarFrame[] = "ScrollbarFrame";
-    if (0 == PL_strncmp(tree1->type, kScrollbarFrame, sizeof(kScrollbarFrame) - 1))
-      continue;
-
-    if (tree1->state != tree2->state) {
-      printf("frame state mismatch: 0x%x vs. 0x%x\n",
-             tree1->state, tree2->state);
-      printf("Node 1:\n");
-      DumpNode(tree1, stdout, 1);
-      printf("Node 2:\n");
-      DumpNode(tree2, stdout, 1);
-      result = false; // we have a non-critical failure, so remember that but continue
-    }
-    if (tree1->bbox.IsEqualInterior(tree2->bbox)) {
-      printf("frame bbox mismatch: %d,%d,%d,%d vs. %d,%d,%d,%d\n",
-             tree1->bbox.x, tree1->bbox.y,
-             tree1->bbox.width, tree1->bbox.height,
-             tree2->bbox.x, tree2->bbox.y,
-             tree2->bbox.width, tree2->bbox.height);
-      printf("Node 1:\n");
-      DumpNode(tree1, stdout, 1);
-      printf("Node 2:\n");
-      DumpNode(tree2, stdout, 1);
-      result = false; // we have a non-critical failure, so remember that but continue
-    }
-    if (tree1->styleData != tree2->styleData) {
-      printf("frame style data mismatch: %s vs. %s\n",
-        tree1->styleData.get(),
-        tree2->styleData.get());
-    }
-
-    // Check child lists too
-    NodeList* list1 = tree1->lists;
-    NodeList* list2 = tree2->lists;
-    for (;;) {
-      if (nullptr == list1) {
-        if (nullptr != list2) {
-          printf("first tree prematurely ends (no child lists)\n");
-          printf("Node 1:\n");
-          DumpNode(tree1, stdout, 1);
-          printf("Node 2:\n");
-          DumpNode(tree2, stdout, 1);
-          return false;
-        }
-        else {
-          break;
-        }
-      }
-      if (nullptr == list2) {
-        printf("second tree prematurely ends (no child lists)\n");
-        printf("Node 1:\n");
-        DumpNode(tree1, stdout, 1);
-        printf("Node 2:\n");
-        DumpNode(tree2, stdout, 1);
-        return false;
-      }
-      if (0 != PL_strcmp(list1->name, list2->name)) {
-        printf("child-list name mismatch: %s vs. %s\n",
-               list1->name ? list1->name : "(null)",
-               list2->name ? list2->name : "(null)");
-        result = false; // we have a non-critical failure, so remember that but continue
-      }
-      else {
-        bool equiv = CompareTrees(list1->node, list2->node);
-        if (!equiv) {
-          return equiv;
-        }
-      }
-      list1 = list1->next;
-      list2 = list2->next;
-    }
-  }
-  return result;
-}
-
-NS_IMETHODIMP
-nsFrameUtil::CompareRegressionData(FILE* aFile1, FILE* aFile2,int32_t aRegressionOutput)
-{
-  Node* tree1 = Node::ReadTree(aFile1);
-  Node* tree2 = Node::ReadTree(aFile2);
-
-  nsresult rv = NS_OK;
-  if (!CompareTrees(tree1, tree2)) {
-    // only output this if aRegressionOutput is 0
-    if( 0 == aRegressionOutput ){
-      printf("Regression data 1:\n");
-      DumpTree(tree1, stdout, 0);
-      printf("Regression data 2:\n");
-      DumpTree(tree2, stdout, 0);
-    }
-    rv = NS_ERROR_FAILURE;
-  }
-
-  Node::Destroy(tree1);
-  Node::Destroy(tree2);
-
-  return rv;
-}
-
-NS_IMETHODIMP
-nsFrameUtil::DumpRegressionData(FILE* aInputFile, FILE* aOutputFile)
-{
-  Node* tree1 = Node::ReadTree(aInputFile);
-  if (nullptr != tree1) {
-    DumpTree(tree1, aOutputFile, 0);
-    Node::Destroy(tree1);
-    return NS_OK;
-  }
-  return NS_ERROR_FAILURE;
-}
-#endif
--- a/layout/generic/nsIFrame.h
+++ b/layout/generic/nsIFrame.h
@@ -4442,18 +4442,16 @@ public:
   void DumpFrameTreeLimited() const;
 
   virtual nsresult  GetFrameName(nsAString& aResult) const = 0;
 #endif
 
 #ifdef DEBUG
 public:
   virtual nsFrameState  GetDebugStateBits() const = 0;
-  virtual nsresult  DumpRegressionData(nsPresContext* aPresContext,
-                                       FILE* out, int32_t aIndent) = 0;
 #endif
 };
 
 //----------------------------------------------------------------------
 
 /**
  * AutoWeakFrame can be used to keep a reference to a nsIFrame in a safe way.
  * Whenever an nsIFrame object is deleted, the AutoWeakFrames pointing
deleted file mode 100644
--- a/layout/generic/nsIFrameUtil.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * 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/. */
-
-/* utilities for regression tests based on frame tree comparison */
-
-#ifndef nsIFrameUtil_h___
-#define nsIFrameUtil_h___
-
-#include <stdio.h>
-#include "nsISupports.h"
-
-/* a6cf90d4-15b3-11d2-932e-00805f8add32 */
-#define NS_IFRAME_UTIL_IID \
- { 0xa6cf90d6, 0x15b3, 0x11d2,{0x93, 0x2e, 0x00, 0x80, 0x5f, 0x8a, 0xdd, 0x32}}
-
-/**
- * Frame utility interface
- */
-class nsIFrameUtil : public nsISupports {
-public:
-  NS_DECLARE_STATIC_IID_ACCESSOR(NS_IFRAME_UTIL_IID)
-  /**
-   * Compare two regression data dumps. The return status will be NS_OK
-   * if the trees compare favoribly, otherwise the return will indicate
-   * NS_ERROR_FAILURE. Other return status's will indicate some other
-   * type of failure. The files, aFile1 and aFile2 are closed before
-   * returning.
-   * aRegressionOutput will vary output, 0 is full output, 1 is brief
-   */
-  NS_IMETHOD CompareRegressionData(FILE* aFile1, FILE* aFile2,int32_t aRegressionOutput) = 0;
-
-  /**
-   * Display the regression dump data stored in aInputFile1 to
-   * aOutputFile . The file is closed before returning. If the
-   * regression data is in error somehow then NS_ERROR_FAILURE will be
-   * returned.
-   */
-  NS_IMETHOD DumpRegressionData(FILE* aInputFile, FILE* aOutputFile) = 0;
-};
-
-NS_DEFINE_STATIC_IID_ACCESSOR(nsIFrameUtil, NS_IFRAME_UTIL_IID)
-
-#endif /* nsIFrameUtil_h___ */
--- a/layout/generic/nsSplittableFrame.cpp
+++ b/layout/generic/nsSplittableFrame.cpp
@@ -292,25 +292,8 @@ nsSplittableFrame::PreReflowBlockLevelLo
   }
   if (MOZ_LIKELY(StyleBorder()->mBoxDecorationBreak !=
                    StyleBoxDecorationBreak::Clone) &&
       GetPrevInFlow()) {
     return LogicalSides(mozilla::eLogicalSideBitsBStart);
   }
   return LogicalSides();
 }
-
-#ifdef DEBUG
-void
-nsSplittableFrame::DumpBaseRegressionData(nsPresContext* aPresContext, FILE* out, int32_t aIndent)
-{
-  nsFrame::DumpBaseRegressionData(aPresContext, out, aIndent);
-  if (nullptr != mNextContinuation) {
-    IndentBy(out, aIndent);
-    fprintf(out, "<next-continuation va=\"%p\"/>\n", (void*)mNextContinuation);
-  }
-  if (nullptr != mPrevContinuation) {
-    IndentBy(out, aIndent);
-    fprintf(out, "<prev-continuation va=\"%p\"/>\n", (void*)mPrevContinuation);
-  }
-
-}
-#endif
--- a/layout/generic/nsSplittableFrame.h
+++ b/layout/generic/nsSplittableFrame.h
@@ -109,17 +109,13 @@ protected:
    * should apply the block-end border/padding etc (except for "true" overflow
    * containers which always skip block sides).  You're then expected to
    * recalculate the block-end side (as needed) when you know |this| frame's
    * reflow status is INCOMPLETE.
    * This method is intended for frames that breaks in the block axis.
    */
   LogicalSides PreReflowBlockLevelLogicalSkipSides() const;
 
-#ifdef DEBUG
-  virtual void DumpBaseRegressionData(nsPresContext* aPresContext, FILE* out, int32_t aIndent) override;
-#endif
-
   nsIFrame*   mPrevContinuation;
   nsIFrame*   mNextContinuation;
 };
 
 #endif /* nsSplittableFrame_h___ */