Title: [199367] releases/WebKitGTK/webkit-2.12/Source/WebCore
- Revision
- 199367
- Author
- [email protected]
- Date
- 2016-04-12 09:46:37 -0700 (Tue, 12 Apr 2016)
Log Message
Merge r198205 - Leak: Accelerated ImageBufferCairo doesn't destroy the used textures
https://bugs.webkit.org/show_bug.cgi?id=155431
Patch by Miguel Gomez <[email protected]> on 2016-03-15
Reviewed by Žan Doberšek.
When using the Cairo backend, add a destructor to ImageBufferData and use it to destroy the
textures created if the buffer is being accelerated.
No new tests, already covered by existing ones.
* platform/graphics/cairo/ImageBufferCairo.cpp:
(WebCore::ImageBufferData::ImageBufferData):
Store the renderingMode flag.
(WebCore::ImageBufferData::~ImageBufferData):
Destroy gl resources if renderingMode is accelerated.
(WebCore::ImageBuffer::ImageBuffer):
Pass renderingMode to the data class and use it fro checks instead of the function parameter.
* platform/graphics/cairo/ImageBufferDataCairo.h:
Add destructor and a renderingMode flag.
Modified Paths
Diff
Modified: releases/WebKitGTK/webkit-2.12/Source/WebCore/ChangeLog (199366 => 199367)
--- releases/WebKitGTK/webkit-2.12/Source/WebCore/ChangeLog 2016-04-12 16:44:36 UTC (rev 199366)
+++ releases/WebKitGTK/webkit-2.12/Source/WebCore/ChangeLog 2016-04-12 16:46:37 UTC (rev 199367)
@@ -1,3 +1,25 @@
+2016-03-15 Miguel Gomez <[email protected]>
+
+ Leak: Accelerated ImageBufferCairo doesn't destroy the used textures
+ https://bugs.webkit.org/show_bug.cgi?id=155431
+
+ Reviewed by Žan Doberšek.
+
+ When using the Cairo backend, add a destructor to ImageBufferData and use it to destroy the
+ textures created if the buffer is being accelerated.
+
+ No new tests, already covered by existing ones.
+
+ * platform/graphics/cairo/ImageBufferCairo.cpp:
+ (WebCore::ImageBufferData::ImageBufferData):
+ Store the renderingMode flag.
+ (WebCore::ImageBufferData::~ImageBufferData):
+ Destroy gl resources if renderingMode is accelerated.
+ (WebCore::ImageBuffer::ImageBuffer):
+ Pass renderingMode to the data class and use it fro checks instead of the function parameter.
+ * platform/graphics/cairo/ImageBufferDataCairo.h:
+ Add destructor and a renderingMode flag.
+
2016-03-10 Antonio Gomes <[email protected]>
Selecting with shift+drag results in unexpected drag-n-drop
Modified: releases/WebKitGTK/webkit-2.12/Source/WebCore/platform/graphics/cairo/ImageBufferCairo.cpp (199366 => 199367)
--- releases/WebKitGTK/webkit-2.12/Source/WebCore/platform/graphics/cairo/ImageBufferCairo.cpp 2016-04-12 16:44:36 UTC (rev 199366)
+++ releases/WebKitGTK/webkit-2.12/Source/WebCore/platform/graphics/cairo/ImageBufferCairo.cpp 2016-04-12 16:46:37 UTC (rev 199367)
@@ -68,9 +68,10 @@
namespace WebCore {
-ImageBufferData::ImageBufferData(const IntSize& size)
+ImageBufferData::ImageBufferData(const IntSize& size, RenderingMode renderingMode)
: m_platformContext(0)
, m_size(size)
+ , m_renderingMode(renderingMode)
#if ENABLE(ACCELERATED_2D_CANVAS)
#if USE(COORDINATED_GRAPHICS_THREADED)
, m_platformLayerProxy(adoptRef(new TextureMapperPlatformLayerProxy))
@@ -81,8 +82,30 @@
{
}
+ImageBufferData::~ImageBufferData()
+{
+ if (m_renderingMode != Accelerated)
+ return;
+
#if ENABLE(ACCELERATED_2D_CANVAS)
+ GLContext* previousActiveContext = GLContext::getCurrent();
+ GLContext::sharingContext()->makeContextCurrent();
+
+ if (m_texture)
+ glDeleteTextures(1, &m_texture);
+
#if USE(COORDINATED_GRAPHICS_THREADED)
+ if (m_compositorTexture)
+ glDeleteTextures(1, &m_compositorTexture);
+#endif
+
+ if (previousActiveContext)
+ previousActiveContext->makeContextCurrent();
+#endif
+}
+
+#if ENABLE(ACCELERATED_2D_CANVAS)
+#if USE(COORDINATED_GRAPHICS_THREADED)
void ImageBufferData::createCompositorBuffer()
{
GLContext::sharingContext()->makeContextCurrent();
@@ -163,7 +186,7 @@
#endif
ImageBuffer::ImageBuffer(const FloatSize& size, float /* resolutionScale */, ColorSpace, RenderingMode renderingMode, bool& success)
- : m_data(IntSize(size))
+ : m_data(IntSize(size), renderingMode)
, m_size(size)
, m_logicalSize(size)
{
@@ -172,14 +195,14 @@
return;
#if ENABLE(ACCELERATED_2D_CANVAS)
- if (renderingMode == Accelerated) {
+ if (m_data.m_renderingMode == Accelerated) {
m_data.createCairoGLSurface();
if (!m_data.m_surface || cairo_surface_status(m_data.m_surface.get()) != CAIRO_STATUS_SUCCESS)
- renderingMode = Unaccelerated; // If allocation fails, fall back to non-accelerated path.
+ m_data.m_renderingMode = Unaccelerated; // If allocation fails, fall back to non-accelerated path.
}
- if (renderingMode == Unaccelerated)
+ if (m_data.m_renderingMode == Unaccelerated)
#else
- ASSERT_UNUSED(renderingMode, renderingMode != Accelerated);
+ ASSERT(m_data.m_renderingMode != Accelerated);
#endif
m_data.m_surface = adoptRef(cairo_image_surface_create(CAIRO_FORMAT_ARGB32, size.width(), size.height()));
Modified: releases/WebKitGTK/webkit-2.12/Source/WebCore/platform/graphics/cairo/ImageBufferDataCairo.h (199366 => 199367)
--- releases/WebKitGTK/webkit-2.12/Source/WebCore/platform/graphics/cairo/ImageBufferDataCairo.h 2016-04-12 16:44:36 UTC (rev 199366)
+++ releases/WebKitGTK/webkit-2.12/Source/WebCore/platform/graphics/cairo/ImageBufferDataCairo.h 2016-04-12 16:46:37 UTC (rev 199367)
@@ -54,12 +54,14 @@
#endif
{
public:
- ImageBufferData(const IntSize&);
+ ImageBufferData(const IntSize&, RenderingMode);
+ virtual ~ImageBufferData();
RefPtr<cairo_surface_t> m_surface;
PlatformContextCairo m_platformContext;
std::unique_ptr<GraphicsContext> m_context;
IntSize m_size;
+ RenderingMode m_renderingMode;
#if ENABLE(ACCELERATED_2D_CANVAS)
void createCairoGLSurface();
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes