From d426ef8502623f605d9f29b27450df8d13ae17d6 Mon Sep 17 00:00:00 2001 From: James Willcox Date: Wed, 26 Mar 2014 13:21:50 -0500 Subject: [PATCH] Bug 981621 - Don't crash if we fail to create SkiaGL backing texture r=gwright --- gfx/2d/2D.h | 2 +- gfx/2d/DrawTargetSkia.cpp | 7 ++++++- gfx/2d/DrawTargetSkia.h | 2 +- gfx/2d/Factory.cpp | 7 ++++--- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/gfx/2d/2D.h b/gfx/2d/2D.h index 6f509999cea..7d4c6e0d797 100644 --- a/gfx/2d/2D.h +++ b/gfx/2d/2D.h @@ -979,7 +979,7 @@ public: } #ifdef USE_SKIA_GPU - virtual void InitWithGrContext(GrContext* aGrContext, + virtual bool InitWithGrContext(GrContext* aGrContext, const IntSize &aSize, SurfaceFormat aFormat) { diff --git a/gfx/2d/DrawTargetSkia.cpp b/gfx/2d/DrawTargetSkia.cpp index 964296e4818..1c18a78898b 100644 --- a/gfx/2d/DrawTargetSkia.cpp +++ b/gfx/2d/DrawTargetSkia.cpp @@ -659,7 +659,7 @@ DrawTargetSkia::Init(const IntSize &aSize, SurfaceFormat aFormat) } #ifdef USE_SKIA_GPU -void +bool DrawTargetSkia::InitWithGrContext(GrContext* aGrContext, const IntSize &aSize, SurfaceFormat aFormat) @@ -681,12 +681,17 @@ DrawTargetSkia::InitWithGrContext(GrContext* aGrContext, targetDescriptor.fSampleCnt = 0; SkAutoTUnref skiaTexture(mGrContext->createUncachedTexture(targetDescriptor, NULL, 0)); + if (!skiaTexture) { + return false; + } mTexture = (uint32_t)skiaTexture->getTextureHandle(); SkAutoTUnref device(new SkGpuDevice(mGrContext.get(), skiaTexture->asRenderTarget())); SkAutoTUnref canvas(new SkCanvas(device.get())); mCanvas = canvas.get(); + + return true; } #endif diff --git a/gfx/2d/DrawTargetSkia.h b/gfx/2d/DrawTargetSkia.h index c8efe7fef52..ad40f12ad3f 100644 --- a/gfx/2d/DrawTargetSkia.h +++ b/gfx/2d/DrawTargetSkia.h @@ -106,7 +106,7 @@ public: void Init(unsigned char* aData, const IntSize &aSize, int32_t aStride, SurfaceFormat aFormat); #ifdef USE_SKIA_GPU - void InitWithGrContext(GrContext* aGrContext, + bool InitWithGrContext(GrContext* aGrContext, const IntSize &aSize, SurfaceFormat aFormat) MOZ_OVERRIDE; #endif diff --git a/gfx/2d/Factory.cpp b/gfx/2d/Factory.cpp index ce491502c88..2bd18e472ef 100644 --- a/gfx/2d/Factory.cpp +++ b/gfx/2d/Factory.cpp @@ -590,9 +590,10 @@ Factory::CreateDrawTargetSkiaWithGrContext(GrContext* aGrContext, const IntSize &aSize, SurfaceFormat aFormat) { - DrawTargetSkia* newDrawTargetSkia = new DrawTargetSkia(); - newDrawTargetSkia->InitWithGrContext(aGrContext, aSize, aFormat); - RefPtr newTarget = newDrawTargetSkia; + RefPtr newTarget = new DrawTargetSkia(); + if (!newTarget->InitWithGrContext(aGrContext, aSize, aFormat)) { + return nullptr; + } return newTarget; }