Changeset 147683 in webkit


Ignore:
Timestamp:
Apr 4, 2013 4:59:12 PM (11 years ago)
Author:
Christophe Dumez
Message:

[Cairo] Stop passing raw pointers to BitmapImage::create()
https://bugs.webkit.org/show_bug.cgi?id=113945

Reviewed by Martin Robinson.

Source/WebCore:

BitmapImage::create() was updated in r147643 to take a PassRefPtr<cairo_surface_t>
in argument instead of a cairo_surface_t*. This patch updates several call sites
so that they now pass in a smart pointer instead of a raw one to avoid silent
converting from cairo_surface_t* to PassRefPtr<cairo_surface_t>.

No new tests, no behavior change.

  • platform/graphics/cairo/ImageBufferCairo.cpp:

(WebCore::ImageBufferData::ImageBufferData): Use RefPtr to m_surface to avoid manual
memory handling.
(WebCore::ImageBuffer::ImageBuffer):
(WebCore::ImageBuffer::~ImageBuffer):
(WebCore::ImageBuffer::copyImage):
(WebCore::ImageBuffer::clip):
(WebCore::ImageBuffer::platformTransformColorSpace):
(WebCore::getImageData):
(WebCore::ImageBuffer::putByteArray):

  • platform/graphics/cairo/ImageBufferDataCairo.h:

(ImageBufferData):

  • platform/graphics/gstreamer/ImageGStreamerCairo.cpp:

(ImageGStreamer::ImageGStreamer):

  • platform/graphics/gtk/ImageBufferGtk.cpp:

(WebCore::ImageBuffer::toDataURL):

Source/WebKit2:

Pass a smart pointer in to BitmapImage::create() instead of a raw one
for the cairo surface. The factory method prototype was updated for
cairo in r147643.

  • Shared/cairo/ShareableBitmapCairo.cpp:

(WebKit::ShareableBitmap::createImage):

Location:
trunk/Source
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r147682 r147683  
     12013-04-04  Christophe Dumez  <ch.dumez@sisa.samsung.com>
     2
     3        [Cairo] Stop passing raw pointers to BitmapImage::create()
     4        https://bugs.webkit.org/show_bug.cgi?id=113945
     5
     6        Reviewed by Martin Robinson.
     7
     8        BitmapImage::create() was updated in r147643 to take a PassRefPtr<cairo_surface_t>
     9        in argument instead of a cairo_surface_t*. This patch updates several call sites
     10        so that they now pass in a smart pointer instead of a raw one to avoid silent
     11        converting from cairo_surface_t* to PassRefPtr<cairo_surface_t>.
     12
     13        No new tests, no behavior change.
     14
     15        * platform/graphics/cairo/ImageBufferCairo.cpp:
     16        (WebCore::ImageBufferData::ImageBufferData): Use RefPtr to m_surface to avoid manual
     17        memory handling.
     18        (WebCore::ImageBuffer::ImageBuffer):
     19        (WebCore::ImageBuffer::~ImageBuffer):
     20        (WebCore::ImageBuffer::copyImage):
     21        (WebCore::ImageBuffer::clip):
     22        (WebCore::ImageBuffer::platformTransformColorSpace):
     23        (WebCore::getImageData):
     24        (WebCore::ImageBuffer::putByteArray):
     25        * platform/graphics/cairo/ImageBufferDataCairo.h:
     26        (ImageBufferData):
     27        * platform/graphics/gstreamer/ImageGStreamerCairo.cpp:
     28        (ImageGStreamer::ImageGStreamer):
     29        * platform/graphics/gtk/ImageBufferGtk.cpp:
     30        (WebCore::ImageBuffer::toDataURL):
     31
    1322013-04-04  Simon Fraser  <simon.fraser@apple.com>
    233
  • trunk/Source/WebCore/platform/graphics/cairo/ImageBufferCairo.cpp

    r146351 r147683  
    5050
    5151ImageBufferData::ImageBufferData(const IntSize&)
    52     : m_surface(0)
    53     , m_platformContext(0)
     52    : m_platformContext(0)
    5453{
    5554}
     
    6160{
    6261    success = false;  // Make early return mean error.
    63     m_data.m_surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32,
    64                                                   size.width(),
    65                                                   size.height());
    66     if (cairo_surface_status(m_data.m_surface) != CAIRO_STATUS_SUCCESS)
     62    m_data.m_surface = adoptRef(cairo_image_surface_create(CAIRO_FORMAT_ARGB32, size.width(), size.height()));
     63    if (cairo_surface_status(m_data.m_surface.get()) != CAIRO_STATUS_SUCCESS)
    6764        return;  // create will notice we didn't set m_initialized and fail.
    6865
    69     RefPtr<cairo_t> cr = adoptRef(cairo_create(m_data.m_surface));
     66    RefPtr<cairo_t> cr = adoptRef(cairo_create(m_data.m_surface.get()));
    7067    m_data.m_platformContext.setCr(cr.get());
    7168    m_context = adoptPtr(new GraphicsContext(&m_data.m_platformContext));
     
    7572ImageBuffer::~ImageBuffer()
    7673{
    77     cairo_surface_destroy(m_data.m_surface);
    7874}
    7975
     
    8682{
    8783    if (copyBehavior == CopyBackingStore)
    88         return BitmapImage::create(copyCairoImageSurface(m_data.m_surface).leakRef());
     84        return BitmapImage::create(copyCairoImageSurface(m_data.m_surface.get()));
    8985
    9086    // BitmapImage will release the passed in surface on destruction
    91     return BitmapImage::create(cairo_surface_reference(m_data.m_surface));
     87    return BitmapImage::create(m_data.m_surface);
    9288}
    9389
     
    9995void ImageBuffer::clip(GraphicsContext* context, const FloatRect& maskRect) const
    10096{
    101     context->platformContext()->pushImageMask(m_data.m_surface, maskRect);
     97    context->platformContext()->pushImageMask(m_data.m_surface.get(), maskRect);
    10298}
    10399
     
    119115void ImageBuffer::platformTransformColorSpace(const Vector<int>& lookUpTable)
    120116{
    121     ASSERT(cairo_surface_get_type(m_data.m_surface) == CAIRO_SURFACE_TYPE_IMAGE);
    122 
    123     unsigned char* dataSrc = cairo_image_surface_get_data(m_data.m_surface);
    124     int stride = cairo_image_surface_get_stride(m_data.m_surface);
     117    ASSERT(cairo_surface_get_type(m_data.m_surface.get()) == CAIRO_SURFACE_TYPE_IMAGE);
     118
     119    unsigned char* dataSrc = cairo_image_surface_get_data(m_data.m_surface.get());
     120    int stride = cairo_image_surface_get_stride(m_data.m_surface.get());
    125121    for (int y = 0; y < m_size.height(); ++y) {
    126122        unsigned* row = reinterpret_cast<unsigned*>(dataSrc + stride * y);
     
    135131        }
    136132    }
    137     cairo_surface_mark_dirty_rectangle (m_data.m_surface, 0, 0, m_size.width(), m_size.height());
     133    cairo_surface_mark_dirty_rectangle(m_data.m_surface.get(), 0, 0, m_size.width(), m_size.height());
    138134}
    139135
     
    141137PassRefPtr<Uint8ClampedArray> getImageData(const IntRect& rect, const ImageBufferData& data, const IntSize& size)
    142138{
    143     ASSERT(cairo_surface_get_type(data.m_surface) == CAIRO_SURFACE_TYPE_IMAGE);
     139    ASSERT(cairo_surface_get_type(data.m_surface.get()) == CAIRO_SURFACE_TYPE_IMAGE);
    144140
    145141    RefPtr<Uint8ClampedArray> result = Uint8ClampedArray::createUninitialized(rect.width() * rect.height() * 4);
    146     unsigned char* dataSrc = cairo_image_surface_get_data(data.m_surface);
     142    unsigned char* dataSrc = cairo_image_surface_get_data(data.m_surface.get());
    147143    unsigned char* dataDst = result->data();
    148144
     
    172168    int numRows = endy - originy;
    173169
    174     int stride = cairo_image_surface_get_stride(data.m_surface);
     170    int stride = cairo_image_surface_get_stride(data.m_surface.get());
    175171    unsigned destBytesPerRow = 4 * rect.width();
    176172
     
    220216void ImageBuffer::putByteArray(Multiply multiplied, Uint8ClampedArray* source, const IntSize& sourceSize, const IntRect& sourceRect, const IntPoint& destPoint, CoordinateSystem)
    221217{
    222     ASSERT(cairo_surface_get_type(m_data.m_surface) == CAIRO_SURFACE_TYPE_IMAGE);
    223 
    224     unsigned char* dataDst = cairo_image_surface_get_data(m_data.m_surface);
     218    ASSERT(cairo_surface_get_type(m_data.m_surface.get()) == CAIRO_SURFACE_TYPE_IMAGE);
     219
     220    unsigned char* dataDst = cairo_image_surface_get_data(m_data.m_surface.get());
    225221
    226222    ASSERT(sourceRect.width() > 0);
     
    251247
    252248    unsigned srcBytesPerRow = 4 * sourceSize.width();
    253     int stride = cairo_image_surface_get_stride(m_data.m_surface);
     249    int stride = cairo_image_surface_get_stride(m_data.m_surface.get());
    254250
    255251    unsigned char* srcRows = source->data() + originy * srcBytesPerRow + originx * 4;
     
    279275        srcRows += srcBytesPerRow;
    280276    }
    281     cairo_surface_mark_dirty_rectangle(m_data.m_surface,
    282                                         destx, desty,
    283                                         numColumns, numRows);
     277    cairo_surface_mark_dirty_rectangle(m_data.m_surface.get(), destx, desty, numColumns, numRows);
    284278}
    285279
  • trunk/Source/WebCore/platform/graphics/cairo/ImageBufferDataCairo.h

    r95901 r147683  
    2525
    2626#include "PlatformContextCairo.h"
    27 
    28 typedef struct _cairo_surface cairo_surface_t;
     27#include "RefPtrCairo.h"
    2928
    3029namespace WebCore {
     
    3635    ImageBufferData(const IntSize&);
    3736
    38     cairo_surface_t* m_surface;
     37    RefPtr<cairo_surface_t> m_surface;
    3938    PlatformContextCairo m_platformContext;
    4039};
  • trunk/Source/WebCore/platform/graphics/gstreamer/ImageGStreamerCairo.cpp

    r139896 r147683  
    6060#endif
    6161
    62     cairo_surface_t* surface = cairo_image_surface_create_for_data(bufferData, cairoFormat, size.width(), size.height(), stride);
    63     ASSERT(cairo_surface_status(surface) == CAIRO_STATUS_SUCCESS);
    64     m_image = BitmapImage::create(surface);
     62    RefPtr<cairo_surface_t> surface = adoptRef(cairo_image_surface_create_for_data(bufferData, cairoFormat, size.width(), size.height(), stride));
     63    ASSERT(cairo_surface_status(surface.get()) == CAIRO_STATUS_SUCCESS);
     64    m_image = BitmapImage::create(surface.release());
    6565
    6666#ifdef GST_API_VERSION_1
  • trunk/Source/WebCore/platform/graphics/gtk/ImageBufferGtk.cpp

    r122652 r147683  
    7272    GOwnPtr<gchar> buffer(0);
    7373    gsize bufferSize;
    74     if (!encodeImage(m_data.m_surface, mimeType, quality, buffer, bufferSize))
     74    if (!encodeImage(m_data.m_surface.get(), mimeType, quality, buffer, bufferSize))
    7575        return "data:,";
    7676
  • trunk/Source/WebKit2/ChangeLog

    r147659 r147683  
     12013-04-04  Christophe Dumez  <ch.dumez@sisa.samsung.com>
     2
     3        [Cairo] Stop passing raw pointers to BitmapImage::create()
     4        https://bugs.webkit.org/show_bug.cgi?id=113945
     5
     6        Reviewed by Martin Robinson.
     7
     8        Pass a smart pointer in to BitmapImage::create() instead of a raw one
     9        for the cairo surface. The factory method prototype was updated for
     10        cairo in r147643.
     11
     12        * Shared/cairo/ShareableBitmapCairo.cpp:
     13        (WebKit::ShareableBitmap::createImage):
     14
    1152013-04-03  Dean Jackson  <dino@apple.com>
    216
  • trunk/Source/WebKit2/Shared/cairo/ShareableBitmapCairo.cpp

    r131354 r147683  
    9797        return 0;
    9898
    99     // BitmapImage::create adopts the cairo_surface_t that's passed in, which is why we need to leakRef here.
    100     return BitmapImage::create(surface.release().leakRef());
     99    return BitmapImage::create(surface.release());
    101100}
    102101
Note: See TracChangeset for help on using the changeset viewer.