Changeset 147683 in webkit
- Timestamp:
- Apr 4, 2013 4:59:12 PM (11 years ago)
- Location:
- trunk/Source
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r147682 r147683 1 2013-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 1 32 2013-04-04 Simon Fraser <simon.fraser@apple.com> 2 33 -
trunk/Source/WebCore/platform/graphics/cairo/ImageBufferCairo.cpp
r146351 r147683 50 50 51 51 ImageBufferData::ImageBufferData(const IntSize&) 52 : m_surface(0) 53 , m_platformContext(0) 52 : m_platformContext(0) 54 53 { 55 54 } … … 61 60 { 62 61 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) 67 64 return; // create will notice we didn't set m_initialized and fail. 68 65 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())); 70 67 m_data.m_platformContext.setCr(cr.get()); 71 68 m_context = adoptPtr(new GraphicsContext(&m_data.m_platformContext)); … … 75 72 ImageBuffer::~ImageBuffer() 76 73 { 77 cairo_surface_destroy(m_data.m_surface);78 74 } 79 75 … … 86 82 { 87 83 if (copyBehavior == CopyBackingStore) 88 return BitmapImage::create(copyCairoImageSurface(m_data.m_surface ).leakRef());84 return BitmapImage::create(copyCairoImageSurface(m_data.m_surface.get())); 89 85 90 86 // 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); 92 88 } 93 89 … … 99 95 void ImageBuffer::clip(GraphicsContext* context, const FloatRect& maskRect) const 100 96 { 101 context->platformContext()->pushImageMask(m_data.m_surface , maskRect);97 context->platformContext()->pushImageMask(m_data.m_surface.get(), maskRect); 102 98 } 103 99 … … 119 115 void ImageBuffer::platformTransformColorSpace(const Vector<int>& lookUpTable) 120 116 { 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()); 125 121 for (int y = 0; y < m_size.height(); ++y) { 126 122 unsigned* row = reinterpret_cast<unsigned*>(dataSrc + stride * y); … … 135 131 } 136 132 } 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()); 138 134 } 139 135 … … 141 137 PassRefPtr<Uint8ClampedArray> getImageData(const IntRect& rect, const ImageBufferData& data, const IntSize& size) 142 138 { 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); 144 140 145 141 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()); 147 143 unsigned char* dataDst = result->data(); 148 144 … … 172 168 int numRows = endy - originy; 173 169 174 int stride = cairo_image_surface_get_stride(data.m_surface );170 int stride = cairo_image_surface_get_stride(data.m_surface.get()); 175 171 unsigned destBytesPerRow = 4 * rect.width(); 176 172 … … 220 216 void ImageBuffer::putByteArray(Multiply multiplied, Uint8ClampedArray* source, const IntSize& sourceSize, const IntRect& sourceRect, const IntPoint& destPoint, CoordinateSystem) 221 217 { 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()); 225 221 226 222 ASSERT(sourceRect.width() > 0); … … 251 247 252 248 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()); 254 250 255 251 unsigned char* srcRows = source->data() + originy * srcBytesPerRow + originx * 4; … … 279 275 srcRows += srcBytesPerRow; 280 276 } 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); 284 278 } 285 279 -
trunk/Source/WebCore/platform/graphics/cairo/ImageBufferDataCairo.h
r95901 r147683 25 25 26 26 #include "PlatformContextCairo.h" 27 28 typedef struct _cairo_surface cairo_surface_t; 27 #include "RefPtrCairo.h" 29 28 30 29 namespace WebCore { … … 36 35 ImageBufferData(const IntSize&); 37 36 38 cairo_surface_t*m_surface;37 RefPtr<cairo_surface_t> m_surface; 39 38 PlatformContextCairo m_platformContext; 40 39 }; -
trunk/Source/WebCore/platform/graphics/gstreamer/ImageGStreamerCairo.cpp
r139896 r147683 60 60 #endif 61 61 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()); 65 65 66 66 #ifdef GST_API_VERSION_1 -
trunk/Source/WebCore/platform/graphics/gtk/ImageBufferGtk.cpp
r122652 r147683 72 72 GOwnPtr<gchar> buffer(0); 73 73 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)) 75 75 return "data:,"; 76 76 -
trunk/Source/WebKit2/ChangeLog
r147659 r147683 1 2013-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 1 15 2013-04-03 Dean Jackson <dino@apple.com> 2 16 -
trunk/Source/WebKit2/Shared/cairo/ShareableBitmapCairo.cpp
r131354 r147683 97 97 return 0; 98 98 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()); 101 100 } 102 101
Note: See TracChangeset
for help on using the changeset viewer.