Changeset 85661 in webkit


Ignore:
Timestamp:
May 3, 2011 2:21:27 PM (13 years ago)
Author:
jamesr@google.com
Message:

2011-05-03 James Robinson <jamesr@chromium.org>

Reviewed by Kenneth Russell.

[chromium] Resizing a 2d canvas to huge dimensions after compositing crashes with accelerated 2d canvas option enabled
https://bugs.webkit.org/show_bug.cgi?id=59965

Adds a test with a canvas rendered once with normal width/height dimensions then resized to very large dimensions.

  • fast/canvas/canvas-resize-after-paint-expected.txt: Added.
  • fast/canvas/canvas-resize-after-paint.html: Added.

2011-05-03 James Robinson <jamesr@chromium.org>

Reviewed by Kenneth Russell.

[chromium] Resizing a 2d canvas to huge dimensions after compositing crashes with accelerated 2d canvas option enabled
https://bugs.webkit.org/show_bug.cgi?id=59965

Fixes a few bugs leading to a crash if a canvas already being composited was resized to huge dimensions.

Test: fast/canvas/canvas-resize-after-paint.html

  • html/canvas/CanvasRenderingContext2D.cpp: (WebCore::CanvasRenderingContext2D::reset):

Mark the canvas's layer as needing a synthetic style recalculation when creating or destroying the backing
DrawingBuffer so that we exit compositing mode properly if we can't handle the canvas dimensions.

  • platform/graphics/chromium/Canvas2DLayerChromium.cpp: (WebCore::Canvas2DLayerChromium::setLayerRenderer):

Add a null check for m_drawingBuffer

  • platform/graphics/gpu/DrawingBuffer.cpp: (WebCore::DrawingBuffer::clear):

Avoid clearing the m_context pointer in reset() - we destroy the DrawingBuffer whenever reset() fails, so
this is unnecessary.

Location:
trunk
Files:
2 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r85654 r85661  
     12011-05-03  James Robinson  <jamesr@chromium.org>
     2
     3        Reviewed by Kenneth Russell.
     4
     5        [chromium] Resizing a 2d canvas to huge dimensions after compositing crashes with accelerated 2d canvas option enabled
     6        https://bugs.webkit.org/show_bug.cgi?id=59965
     7
     8        Adds a test with a canvas rendered once with normal width/height dimensions then resized to very large dimensions.
     9
     10        * fast/canvas/canvas-resize-after-paint-expected.txt: Added.
     11        * fast/canvas/canvas-resize-after-paint.html: Added.
     12
    1132011-05-03  Ojan Vafai  <ojan@chromium.org>
    214
  • trunk/Source/WebCore/ChangeLog

    r85653 r85661  
     12011-05-03  James Robinson  <jamesr@chromium.org>
     2
     3        Reviewed by Kenneth Russell.
     4
     5        [chromium] Resizing a 2d canvas to huge dimensions after compositing crashes with accelerated 2d canvas option enabled
     6        https://bugs.webkit.org/show_bug.cgi?id=59965
     7
     8        Fixes a few bugs leading to a crash if a canvas already being composited was resized to huge dimensions.
     9
     10        Test: fast/canvas/canvas-resize-after-paint.html
     11
     12        * html/canvas/CanvasRenderingContext2D.cpp:
     13        (WebCore::CanvasRenderingContext2D::reset):
     14            Mark the canvas's layer as needing a synthetic style recalculation when creating or destroying the backing
     15            DrawingBuffer so that we exit compositing mode properly if we can't handle the canvas dimensions.
     16        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
     17        (WebCore::Canvas2DLayerChromium::setLayerRenderer):
     18            Add a null check for m_drawingBuffer
     19        * platform/graphics/gpu/DrawingBuffer.cpp:
     20        (WebCore::DrawingBuffer::clear):
     21            Avoid clearing the m_context pointer in reset() - we destroy the DrawingBuffer whenever reset() fails, so
     22            this is unnecessary.
     23
    1242011-05-03  Adam Roben  <aroben@apple.com>
    225
  • trunk/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp

    r85501 r85661  
    200200            if (m_drawingBuffer->reset(IntSize(canvas()->width(), canvas()->height()))) {
    201201                c->setSharedGraphicsContext3D(m_context3D.get(), m_drawingBuffer.get(), IntSize(canvas()->width(), canvas()->height()));
    202 #if USE(ACCELERATED_COMPOSITING)
    203                 RenderBox* renderBox = canvas()->renderBox();
    204                 if (renderBox && renderBox->hasLayer() && renderBox->layer()->hasAcceleratedCompositing())
    205                     renderBox->layer()->contentChanged(RenderLayer::CanvasChanged);
    206 #endif
    207202            } else {
    208203                c->setSharedGraphicsContext3D(0, 0, IntSize());
     
    210205                m_context3D.clear();
    211206            }
     207#if USE(ACCELERATED_COMPOSITING)
     208            RenderBox* renderBox = canvas()->renderBox();
     209            if (renderBox && renderBox->hasLayer() && renderBox->layer()->hasAcceleratedCompositing())
     210                renderBox->layer()->contentChanged(RenderLayer::CanvasChanged);
     211#endif
    212212        }
    213213    }
  • trunk/Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp

    r83828 r85661  
    120120void Canvas2DLayerChromium::setLayerRenderer(LayerRendererChromium* newLayerRenderer)
    121121{
    122     if (layerRenderer() != newLayerRenderer) {
     122    if (layerRenderer() != newLayerRenderer && m_drawingBuffer) {
    123123        if (m_drawingBuffer->graphicsContext3D()) {
    124124            if (layerRenderer())
  • trunk/Source/WebCore/platform/graphics/gpu/DrawingBuffer.cpp

    r84323 r85661  
    9393    m_context->deleteFramebuffer(m_fbo);
    9494    m_fbo = 0;
    95    
    96     m_context.clear();
    9795}
    9896
Note: See TracChangeset for help on using the changeset viewer.