Title: [110581] trunk/Source/WebCore
Revision
110581
Author
[email protected]
Date
2012-03-13 11:05:47 -0700 (Tue, 13 Mar 2012)

Log Message

Unreviewed, rolling out r110469.
http://trac.webkit.org/changeset/110469
https://bugs.webkit.org/show_bug.cgi?id=81010

This patch still appears to crash (Requested by abarth on
#webkit).

Patch by Sheriff Bot <[email protected]> on 2012-03-13

* page/FrameView.cpp:
(WebCore::FrameView::FrameView):
(WebCore::FrameView::reset):
(WebCore::FrameView::repaintContentRectangle):
(WebCore):
(WebCore::FrameView::endDeferredRepaints):
(WebCore::FrameView::doDeferredRepaints):
(WebCore::FrameView::deferredRepaintTimerFired):
* page/FrameView.h:
(FrameView):
* rendering/RenderView.cpp:
(WebCore::RenderView::shouldRepaint):
* svg/graphics/SVGImage.cpp:
(WebCore::SVGImage::drawSVGToImageBuffer):
(WebCore::SVGImage::draw):
* svg/graphics/SVGImage.h:
* svg/graphics/SVGImageCache.cpp:
(WebCore::SVGImageCache::imageContentChanged):
(WebCore::SVGImageCache::redrawTimerFired):
* svg/graphics/SVGImageCache.h:
(SVGImageCache):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (110580 => 110581)


--- trunk/Source/WebCore/ChangeLog	2012-03-13 18:02:45 UTC (rev 110580)
+++ trunk/Source/WebCore/ChangeLog	2012-03-13 18:05:47 UTC (rev 110581)
@@ -1,3 +1,34 @@
+2012-03-13  Sheriff Bot  <[email protected]>
+
+        Unreviewed, rolling out r110469.
+        http://trac.webkit.org/changeset/110469
+        https://bugs.webkit.org/show_bug.cgi?id=81010
+
+        This patch still appears to crash (Requested by abarth on
+        #webkit).
+
+        * page/FrameView.cpp:
+        (WebCore::FrameView::FrameView):
+        (WebCore::FrameView::reset):
+        (WebCore::FrameView::repaintContentRectangle):
+        (WebCore):
+        (WebCore::FrameView::endDeferredRepaints):
+        (WebCore::FrameView::doDeferredRepaints):
+        (WebCore::FrameView::deferredRepaintTimerFired):
+        * page/FrameView.h:
+        (FrameView):
+        * rendering/RenderView.cpp:
+        (WebCore::RenderView::shouldRepaint):
+        * svg/graphics/SVGImage.cpp:
+        (WebCore::SVGImage::drawSVGToImageBuffer):
+        (WebCore::SVGImage::draw):
+        * svg/graphics/SVGImage.h:
+        * svg/graphics/SVGImageCache.cpp:
+        (WebCore::SVGImageCache::imageContentChanged):
+        (WebCore::SVGImageCache::redrawTimerFired):
+        * svg/graphics/SVGImageCache.h:
+        (SVGImageCache):
+
 2012-03-13  Max Vujovic  <[email protected]>
 
         Add a method to window.internals to enable testing of inspector highlight rects

Modified: trunk/Source/WebCore/page/FrameView.cpp (110580 => 110581)


--- trunk/Source/WebCore/page/FrameView.cpp	2012-03-13 18:02:45 UTC (rev 110580)
+++ trunk/Source/WebCore/page/FrameView.cpp	2012-03-13 18:05:47 UTC (rev 110581)
@@ -138,7 +138,6 @@
     , m_wasScrolledByUser(false)
     , m_inProgrammaticScroll(false)
     , m_deferredRepaintTimer(this, &FrameView::deferredRepaintTimerFired)
-    , m_disableRepaints(0)
     , m_isTrackingRepaints(false)
     , m_shouldUpdateWhileOffscreen(true)
     , m_deferSetNeedsLayouts(0)
@@ -245,7 +244,6 @@
     m_isVisuallyNonEmpty = false;
     m_firstVisuallyNonEmptyLayoutCallbackPending = true;
     m_maintainScrollPositionAnchor = 0;
-    m_disableRepaints = 0;
 }
 
 bool FrameView::isFrameView() const 
@@ -1756,7 +1754,7 @@
 void FrameView::repaintContentRectangle(const IntRect& r, bool immediate)
 {
     ASSERT(!m_frame->ownerElement());
-
+    
     if (m_isTrackingRepaints) {
         IntRect repaintRect = r;
         repaintRect.move(-scrollOffset());
@@ -1782,10 +1780,9 @@
         else
             m_repaintRects[0].unite(paintRect);
         m_repaintCount++;
-
-        if (!m_deferringRepaints)
-            startDeferredRepaintTimer(delay);
-
+    
+        if (!m_deferringRepaints && !m_deferredRepaintTimer.isActive())
+             m_deferredRepaintTimer.startOneShot(delay);
         return;
     }
     
@@ -1838,6 +1835,7 @@
     m_deferringRepaints++;
 }
 
+
 void FrameView::endDeferredRepaints()
 {
     Page* page = m_frame->page();
@@ -1850,26 +1848,18 @@
 
     if (--m_deferringRepaints)
         return;
+    
+    if (m_deferredRepaintTimer.isActive())
+        return;
 
     if (double delay = adjustedDeferredRepaintDelay()) {
-        startDeferredRepaintTimer(delay);
+        m_deferredRepaintTimer.startOneShot(delay);
         return;
     }
     
     doDeferredRepaints();
 }
 
-void FrameView::startDeferredRepaintTimer(double delay)
-{
-    if (m_deferredRepaintTimer.isActive())
-        return;
-
-    if (m_disableRepaints)
-        return;
-
-    m_deferredRepaintTimer.startOneShot(delay);
-}
-
 void FrameView::checkStopDelayingDeferredRepaints()
 {
     if (!m_deferredRepaintTimer.isActive())
@@ -1886,9 +1876,6 @@
     
 void FrameView::doDeferredRepaints()
 {
-    if (m_disableRepaints)
-        return;
-
     ASSERT(!m_deferringRepaints);
     if (!shouldUpdate()) {
         m_repaintRects.clear();
@@ -1947,19 +1934,8 @@
 void FrameView::deferredRepaintTimerFired(Timer<FrameView>*)
 {
     doDeferredRepaints();
-}
+}    
 
-void FrameView::beginDisableRepaints()
-{
-    m_disableRepaints++;
-}
-
-void FrameView::endDisableRepaints()
-{
-    ASSERT(m_disableRepaints > 0);
-    m_disableRepaints--;
-}
-
 void FrameView::layoutTimerFired(Timer<FrameView>*)
 {
 #ifdef INSTRUMENT_LAYOUT_SCHEDULING

Modified: trunk/Source/WebCore/page/FrameView.h (110580 => 110581)


--- trunk/Source/WebCore/page/FrameView.h	2012-03-13 18:02:45 UTC (rev 110580)
+++ trunk/Source/WebCore/page/FrameView.h	2012-03-13 18:05:47 UTC (rev 110581)
@@ -201,13 +201,8 @@
     void beginDeferredRepaints();
     void endDeferredRepaints();
     void checkStopDelayingDeferredRepaints();
-    void startDeferredRepaintTimer(double delay);
     void resetDeferredRepaintDelay();
 
-    void beginDisableRepaints();
-    void endDisableRepaints();
-    bool repaintsDisabled() { return m_disableRepaints > 0; }
-
 #if ENABLE(DASHBOARD_SUPPORT)
     void updateDashboardRegions();
 #endif
@@ -471,9 +466,7 @@
     Timer<FrameView> m_deferredRepaintTimer;
     double m_deferredRepaintDelay;
     double m_lastPaintTime;
-
-    unsigned m_disableRepaints;
-
+    
     bool m_isTrackingRepaints; // Used for testing.
     Vector<IntRect> m_trackedRepaintRects;
 

Modified: trunk/Source/WebCore/rendering/RenderView.cpp (110580 => 110581)


--- trunk/Source/WebCore/rendering/RenderView.cpp	2012-03-13 18:02:45 UTC (rev 110580)
+++ trunk/Source/WebCore/rendering/RenderView.cpp	2012-03-13 18:05:47 UTC (rev 110581)
@@ -298,10 +298,7 @@
 
     if (!m_frameView)
         return false;
-
-    if (m_frameView->repaintsDisabled())
-        return false;
-
+    
     return true;
 }
 

Modified: trunk/Source/WebCore/svg/graphics/SVGImage.cpp (110580 => 110581)


--- trunk/Source/WebCore/svg/graphics/SVGImage.cpp	2012-03-13 18:02:45 UTC (rev 110580)
+++ trunk/Source/WebCore/svg/graphics/SVGImage.cpp	2012-03-13 18:05:47 UTC (rev 110581)
@@ -177,15 +177,10 @@
     ImageObserver* observer = imageObserver();
     ASSERT(observer);
 
-    // Temporarily reset image observer, we don't want to receive any changeInRect() calls due to this relayout.
+    // Temporarily reset image observer, we don't want to receive any changeInRect() calls due this relayout.
     setImageObserver(0);
-
-    // Disable repainting; we don't want deferred repaints to schedule any timers due to this relayout.
-    frame->view()->beginDisableRepaints();
-
     renderer->setContainerSize(size);
     frame->view()->resize(this->size());
-
     if (zoom != 1)
         frame->setPageZoomFactor(zoom);
 
@@ -207,9 +202,7 @@
     if (frame->view()->needsLayout())
         frame->view()->layout();
 
-    setImageObserver(observer);
-
-    frame->view()->endDisableRepaints();
+    setImageObserver(observer); 
 }
 
 void SVGImage::draw(GraphicsContext* context, const FloatRect& dstRect, const FloatRect& srcRect, ColorSpace, CompositeOperator compositeOp)
@@ -217,7 +210,7 @@
     if (!m_page)
         return;
 
-    FrameView* view = frameView();
+    FrameView* view = m_page->mainFrame()->view();
 
     GraphicsContextStateSaver stateSaver(*context);
     context->setCompositeOperation(compositeOp);
@@ -262,14 +255,6 @@
     return toRenderBox(rootElement->renderer());
 }
 
-FrameView* SVGImage::frameView() const
-{
-    if (!m_page)
-        return 0;
-
-    return m_page->mainFrame()->view();
-}
-
 bool SVGImage::hasRelativeWidth() const
 {
     if (!m_page)

Modified: trunk/Source/WebCore/svg/graphics/SVGImage.h (110580 => 110581)


--- trunk/Source/WebCore/svg/graphics/SVGImage.h	2012-03-13 18:02:45 UTC (rev 110580)
+++ trunk/Source/WebCore/svg/graphics/SVGImage.h	2012-03-13 18:05:47 UTC (rev 110581)
@@ -34,7 +34,6 @@
 
 namespace WebCore {
 
-class FrameView;
 class ImageBuffer;
 class Page;
 class RenderBox;
@@ -54,7 +53,6 @@
 
     void drawSVGToImageBuffer(ImageBuffer*, const IntSize&, float zoom, ShouldClearBuffer);
     RenderBox* embeddedContentBox() const;
-    FrameView* frameView() const;
 
     virtual bool isSVGImage() const { return true; }
     virtual IntSize size() const;

Modified: trunk/Source/WebCore/svg/graphics/SVGImageCache.cpp (110580 => 110581)


--- trunk/Source/WebCore/svg/graphics/SVGImageCache.cpp	2012-03-13 18:02:45 UTC (rev 110580)
+++ trunk/Source/WebCore/svg/graphics/SVGImageCache.cpp	2012-03-13 18:05:47 UTC (rev 110581)
@@ -21,7 +21,6 @@
 #include "SVGImageCache.h"
 
 #if ENABLE(SVG)
-#include "FrameView.h"
 #include "GraphicsContext.h"
 #include "ImageBuffer.h"
 #include "RenderSVGRoot.h"
@@ -82,18 +81,13 @@
     for (ImageDataMap::iterator it = m_imageDataMap.begin(); it != end; ++it)
         it->second.imageNeedsUpdate = true;
 
-    // If we're in the middle of layout, start redrawing dirty
-    // images on a timer; otherwise it's safe to draw immediately.
-
-    FrameView* frameView = m_svgImage->frameView();
-    if (frameView && frameView->needsLayout()) {
-        if (!m_redrawTimer.isActive())
-            m_redrawTimer.startOneShot(0);
-    } else
-       redraw();
+    // Start redrawing dirty images with a timer, as imageContentChanged() may be called
+    // by the FrameView of the SVGImage which is currently in FrameView::layout().
+    if (!m_redrawTimer.isActive())
+        m_redrawTimer.startOneShot(0);
 }
 
-void SVGImageCache::redraw()
+void SVGImageCache::redrawTimerFired(Timer<SVGImageCache>*)
 {
     ImageDataMap::iterator end = m_imageDataMap.end();
     for (ImageDataMap::iterator it = m_imageDataMap.begin(); it != end; ++it) {
@@ -111,11 +105,6 @@
     m_svgImage->imageObserver()->animationAdvanced(m_svgImage);
 }
 
-void SVGImageCache::redrawTimerFired(Timer<SVGImageCache>*)
-{
-    redraw();
-}
-
 Image* SVGImageCache::lookupOrCreateBitmapImageForRenderer(const RenderObject* renderer)
 {
     ASSERT(renderer);

Modified: trunk/Source/WebCore/svg/graphics/SVGImageCache.h (110580 => 110581)


--- trunk/Source/WebCore/svg/graphics/SVGImageCache.h	2012-03-13 18:02:45 UTC (rev 110580)
+++ trunk/Source/WebCore/svg/graphics/SVGImageCache.h	2012-03-13 18:05:47 UTC (rev 110581)
@@ -70,7 +70,6 @@
 
 private:
     SVGImageCache(SVGImage*);
-    void redraw();
     void redrawTimerFired(Timer<SVGImageCache>*);
 
     struct ImageData {
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to