Diff
Modified: trunk/Source/WebCore/ChangeLog (110332 => 110333)
--- trunk/Source/WebCore/ChangeLog 2012-03-09 22:36:10 UTC (rev 110332)
+++ trunk/Source/WebCore/ChangeLog 2012-03-09 22:43:30 UTC (rev 110333)
@@ -1,3 +1,32 @@
+2012-03-09 Sheriff Bot <[email protected]>
+
+ Unreviewed, rolling out r110309.
+ http://trac.webkit.org/changeset/110309
+ https://bugs.webkit.org/show_bug.cgi?id=80732
+
+ Seems to have caused a number of SVG crashes (thorton will
+ investigate further) (Requested by abarth|gardener on
+ #webkit).
+
+ * page/FrameView.cpp:
+ (WebCore::FrameView::FrameView):
+ (WebCore::FrameView::reset):
+ (WebCore::FrameView::repaintContentRectangle):
+ (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-09 Ken Buchanan <[email protected]>
Crash due to inserting letter into div with first-letter
Modified: trunk/Source/WebCore/page/FrameView.cpp (110332 => 110333)
--- trunk/Source/WebCore/page/FrameView.cpp 2012-03-09 22:36:10 UTC (rev 110332)
+++ trunk/Source/WebCore/page/FrameView.cpp 2012-03-09 22:43:30 UTC (rev 110333)
@@ -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());
@@ -1936,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 (110332 => 110333)
--- trunk/Source/WebCore/page/FrameView.h 2012-03-09 22:36:10 UTC (rev 110332)
+++ trunk/Source/WebCore/page/FrameView.h 2012-03-09 22:43:30 UTC (rev 110333)
@@ -203,10 +203,6 @@
void checkStopDelayingDeferredRepaints();
void resetDeferredRepaintDelay();
- void beginDisableRepaints();
- void endDisableRepaints();
- bool repaintsDisabled() { return m_disableRepaints > 0; }
-
#if ENABLE(DASHBOARD_SUPPORT)
void updateDashboardRegions();
#endif
@@ -470,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 (110332 => 110333)
--- trunk/Source/WebCore/rendering/RenderView.cpp 2012-03-09 22:36:10 UTC (rev 110332)
+++ trunk/Source/WebCore/rendering/RenderView.cpp 2012-03-09 22:43:30 UTC (rev 110333)
@@ -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 (110332 => 110333)
--- trunk/Source/WebCore/svg/graphics/SVGImage.cpp 2012-03-09 22:36:10 UTC (rev 110332)
+++ trunk/Source/WebCore/svg/graphics/SVGImage.cpp 2012-03-09 22:43:30 UTC (rev 110333)
@@ -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 (110332 => 110333)
--- trunk/Source/WebCore/svg/graphics/SVGImage.h 2012-03-09 22:36:10 UTC (rev 110332)
+++ trunk/Source/WebCore/svg/graphics/SVGImage.h 2012-03-09 22:43:30 UTC (rev 110333)
@@ -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 (110332 => 110333)
--- trunk/Source/WebCore/svg/graphics/SVGImageCache.cpp 2012-03-09 22:36:10 UTC (rev 110332)
+++ trunk/Source/WebCore/svg/graphics/SVGImageCache.cpp 2012-03-09 22:43:30 UTC (rev 110333)
@@ -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 (110332 => 110333)
--- trunk/Source/WebCore/svg/graphics/SVGImageCache.h 2012-03-09 22:36:10 UTC (rev 110332)
+++ trunk/Source/WebCore/svg/graphics/SVGImageCache.h 2012-03-09 22:43:30 UTC (rev 110333)
@@ -70,7 +70,6 @@
private:
SVGImageCache(SVGImage*);
- void redraw();
void redrawTimerFired(Timer<SVGImageCache>*);
struct ImageData {