⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 176509 in webkit


Ignore:
Timestamp:
Nov 23, 2014, 10:00:52 AM (12 years ago)
Author:
Simon Fraser
Message:

Extend WKRenderObject and WKRenderLayer with some more useful data
https://bugs.webkit.org/show_bug.cgi?id=139006

Reviewed by Sam Weinig.
Source/WebCore:

Export WebCore::RenderLayerBacking::backingStoreMemoryEstimate() const.

  • WebCore.exp.in:

Source/WebKit2:

Implement WKRenderLayerGetBackingStoreMemoryEstimate,
WKRenderObjectCopyTextSnippet and WKRenderObjectGetTextLength for improved
RenderLayer and RenderTree display in clients of the C SPI.

  • Shared/API/c/WKRenderLayer.cpp:

(WKRenderLayerGetBackingStoreMemoryEstimate):

  • Shared/API/c/WKRenderLayer.h:
  • Shared/API/c/WKRenderObject.cpp:

(WKRenderObjectCopyTextSnippet):
(WKRenderObjectGetTextLength):

  • Shared/API/c/WKRenderObject.h:
  • Shared/UserMessageCoders.h:

(WebKit::UserMessageEncoder::baseEncode):
(WebKit::UserMessageDecoder::baseDecode):

  • Shared/WebRenderLayer.cpp:

(WebKit::WebRenderLayer::create):
(WebKit::WebRenderLayer::WebRenderLayer):

  • Shared/WebRenderLayer.h:

(WebKit::WebRenderLayer::backingStoreMemoryEstimate):

  • Shared/WebRenderObject.cpp:

(WebKit::WebRenderObject::create):
(WebKit::WebRenderObject::WebRenderObject):

  • Shared/WebRenderObject.h:

(WebKit::WebRenderObject::textSnippet):
(WebKit::WebRenderObject::textLength):

Location:
trunk/Source
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r176507 r176509  
     12014-11-22  Simon Fraser  <simon.fraser@apple.com>
     2
     3        Extend WKRenderObject and WKRenderLayer with some more useful data
     4        https://bugs.webkit.org/show_bug.cgi?id=139006
     5
     6        Reviewed by Sam Weinig.
     7
     8        Export WebCore::RenderLayerBacking::backingStoreMemoryEstimate() const.
     9
     10        * WebCore.exp.in:
     11
    1122014-11-22  Antti Koivisto  <antti@apple.com>
    213
  • trunk/Source/WebCore/WebCore.exp.in

    r176501 r176509  
    18431843__ZNK7WebCore18RenderLayerBacking12tiledBackingEv
    18441844__ZNK7WebCore18RenderLayerBacking20compositingLayerTypeEv
     1845__ZNK7WebCore18RenderLayerBacking26backingStoreMemoryEstimateEv
    18451846__ZNK7WebCore19AnimationController11isSuspendedEv
    18461847__ZNK7WebCore19AnimationController24numberOfActiveAnimationsEPNS_8DocumentE
  • trunk/Source/WebKit2/ChangeLog

    r176499 r176509  
     12014-11-22  Simon Fraser  <simon.fraser@apple.com>
     2
     3        Extend WKRenderObject and WKRenderLayer with some more useful data
     4        https://bugs.webkit.org/show_bug.cgi?id=139006
     5
     6        Reviewed by Sam Weinig.
     7       
     8        Implement WKRenderLayerGetBackingStoreMemoryEstimate,
     9        WKRenderObjectCopyTextSnippet and WKRenderObjectGetTextLength for improved
     10        RenderLayer and RenderTree display in clients of the C SPI.       
     11
     12        * Shared/API/c/WKRenderLayer.cpp:
     13        (WKRenderLayerGetBackingStoreMemoryEstimate):
     14        * Shared/API/c/WKRenderLayer.h:
     15        * Shared/API/c/WKRenderObject.cpp:
     16        (WKRenderObjectCopyTextSnippet):
     17        (WKRenderObjectGetTextLength):
     18        * Shared/API/c/WKRenderObject.h:
     19        * Shared/UserMessageCoders.h:
     20        (WebKit::UserMessageEncoder::baseEncode):
     21        (WebKit::UserMessageDecoder::baseDecode):
     22        * Shared/WebRenderLayer.cpp:
     23        (WebKit::WebRenderLayer::create):
     24        (WebKit::WebRenderLayer::WebRenderLayer):
     25        * Shared/WebRenderLayer.h:
     26        (WebKit::WebRenderLayer::backingStoreMemoryEstimate):
     27        * Shared/WebRenderObject.cpp:
     28        (WebKit::WebRenderObject::create):
     29        (WebKit::WebRenderObject::WebRenderObject):
     30        * Shared/WebRenderObject.h:
     31        (WebKit::WebRenderObject::textSnippet):
     32        (WebKit::WebRenderObject::textLength):
     33
    1342014-11-21  Jer Noble  <jer.noble@apple.com>
    235
  • trunk/Source/WebKit2/Shared/API/c/WKRenderLayer.cpp

    r121584 r176509  
    5454        return toCopiedAPI(renderLayer->renderer()->elementTagName());
    5555
    56     return 0;
     56    return nullptr;
    5757}
    5858
     
    6363        return toCopiedAPI(renderLayer->renderer()->elementID());
    6464
    65     return 0;
     65    return nullptr;
    6666}
    6767
     
    111111}
    112112
     113WK_EXPORT double WKRenderLayerGetBackingStoreMemoryEstimate(WKRenderLayerRef renderLayerRef)
     114{
     115    return toImpl(renderLayerRef)->backingStoreMemoryEstimate();
     116}
     117
    113118WKArrayRef WKRenderLayerGetNegativeZOrderList(WKRenderLayerRef renderLayerRef)
    114119{
  • trunk/Source/WebKit2/Shared/API/c/WKRenderLayer.h

    r168541 r176509  
    6363
    6464WK_EXPORT WKCompositingLayerType WKRenderLayerGetCompositingLayerType(WKRenderLayerRef renderLayer);
     65WK_EXPORT double WKRenderLayerGetBackingStoreMemoryEstimate(WKRenderLayerRef renderLayer);
    6566
    6667WK_EXPORT WKArrayRef WKRenderLayerGetNegativeZOrderList(WKRenderLayerRef renderLayer);
  • trunk/Source/WebKit2/Shared/API/c/WKRenderObject.cpp

    r159234 r176509  
    4343}
    4444
     45WKStringRef WKRenderObjectCopyTextSnippet(WKRenderObjectRef renderObjectRef)
     46{
     47    WebRenderObject* renderObject = toImpl(renderObjectRef);
     48    if (!renderObject->textSnippet().isNull())
     49        return toCopiedAPI(renderObject->textSnippet());
     50
     51    return nullptr;
     52}
     53
     54unsigned WKRenderObjectGetTextLength(WKRenderObjectRef renderObjectRef)
     55{
     56    return toImpl(renderObjectRef)->textLength();
     57}
     58
    4559WKStringRef WKRenderObjectCopyElementTagName(WKRenderObjectRef renderObjectRef)
    4660{
     
    4963        return toCopiedAPI(renderObject->elementTagName());
    5064
    51     return 0;
     65    return nullptr;
    5266}
    5367
     
    5872        return toCopiedAPI(renderObject->elementID());
    5973
    60     return 0;
     74    return nullptr;
    6175}
    6276
  • trunk/Source/WebKit2/Shared/API/c/WKRenderObject.h

    r168541 r176509  
    3737
    3838WK_EXPORT WKStringRef WKRenderObjectCopyName(WKRenderObjectRef renderObject);
    39 
     39WK_EXPORT WKStringRef WKRenderObjectCopyTextSnippet(WKRenderObjectRef renderObject);
     40WK_EXPORT unsigned WKRenderObjectGetTextLength(WKRenderObjectRef renderObject);
    4041WK_EXPORT WKStringRef WKRenderObjectCopyElementTagName(WKRenderObjectRef renderObject);
    4142WK_EXPORT WKStringRef WKRenderObjectCopyElementID(WKRenderObjectRef renderObject);
  • trunk/Source/WebKit2/Shared/UserMessageCoders.h

    r170774 r176509  
    156156            encoder << static_cast<uint32_t>(renderLayer->compositingLayerType());
    157157            encoder << renderLayer->absoluteBoundingBox();
     158            encoder << renderLayer->backingStoreMemoryEstimate();
    158159            encoder << Owner(coder, renderLayer->negativeZOrderList());
    159160            encoder << Owner(coder, renderLayer->normalFlowList());
     
    169170            encoder << renderObject->absolutePosition();
    170171            encoder << renderObject->frameRect();
     172            encoder << renderObject->textSnippet();
     173            encoder << renderObject->textLength();
    171174            encoder << Owner(coder, renderObject->children());
    172175            return true;
     
    391394            uint32_t compositingLayerTypeAsUInt32;
    392395            WebCore::IntRect absoluteBoundingBox;
     396            double backingStoreMemoryEstimate;
    393397            RefPtr<API::Object> negativeZOrderList;
    394398            RefPtr<API::Object> normalFlowList;
     
    410414            if (!decoder.decode(absoluteBoundingBox))
    411415                return false;
     416            if (!decoder.decode(backingStoreMemoryEstimate))
     417                return false;
    412418            Owner negativeZOrderListCoder(coder, negativeZOrderList);
    413419            if (!decoder.decode(negativeZOrderListCoder))
     
    420426                return false;
    421427            coder.m_root = WebRenderLayer::create(static_pointer_cast<WebRenderObject>(renderer), isReflection, isClipping, isClipped, static_cast<WebRenderLayer::CompositingLayerType>(compositingLayerTypeAsUInt32),
    422                 absoluteBoundingBox, static_pointer_cast<API::Array>(negativeZOrderList), static_pointer_cast<API::Array>(normalFlowList),
     428                absoluteBoundingBox, backingStoreMemoryEstimate, static_pointer_cast<API::Array>(negativeZOrderList), static_pointer_cast<API::Array>(normalFlowList),
    423429                static_pointer_cast<API::Array>(positiveZOrderList));
    424430            break;
     
    426432        case API::Object::Type::RenderObject: {
    427433            String name;
     434            String textSnippet;
    428435            String elementTagName;
    429436            String elementID;
     437            unsigned textLength;
    430438            RefPtr<API::Object> elementClassNames;
    431439            WebCore::IntPoint absolutePosition;
     
    446454            if (!decoder.decode(frameRect))
    447455                return false;
     456            if (!decoder.decode(textSnippet))
     457                return false;
     458            if (!decoder.decode(textLength))
     459                return false;
    448460            Owner messageCoder(coder, children);
    449461            if (!decoder.decode(messageCoder))
     
    451463            if (children && children->type() != API::Object::Type::Array)
    452464                return false;
    453             coder.m_root = WebRenderObject::create(name, elementTagName, elementID, static_pointer_cast<API::Array>(elementClassNames), absolutePosition, frameRect, static_pointer_cast<API::Array>(children));
     465            coder.m_root = WebRenderObject::create(name, elementTagName, elementID, static_pointer_cast<API::Array>(elementClassNames), absolutePosition, frameRect, textSnippet, textLength, static_pointer_cast<API::Array>(children));
    454466            break;
    455467        }
  • trunk/Source/WebKit2/Shared/WebRenderLayer.cpp

    r174231 r176509  
    6363}
    6464
    65 PassRefPtr<WebRenderLayer> WebRenderLayer::create(PassRefPtr<WebRenderObject> renderer, bool isReflection, bool isClipping, bool isClipped, CompositingLayerType type, WebCore::IntRect absoluteBoundingBox, PassRefPtr<API::Array> negativeZOrderList, PassRefPtr<API::Array> normalFlowList, PassRefPtr<API::Array> positiveZOrderList)
     65PassRefPtr<WebRenderLayer> WebRenderLayer::create(PassRefPtr<WebRenderObject> renderer, bool isReflection, bool isClipping, bool isClipped, CompositingLayerType type, WebCore::IntRect absoluteBoundingBox, double backingStoreMemoryEstimate, PassRefPtr<API::Array> negativeZOrderList, PassRefPtr<API::Array> normalFlowList, PassRefPtr<API::Array> positiveZOrderList)
    6666{
    67     return adoptRef(new WebRenderLayer(renderer, isReflection, isClipping, isClipped, type, absoluteBoundingBox, negativeZOrderList, normalFlowList, positiveZOrderList));
     67    return adoptRef(new WebRenderLayer(renderer, isReflection, isClipping, isClipped, type, absoluteBoundingBox, backingStoreMemoryEstimate, negativeZOrderList, normalFlowList, positiveZOrderList));
    6868}
    6969
     
    105105            break;
    106106        }
     107
     108        m_backingStoreMemoryEstimate = backing->backingStoreMemoryEstimate();
    107109    } else {
    108110        m_isClipping = false;
    109111        m_isClipped = false;
    110112        m_compositingLayerType = None;
     113        m_backingStoreMemoryEstimate = 0;
    111114    }
    112115
     
    118121}
    119122
    120 WebRenderLayer::WebRenderLayer(PassRefPtr<WebRenderObject> renderer, bool isReflection, bool isClipping, bool isClipped, CompositingLayerType type, WebCore::IntRect absoluteBoundingBox, PassRefPtr<API::Array> negativeZOrderList, PassRefPtr<API::Array> normalFlowList, PassRefPtr<API::Array> positiveZOrderList)
     123WebRenderLayer::WebRenderLayer(PassRefPtr<WebRenderObject> renderer, bool isReflection, bool isClipping, bool isClipped, CompositingLayerType type, WebCore::IntRect absoluteBoundingBox, double backingStoreMemoryEstimate, PassRefPtr<API::Array> negativeZOrderList, PassRefPtr<API::Array> normalFlowList, PassRefPtr<API::Array> positiveZOrderList)
    121124    : m_renderer(renderer)
    122125    , m_isReflection(isReflection)
     
    125128    , m_compositingLayerType(type)
    126129    , m_absoluteBoundingBox(absoluteBoundingBox)
     130    , m_backingStoreMemoryEstimate(backingStoreMemoryEstimate)
    127131    , m_negativeZOrderList(negativeZOrderList)
    128132    , m_normalFlowList(normalFlowList)
  • trunk/Source/WebKit2/Shared/WebRenderLayer.h

    r160384 r176509  
    4242
    4343    static PassRefPtr<WebRenderLayer> create(WebPage*);
    44     static PassRefPtr<WebRenderLayer> create(PassRefPtr<WebRenderObject> renderer, bool isReflection, bool isClipping, bool isClipped, CompositingLayerType, WebCore::IntRect absoluteBoundingBox, PassRefPtr<API::Array> negativeZOrderList, PassRefPtr<API::Array> normalFlowList, PassRefPtr<API::Array> positiveZOrderList);
     44    static PassRefPtr<WebRenderLayer> create(PassRefPtr<WebRenderObject> renderer, bool isReflection, bool isClipping, bool isClipped, CompositingLayerType, WebCore::IntRect absoluteBoundingBox, double backingStoreMemoryEstimate, PassRefPtr<API::Array> negativeZOrderList, PassRefPtr<API::Array> normalFlowList, PassRefPtr<API::Array> positiveZOrderList);
    4545
    4646    API::Array* negativeZOrderList() const { return m_negativeZOrderList.get(); }
     
    5454    CompositingLayerType compositingLayerType() const { return m_compositingLayerType; }
    5555    WebCore::IntRect absoluteBoundingBox() const { return m_absoluteBoundingBox; }
     56    double backingStoreMemoryEstimate() const { return m_backingStoreMemoryEstimate; }
    5657
    5758private:
    5859    explicit WebRenderLayer(WebCore::RenderLayer*);
    59     WebRenderLayer(PassRefPtr<WebRenderObject> renderer, bool isReflection, bool isClipping, bool isClipped, CompositingLayerType, WebCore::IntRect absoluteBoundingBox, PassRefPtr<API::Array> negativeZOrderList, PassRefPtr<API::Array> normalFlowList, PassRefPtr<API::Array> positiveZOrderList);
     60    WebRenderLayer(PassRefPtr<WebRenderObject> renderer, bool isReflection, bool isClipping, bool isClipped, CompositingLayerType, WebCore::IntRect absoluteBoundingBox, double backingStoreMemoryEstimate, PassRefPtr<API::Array> negativeZOrderList, PassRefPtr<API::Array> normalFlowList, PassRefPtr<API::Array> positiveZOrderList);
    6061
    6162    static PassRefPtr<API::Array> createArrayFromLayerList(Vector<WebCore::RenderLayer*>*);
     
    6768    CompositingLayerType m_compositingLayerType;
    6869    WebCore::IntRect m_absoluteBoundingBox;
     70    double m_backingStoreMemoryEstimate;
    6971
    7072    RefPtr<API::Array> m_negativeZOrderList;
  • trunk/Source/WebKit2/Shared/WebRenderObject.cpp

    r174506 r176509  
    4747    Frame* mainFrame = page->mainFrame();
    4848    if (!mainFrame)
    49         return 0;
     49        return nullptr;
    5050
    5151    if (!mainFrame->loader().client().hasHTMLView())
    52         return 0;
     52        return nullptr;
    5353
    5454    RenderView* contentRenderer = mainFrame->contentRenderer();
    5555    if (!contentRenderer)
    56         return 0;
     56        return nullptr;
    5757
    5858    return adoptRef(new WebRenderObject(contentRenderer, true));
    5959}
    6060
    61 PassRefPtr<WebRenderObject> WebRenderObject::create(const String& name, const String& elementTagName, const String& elementID, PassRefPtr<API::Array> elementClassNames, WebCore::IntPoint absolutePosition, WebCore::IntRect frameRect, PassRefPtr<API::Array> children)
     61PassRefPtr<WebRenderObject> WebRenderObject::create(const String& name, const String& elementTagName, const String& elementID, PassRefPtr<API::Array> elementClassNames, WebCore::IntPoint absolutePosition, WebCore::IntRect frameRect, const String& textSnippet, unsigned textLength, PassRefPtr<API::Array> children)
    6262{
    63     return adoptRef(new WebRenderObject(name, elementTagName, elementID, elementClassNames, absolutePosition, frameRect, children));
     63    return adoptRef(new WebRenderObject(name, elementTagName, elementID, elementClassNames, absolutePosition, frameRect, textSnippet, textLength, children));
    6464}
    6565
     
    6767{
    6868    m_name = renderer->renderName();
     69    m_textLength = 0;
    6970
    7071    if (Node* node = renderer->node()) {
     
    8384                m_elementClassNames = API::Array::create(WTF::move(classNames));
    8485            }
     86        }
     87
     88        if (node->isTextNode()) {
     89            String value = node->nodeValue();
     90            m_textLength = value.length();
     91
     92            const int maxSnippetLength = 40;
     93            if (value.length() > maxSnippetLength)
     94                m_textSnippet = value.substring(0, maxSnippetLength);
     95            else
     96                m_textSnippet = value;
    8597        }
    8698    }
     
    123135}
    124136
    125 WebRenderObject::WebRenderObject(const String& name, const String& elementTagName, const String& elementID, PassRefPtr<API::Array> elementClassNames, WebCore::IntPoint absolutePosition, WebCore::IntRect frameRect, PassRefPtr<API::Array> children)
     137WebRenderObject::WebRenderObject(const String& name, const String& elementTagName, const String& elementID, PassRefPtr<API::Array> elementClassNames, WebCore::IntPoint absolutePosition, WebCore::IntRect frameRect, const String& textSnippet, unsigned textLength, PassRefPtr<API::Array> children)
    126138    : m_children(children)
    127139    , m_name(name)
    128140    , m_elementTagName(elementTagName)
    129141    , m_elementID(elementID)
     142    , m_textSnippet(textSnippet)
    130143    , m_elementClassNames(elementClassNames)
    131144    , m_absolutePosition(absolutePosition)
    132145    , m_frameRect(frameRect)
     146    , m_textLength(textLength)
    133147{
    134148}
  • trunk/Source/WebKit2/Shared/WebRenderObject.h

    r160384 r176509  
    5252    }
    5353
    54     static PassRefPtr<WebRenderObject> create(const String& name, const String& elementTagName, const String& elementID, PassRefPtr<API::Array> elementClassNames, WebCore::IntPoint absolutePosition, WebCore::IntRect frameRect, PassRefPtr<API::Array> children);
     54    static PassRefPtr<WebRenderObject> create(const String& name, const String& elementTagName, const String& elementID, PassRefPtr<API::Array> elementClassNames, WebCore::IntPoint absolutePosition, WebCore::IntRect frameRect, const String& textSnippet, unsigned textLength, PassRefPtr<API::Array> children);
    5555
    5656    virtual ~WebRenderObject();
     
    5959
    6060    const String& name() const { return m_name; }
     61
     62    // Only non-empty for RenderText objects.
     63    const String& textSnippet() const { return m_textSnippet; }
     64    unsigned textLength() const { return m_textLength; }
     65
    6166    const String& elementTagName() const { return m_elementTagName; }
    6267    const String& elementID() const { return m_elementID; }
     
    6772private:
    6873    WebRenderObject(WebCore::RenderObject*, bool shouldIncludeDescendants);
    69     WebRenderObject(const String& name, const String& elementTagName, const String& elementID, PassRefPtr<API::Array> elementClassNames, WebCore::IntPoint absolutePosition, WebCore::IntRect frameRect, PassRefPtr<API::Array> children);
     74    WebRenderObject(const String& name, const String& elementTagName, const String& elementID, PassRefPtr<API::Array> elementClassNames, WebCore::IntPoint absolutePosition, WebCore::IntRect frameRect, const String& textSnippet, unsigned textLength, PassRefPtr<API::Array> children);
    7075
    7176    RefPtr<API::Array> m_children;
     
    7479    String m_elementTagName;
    7580    String m_elementID;
     81    String m_textSnippet;
    7682    RefPtr<API::Array> m_elementClassNames;
    7783    WebCore::IntPoint m_absolutePosition;
    7884    WebCore::IntRect m_frameRect;
     85    unsigned m_textLength;
    7986};
    8087
Note: See TracChangeset for help on using the changeset viewer.