Changeset 259557 in webkit


Ignore:
Timestamp:
Apr 5, 2020 4:23:59 PM (4 years ago)
Author:
Simon Fraser
Message:

Make RenderObject TextStream-loggable
https://bugs.webkit.org/show_bug.cgi?id=210035

Reviewed by Zalan Bujtas.

Add operator<<(TextStream, const RenderObject&) and add virtual debugDescription() functions on
Node and RenderObject which should eventually replace the awkward formatForDebugger(char* buffer, unsigned length).

Convert RenderLayer to use renderer's debug description.

  • dom/Element.cpp:

(WebCore::Element::debugDescription const):

  • dom/Element.h:
  • dom/Node.cpp:

(WebCore::Node::debugDescription const):
(WebCore::operator<<):

  • dom/Node.h:
  • rendering/RenderLayer.cpp:

(WebCore::RenderLayer::name const):

  • rendering/RenderObject.cpp:

(WebCore::RenderObject::debugDescription const):
(WebCore::operator<<):

  • rendering/RenderObject.h:
Location:
trunk/Source/WebCore
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r259553 r259557  
     12020-04-05  Simon Fraser  <simon.fraser@apple.com>
     2
     3        Make RenderObject TextStream-loggable
     4        https://bugs.webkit.org/show_bug.cgi?id=210035
     5
     6        Reviewed by Zalan Bujtas.
     7
     8        Add operator<<(TextStream, const RenderObject&) and add virtual debugDescription() functions on
     9        Node and RenderObject which should eventually replace the awkward formatForDebugger(char* buffer, unsigned length).
     10
     11        Convert RenderLayer to use renderer's debug description.
     12
     13        * dom/Element.cpp:
     14        (WebCore::Element::debugDescription const):
     15        * dom/Element.h:
     16        * dom/Node.cpp:
     17        (WebCore::Node::debugDescription const):
     18        (WebCore::operator<<):
     19        * dom/Node.h:
     20        * rendering/RenderLayer.cpp:
     21        (WebCore::RenderLayer::name const):
     22        * rendering/RenderObject.cpp:
     23        (WebCore::RenderObject::debugDescription const):
     24        (WebCore::operator<<):
     25        * rendering/RenderObject.h:
     26
    1272020-04-05  Zan Dobersek  <zdobersek@igalia.com>
    228
  • trunk/Source/WebCore/dom/Element.cpp

    r259401 r259557  
    26422642}
    26432643
     2644String Element::debugDescription() const
     2645{
     2646    StringBuilder builder;
     2647
     2648    builder.append(nodeName());
     2649
     2650    if (hasID()) {
     2651        builder.appendLiteral(" id=\'");
     2652        builder.append(getIdAttribute());
     2653        builder.append('\'');
     2654    }
     2655
     2656    if (hasClass()) {
     2657        builder.appendLiteral(" class=\'");
     2658        size_t classNamesToDump = classNames().size();
     2659        const size_t maxNumClassNames = 7;
     2660        bool addEllipsis = false;
     2661        if (classNamesToDump > maxNumClassNames) {
     2662            classNamesToDump = maxNumClassNames;
     2663            addEllipsis = true;
     2664        }
     2665       
     2666        for (size_t i = 0; i < classNamesToDump; ++i) {
     2667            if (i > 0)
     2668                builder.append(' ');
     2669            builder.append(classNames()[i]);
     2670        }
     2671        if (addEllipsis)
     2672            builder.append("...");
     2673        builder.append('\'');
     2674    }
     2675
     2676    return builder.toString();
     2677}
     2678
    26442679#if ENABLE(TREE_DEBUGGING)
    26452680
  • trunk/Source/WebCore/dom/Element.h

    r258834 r259557  
    616616    ElementIdentifier createElementIdentifier();
    617617
     618    String debugDescription() const override;
     619
    618620protected:
    619621    Element(const QualifiedName&, Document&, ConstructionType);
     
    687689    LayoutRect absoluteEventBounds(bool& boundsIncludeAllDescendantElements, bool& includesFixedPositionElements);
    688690    LayoutRect absoluteEventBoundsOfElementAndDescendants(bool& includesFixedPositionElements);
    689    
     691
    690692#if ENABLE(TREE_DEBUGGING)
    691693    void formatForDebugger(char* buffer, unsigned length) const override;
  • trunk/Source/WebCore/dom/Node.cpp

    r259376 r259557  
    17521752}
    17531753
     1754String Node::debugDescription() const
     1755{
     1756    StringBuilder builder;
     1757
     1758    builder.append(nodeName());
     1759
     1760    if (isTextNode()) {
     1761        String value = nodeValue();
     1762        value.replaceWithLiteral('\\', "\\\\");
     1763        value.replaceWithLiteral('\n', "\\n");
     1764       
     1765        const size_t maxDumpLength = 30;
     1766        if (value.length() > maxDumpLength) {
     1767            value.truncate(maxDumpLength - 10);
     1768            value.append("..."_s);
     1769        }
     1770       
     1771        builder.append(' ');
     1772        builder.append('\"');
     1773        builder.append(value);
     1774        builder.append('\"');
     1775    }
     1776
     1777    return builder.toString();
     1778}
     1779
    17541780#if ENABLE(TREE_DEBUGGING)
    17551781
     
    26202646TextStream& operator<<(TextStream& ts, const Node& node)
    26212647{
    2622 #if ENABLE(TREE_DEBUGGING)
    2623     const size_t FormatBufferSize = 512;
    2624     char s[FormatBufferSize];
    2625     node.formatForDebugger(s, FormatBufferSize);
    2626     ts << "node " << &node << " " << s;
    2627 #else
    2628     ts << "node " << &node << " " << node.nodeName();
    2629 #endif
    2630 
     2648    ts << "node " << &node << " " << node.debugDescription();
    26312649    return ts;
    26322650}
  • trunk/Source/WebCore/dom/Node.h

    r259435 r259557  
    432432    virtual void removedFromAncestor(RemovalType, ContainerNode& oldParentOfRemovedTree);
    433433
     434    virtual String debugDescription() const;
     435
    434436#if ENABLE(TREE_DEBUGGING)
    435437    virtual void formatForDebugger(char* buffer, unsigned length) const;
  • trunk/Source/WebCore/rendering/RenderLayer.cpp

    r259445 r259557  
    831831{
    832832    StringBuilder name;
    833 
    834     if (Element* element = renderer().element()) {
    835         name.append(" <");
    836         name.append(element->tagName().convertToLowercaseWithoutLocale());
    837         name.append('>');
    838 
    839         if (element->hasID()) {
    840             name.appendLiteral(" id=\'");
    841             name.append(element->getIdAttribute());
    842             name.append('\'');
    843         }
    844 
    845         if (element->hasClass()) {
    846             name.appendLiteral(" class=\'");
    847             size_t classNamesToDump = element->classNames().size();
    848             const size_t maxNumClassNames = 7;
    849             bool addEllipsis = false;
    850             if (classNamesToDump > maxNumClassNames) {
    851                 classNamesToDump = maxNumClassNames;
    852                 addEllipsis = true;
    853             }
    854            
    855             for (size_t i = 0; i < classNamesToDump; ++i) {
    856                 if (i > 0)
    857                     name.append(' ');
    858                 name.append(element->classNames()[i]);
    859             }
    860             if (addEllipsis)
    861                 name.append("...");
    862             name.append('\'');
    863         }
    864     } else
    865         name.append(renderer().renderName());
     833    name.append(renderer().debugDescription());
    866834
    867835    if (isReflection())
  • trunk/Source/WebCore/rendering/RenderObject.cpp

    r258508 r259557  
    7272#include <algorithm>
    7373#include <stdio.h>
     74#include <wtf/HexNumber.h>
    7475#include <wtf/IsoMallocInlines.h>
    7576#include <wtf/RefCountedLeakCounter.h>
     
    19081909}
    19091910
     1911String RenderObject::debugDescription() const
     1912{
     1913    StringBuilder builder;
     1914
     1915    builder.append(renderName());
     1916    builder.append(" 0x"_s);
     1917    builder.append(hex(reinterpret_cast<uintptr_t>(this), Lowercase));
     1918    builder.append(' ');
     1919
     1920    if (node())
     1921        builder.append(node()->debugDescription());
     1922   
     1923    return builder.toString();
     1924}
     1925
     1926TextStream& operator<<(TextStream& ts, const RenderObject& renderer)
     1927{
     1928    ts << renderer.debugDescription();
     1929    return ts;
     1930}
     1931
    19101932#if ENABLE(TREE_DEBUGGING)
    19111933
  • trunk/Source/WebCore/rendering/RenderObject.h

    r258508 r259557  
    3939#include <wtf/IsoMalloc.h>
    4040#include <wtf/WeakPtr.h>
     41
     42namespace WTF {
     43class TextStream;
     44}
    4145
    4246namespace WebCore {
     
    779783    void initializeFragmentedFlowStateOnInsertion();
    780784    virtual void insertedIntoTree();
     785
     786    virtual String debugDescription() const;
    781787
    782788protected:
     
    11071113inline void Node::setRenderer(RenderObject* renderer) { m_rendererWithStyleFlags.setPointer(renderer); }
    11081114
     1115WTF::TextStream& operator<<(WTF::TextStream&, const RenderObject&);
     1116
    11091117#if ENABLE(TREE_DEBUGGING)
    11101118void printRenderTreeForLiveDocuments();
Note: See TracChangeset for help on using the changeset viewer.