<html>
    <head>
      <base href="https://bugs.webkit.org/" />
    </head>
    <body>
      <p>
        <div>
            <b><a class="bz_bug_link 
          bz_status_RESOLVED  bz_closed"
   title="RESOLVED FIXED - RenderStyle should not be reference counted"
   href="https://bugs.webkit.org/show_bug.cgi?id=156846#c15">Comment # 15</a>
              on <a class="bz_bug_link 
          bz_status_RESOLVED  bz_closed"
   title="RESOLVED FIXED - RenderStyle should not be reference counted"
   href="https://bugs.webkit.org/show_bug.cgi?id=156846">bug 156846</a>
              from <span class="vcard"><a class="email" href="mailto:darin&#64;apple.com" title="Darin Adler &lt;darin&#64;apple.com&gt;"> <span class="fn">Darin Adler</span></a>
</span></b>
        <pre>Comment on <span class=""><a href="attachment.cgi?id=277143&amp;action=diff" name="attach_277143" title="patch">attachment 277143</a> <a href="attachment.cgi?id=277143&amp;action=edit" title="patch">[details]</a></span>
patch

View in context: <a href="https://bugs.webkit.org/attachment.cgi?id=277143&amp;action=review">https://bugs.webkit.org/attachment.cgi?id=277143&amp;action=review</a>

This makes me wonder why these are heap allocated. Maybe at some point should passing RenderStyle&amp;&amp; and moving them instead of using objects on the heap and moving unique_ptrs around. I guess they are kind of big, though.

<span class="quote">&gt; Source/WebCore/css/MediaQueryEvaluator.cpp:88
&gt;  MediaQueryEvaluator::MediaQueryEvaluator(const String&amp; acceptedMediaType, Frame* frame, RenderStyle* style)</span >

Seems like the argument should be RenderStyle&amp;.

<span class="quote">&gt; Source/WebCore/css/MediaQueryEvaluator.cpp:91
&gt; +    , m_style(WTFMove(style))</span >

Doesn’t make sense since both style and m_style are a raw pointer. I imagine that was different in an earlier point of the development of this patch.

<span class="quote">&gt; Source/WebCore/css/StyleResolver.h:135
&gt;  struct ElementStyle {
&gt; -    ElementStyle(Ref&lt;RenderStyle&gt;&amp;&amp; renderStyle, std::unique_ptr&lt;Style::Relations&gt; relations = { })
&gt; +    ElementStyle(std::unique_ptr&lt;RenderStyle&gt; renderStyle, std::unique_ptr&lt;Style::Relations&gt; relations = { })
&gt;          : renderStyle(WTFMove(renderStyle))
&gt;          , relations(WTFMove(relations))
&gt;      { }
&gt;  
&gt; -    Ref&lt;RenderStyle&gt; renderStyle;
&gt; +    std::unique_ptr&lt;RenderStyle&gt; renderStyle;
&gt;      std::unique_ptr&lt;Style::Relations&gt; relations;
&gt;  };</span >

I suspect this might work better without the constructor, using aggregate syntax to construct this when needed.

<span class="quote">&gt; Source/WebCore/dom/Document.cpp:2131
&gt; +    std::unique_ptr&lt;RenderStyle&gt; pageStyle(ensureStyleResolver().styleForPage(pageIndex));</span >

Maybe auto instead?

<span class="quote">&gt; Source/WebCore/dom/Document.cpp:2137
&gt; +    std::unique_ptr&lt;RenderStyle&gt; style = ensureStyleResolver().styleForPage(pageIndex);</span >

Maybe auto instead?

<span class="quote">&gt; Source/WebCore/dom/PseudoElement.cpp:125
&gt; +        std::unique_ptr&lt;RenderStyle&gt; createdStyle = RenderStyle::createStyleInheritingFromPseudoStyle(renderer.style());</span >

Maybe auto instead?

<span class="quote">&gt; Source/WebCore/page/animation/AnimationBase.h:142
&gt; +    virtual void getAnimatedStyle(std::unique_ptr&lt;RenderStyle&gt;&amp; /*animatedStyle*/) = 0;</span >

Why doesn’t this function use a return value?

<span class="quote">&gt; Source/WebCore/rendering/RenderButton.cpp:115
&gt;  void RenderButton::setupInnerStyle(RenderStyle* innerStyle) </span >

Clearly this function should take a reference rather than a pointer.

<span class="quote">&gt; Source/WebCore/rendering/RenderElement.cpp:1550
&gt; +    std::unique_ptr&lt;RenderStyle&gt; result = getUncachedPseudoStyle(PseudoStyleRequest(pseudo), parentStyle);</span >

Maybe auto instead?

<span class="quote">&gt; Source/WebCore/rendering/RenderElement.cpp:1588
&gt; +    if (std::unique_ptr&lt;RenderStyle&gt; pseudoStyle = selectionPseudoStyle()) {</span >

Maybe auto instead?

<span class="quote">&gt; Source/WebCore/rendering/RenderElement.cpp:1633
&gt; +    std::unique_ptr&lt;RenderStyle&gt; pseudoStyle = selectionPseudoStyle();</span >

Maybe auto instead?

<span class="quote">&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:519
&gt; +    std::unique_ptr&lt;RenderStyle&gt; scrollbarStyle = static_cast&lt;RenderScrollbar*&gt;(scrollbar)-&gt;getScrollbarPseudoStyle(ScrollbarBGPart, SCROLLBAR);</span >

Maybe auto instead?

<span class="quote">&gt; Source/WebCore/rendering/RenderNamedFlowFragment.cpp:467
&gt; +        std::unique_ptr&lt;RenderStyle&gt; objectRegionStyle = RenderStyle::clone(&amp;object-&gt;style());
&gt; +        std::unique_ptr&lt;RenderStyle&gt; objectOriginalStyle = RenderStyle::clone(objectPair.value.style.get());</span >

Maybe auto instead?

<span class="quote">&gt; Source/WebCore/rendering/RenderScrollbar.cpp:146
&gt; +    std::unique_ptr&lt;RenderStyle&gt; result = owningRenderer()-&gt;getUncachedPseudoStyle(PseudoStyleRequest(pseudoId, this, partType), &amp;owningRenderer()-&gt;style());</span >

Maybe auto instead?

<span class="quote">&gt; Source/WebCore/rendering/RenderScrollbar.cpp:216
&gt; +    std::unique_ptr&lt;RenderStyle&gt; partStyle = getScrollbarPseudoStyle(partType, pseudoForScrollbarPart(partType));</span >

Maybe auto instead?

<span class="quote">&gt; Source/WebCore/rendering/style/RenderStyle.h:478
&gt; +#if !ASSERT_DISABLED
&gt; +    bool m_deletionHasBegun { false };
&gt; +#endif</span >

Seems like this could be private.

Also, neat that we have this in RefCounted, but do we really need it in RenderStyle?</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are the assignee for the bug.</li>
      </ul>
    </body>
</html>