Changeset 132398 in webkit


Ignore:
Timestamp:
Oct 24, 2012 2:07:02 PM (11 years ago)
Author:
fischman@chromium.org
Message:

call to setNeedsLayout during RenderVideo::paintReplaced
https://bugs.webkit.org/show_bug.cgi?id=100265

Reviewed by Eric Carlson.

Removed unnecessary call and added new defensive guards to catch erroneous setNeedsLayout() calls
during paints earlier (so the offending calls are in the emitted stacktrace).

No new tests - new defensive checks are triggered by existing tests.

  • page/FrameView.cpp:

(WebCore::FrameView::paintContents): forbid setNeedsLayout() during painting

  • rendering/RenderObject.cpp:

(WebCore):
(WebCore::RenderObject::SetLayoutNeededForbiddenScope::SetLayoutNeededForbiddenScope):
(WebCore::RenderObject::SetLayoutNeededForbiddenScope::~SetLayoutNeededForbiddenScope):

  • rendering/RenderObject.h:

(RenderObject):
(SetLayoutNeededForbiddenScope): added helper class for forbidding setNeedsLayout() in a scope.

  • rendering/RenderVideo.cpp:

(WebCore::RenderVideo::paintReplaced): drop the offending & unnecessary call to updatePlayer().

Location:
trunk/Source/WebCore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r132397 r132398  
     12012-10-24  Ami Fischman  <fischman@chromium.org>
     2
     3        call to setNeedsLayout during RenderVideo::paintReplaced
     4        https://bugs.webkit.org/show_bug.cgi?id=100265
     5
     6        Reviewed by Eric Carlson.
     7
     8        Removed unnecessary call and added new defensive guards to catch erroneous setNeedsLayout() calls
     9        during paints earlier (so the offending calls are in the emitted stacktrace).
     10
     11        No new tests - new defensive checks are triggered by existing tests.
     12
     13        * page/FrameView.cpp:
     14        (WebCore::FrameView::paintContents): forbid setNeedsLayout() during painting
     15        * rendering/RenderObject.cpp:
     16        (WebCore):
     17        (WebCore::RenderObject::SetLayoutNeededForbiddenScope::SetLayoutNeededForbiddenScope):
     18        (WebCore::RenderObject::SetLayoutNeededForbiddenScope::~SetLayoutNeededForbiddenScope):
     19        * rendering/RenderObject.h:
     20        (RenderObject):
     21        (SetLayoutNeededForbiddenScope): added helper class for forbidding setNeedsLayout() in a scope.
     22        * rendering/RenderVideo.cpp:
     23        (WebCore::RenderVideo::paintReplaced): drop the offending & unnecessary call to updatePlayer().
     24
    1252012-10-24  Adam Barth  <abarth@webkit.org>
    226
  • trunk/Source/WebCore/page/FrameView.cpp

    r132239 r132398  
    32433243    RenderLayer* rootLayer = root->layer();
    32443244
     3245#ifndef NDEBUG
     3246    RenderObject::SetLayoutNeededForbiddenScope forbidSetNeedsLayout(rootLayer->renderer());
     3247#endif
     3248
    32453249    rootLayer->paint(p, rect, m_paintBehavior, eltRenderer);
    32463250
  • trunk/Source/WebCore/rendering/RenderObject.cpp

    r131938 r132398  
    9292#ifndef NDEBUG
    9393static void* baseOfRenderObjectBeingDeleted;
     94
     95RenderObject::SetLayoutNeededForbiddenScope::SetLayoutNeededForbiddenScope(RenderObject* renderObject)
     96    : m_renderObject(renderObject)
     97    , m_preexistingForbidden(m_renderObject->isSetNeedsLayoutForbidden())
     98{
     99    m_renderObject->setNeedsLayoutIsForbidden(true);
     100}
     101
     102RenderObject::SetLayoutNeededForbiddenScope::~SetLayoutNeededForbiddenScope()
     103{
     104    m_renderObject->setNeedsLayoutIsForbidden(m_preexistingForbidden);
     105}
    94106#endif
    95107
  • trunk/Source/WebCore/rendering/RenderObject.h

    r131938 r132398  
    249249    bool isSetNeedsLayoutForbidden() const { return m_setNeedsLayoutForbidden; }
    250250    void setNeedsLayoutIsForbidden(bool flag) { m_setNeedsLayoutForbidden = flag; }
     251
     252    // Helper class forbidding calls to setNeedsLayout() during its lifetime.
     253    class SetLayoutNeededForbiddenScope {
     254    public:
     255        explicit SetLayoutNeededForbiddenScope(RenderObject*);
     256        ~SetLayoutNeededForbiddenScope();
     257    private:
     258        RenderObject* m_renderObject;
     259        bool m_preexistingForbidden;
     260    };
    251261#endif
    252262
  • trunk/Source/WebCore/rendering/RenderVideo.cpp

    r131938 r132398  
    196196        page = frame->page();
    197197
    198     if (!displayingPoster) {
    199         if (!mediaPlayer) {
    200             if (page && paintInfo.phase == PaintPhaseForeground)
    201                 page->addRelevantUnpaintedObject(this, visualOverflowRect());
    202             return;
    203         }
    204         updatePlayer();
     198    if (!displayingPoster && !mediaPlayer) {
     199        if (page && paintInfo.phase == PaintPhaseForeground)
     200            page->addRelevantUnpaintedObject(this, visualOverflowRect());
     201        return;
    205202    }
    206203
Note: See TracChangeset for help on using the changeset viewer.