From: bsalomon Date: Tue, 26 Aug 2014 19:51:20 +0000 (-0700) Subject: Make GrGpuResources register with GrResourceCache2 after fully constructed. X-Git-Tag: accepted/tizen/5.0/unified/20181102.025319~6106 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d68b3e491bb765beb7ca5e4ac8e0c80dedf5a83b;p=platform%2Fupstream%2FlibSkiaSharp.git Make GrGpuResources register with GrResourceCache2 after fully constructed. R=robertphillips@google.com Author: bsalomon@google.com Review URL: https://codereview.chromium.org/504313002 --- diff --git a/bench/GrResourceCacheBench.cpp b/bench/GrResourceCacheBench.cpp index 84e0e5d..068aff2 100644 --- a/bench/GrResourceCacheBench.cpp +++ b/bench/GrResourceCacheBench.cpp @@ -27,6 +27,7 @@ public: StencilResource(GrGpu* gpu, int id) : INHERITED(gpu, false) , fID(id) { + this->registerWithCache(); } virtual ~StencilResource() { this->release(); } @@ -51,6 +52,7 @@ public: TextureResource(GrGpu* gpu, int id) : INHERITED(gpu, false) , fID(id) { + this->registerWithCache(); } virtual ~TextureResource() { this->release(); } diff --git a/include/gpu/GrGpuResource.h b/include/gpu/GrGpuResource.h index 8b16282..17cdfc9 100644 --- a/include/gpu/GrGpuResource.h +++ b/include/gpu/GrGpuResource.h @@ -90,6 +90,11 @@ public: uint32_t getUniqueID() const { return fUniqueID; } protected: + + // This must be called by every GrGpuObject. It should be called once the object is fully + // initialized (i.e. not in a base class constructor). + void registerWithCache(); + GrGpuResource(GrGpu*, bool isWrapped); virtual ~GrGpuResource(); diff --git a/src/gpu/GrGpuResource.cpp b/src/gpu/GrGpuResource.cpp index 7a19c25..a0a7278 100644 --- a/src/gpu/GrGpuResource.cpp +++ b/src/gpu/GrGpuResource.cpp @@ -28,6 +28,9 @@ GrGpuResource::GrGpuResource(GrGpu* gpu, bool isWrapped) } else { fFlags = 0; } +} + +void GrGpuResource::registerWithCache() { get_resource_cache2(fGpu)->insertResource(this); } @@ -37,7 +40,7 @@ GrGpuResource::~GrGpuResource() { SkASSERT(this->wasDestroyed()); } -void GrGpuResource::release() { +void GrGpuResource::release() { if (NULL != fGpu) { this->onRelease(); get_resource_cache2(fGpu)->removeResource(this); diff --git a/src/gpu/GrPathRange.h b/src/gpu/GrPathRange.h index c53b987..b52fef1 100644 --- a/src/gpu/GrPathRange.h +++ b/src/gpu/GrPathRange.h @@ -38,6 +38,7 @@ public: : INHERITED(gpu, kIsWrapped), fSize(size), fStroke(stroke) { + this->registerWithCache(); } size_t getSize() const { return fSize; } diff --git a/src/gpu/GrResourceCache2.cpp b/src/gpu/GrResourceCache2.cpp index 0b6944e..c325efd 100644 --- a/src/gpu/GrResourceCache2.cpp +++ b/src/gpu/GrResourceCache2.cpp @@ -17,11 +17,13 @@ GrResourceCache2::~GrResourceCache2() { void GrResourceCache2::insertResource(GrGpuResource* resource) { SkASSERT(NULL != resource); SkASSERT(!resource->wasDestroyed()); + SkASSERT(!this->isInCache(resource)); fResources.addToHead(resource); ++fCount; } void GrResourceCache2::removeResource(GrGpuResource* resource) { + SkASSERT(this->isInCache(resource)); fResources.remove(resource); --fCount; } diff --git a/src/gpu/GrResourceCache2.h b/src/gpu/GrResourceCache2.h index 1262c80..8e79c09 100644 --- a/src/gpu/GrResourceCache2.h +++ b/src/gpu/GrResourceCache2.h @@ -33,6 +33,12 @@ public: void releaseAll(); private: +#ifdef SK_DEBUG + bool isInCache(const GrGpuResource* r) const { + return fResources.isInList(r); + } +#endif + int fCount; SkTInternalLList fResources; }; diff --git a/src/gpu/GrStencilAndCoverTextContext.cpp b/src/gpu/GrStencilAndCoverTextContext.cpp index af4ba64..4f5cab3 100644 --- a/src/gpu/GrStencilAndCoverTextContext.cpp +++ b/src/gpu/GrStencilAndCoverTextContext.cpp @@ -43,6 +43,7 @@ public: glyphs.reset(SkNEW_ARGS(GlyphPathRange, (context, cache->getDescriptor(), stroke))); context->addResourceToCache(resourceKey, glyphs); } + glyphs->registerWithCache(); return glyphs.detach(); } diff --git a/src/gpu/gl/GrGLIndexBuffer.cpp b/src/gpu/gl/GrGLIndexBuffer.cpp index a137348..5991c09 100644 --- a/src/gpu/gl/GrGLIndexBuffer.cpp +++ b/src/gpu/gl/GrGLIndexBuffer.cpp @@ -11,6 +11,7 @@ GrGLIndexBuffer::GrGLIndexBuffer(GrGpuGL* gpu, const Desc& desc) : INHERITED(gpu, desc.fIsWrapped, desc.fSizeInBytes, desc.fDynamic, 0 == desc.fID) , fImpl(gpu, desc, GR_GL_ELEMENT_ARRAY_BUFFER) { + this->registerWithCache(); } void GrGLIndexBuffer::onRelease() { diff --git a/src/gpu/gl/GrGLPath.cpp b/src/gpu/gl/GrGLPath.cpp index 8c76b59..972a7af 100644 --- a/src/gpu/gl/GrGLPath.cpp +++ b/src/gpu/gl/GrGLPath.cpp @@ -136,6 +136,7 @@ GrGLPath::GrGLPath(GrGpuGL* gpu, const SkPath& path, const SkStrokeRec& stroke) // FIXME: try to account for stroking, without rasterizing the stroke. fBounds.outset(stroke.getWidth(), stroke.getWidth()); } + this->registerWithCache(); } GrGLPath::~GrGLPath() { diff --git a/src/gpu/gl/GrGLRenderTarget.cpp b/src/gpu/gl/GrGLRenderTarget.cpp index 2486396..6143f34 100644 --- a/src/gpu/gl/GrGLRenderTarget.cpp +++ b/src/gpu/gl/GrGLRenderTarget.cpp @@ -21,6 +21,7 @@ void GrGLRenderTarget::init(const Desc& desc, fMSColorRenderbufferID = desc.fMSColorRenderbufferID; fViewport = viewport; fTexIDObj.reset(SkSafeRef(texID)); + this->registerWithCache(); } namespace { diff --git a/src/gpu/gl/GrGLStencilBuffer.h b/src/gpu/gl/GrGLStencilBuffer.h index 1cb0a33..024890d 100644 --- a/src/gpu/gl/GrGLStencilBuffer.h +++ b/src/gpu/gl/GrGLStencilBuffer.h @@ -32,6 +32,7 @@ public: : GrStencilBuffer(gpu, isWrapped, width, height, format.fStencilBits, sampleCnt) , fFormat(format) , fRenderbufferID(rbid) { + this->registerWithCache(); } virtual ~GrGLStencilBuffer(); diff --git a/src/gpu/gl/GrGLTexture.cpp b/src/gpu/gl/GrGLTexture.cpp index 255cdd9..bc013bc 100644 --- a/src/gpu/gl/GrGLTexture.cpp +++ b/src/gpu/gl/GrGLTexture.cpp @@ -33,6 +33,7 @@ void GrGLTexture::init(GrGpuGL* gpu, fRenderTarget.reset(SkNEW_ARGS(GrGLRenderTarget, (gpu, *rtDesc, vp, fTexIDObj, this))); } + this->registerWithCache(); } GrGLTexture::GrGLTexture(GrGpuGL* gpu, diff --git a/src/gpu/gl/GrGLVertexArray.cpp b/src/gpu/gl/GrGLVertexArray.cpp index 66feb82..39fd48c 100644 --- a/src/gpu/gl/GrGLVertexArray.cpp +++ b/src/gpu/gl/GrGLVertexArray.cpp @@ -73,6 +73,7 @@ GrGLVertexArray::GrGLVertexArray(GrGpuGL* gpu, GrGLint id, int attribCount) , fID(id) , fAttribArrays(attribCount) , fIndexBufferIDIsValid(false) { + this->registerWithCache(); } void GrGLVertexArray::onAbandon() { diff --git a/src/gpu/gl/GrGLVertexBuffer.cpp b/src/gpu/gl/GrGLVertexBuffer.cpp index a13ad12..d6b6301 100644 --- a/src/gpu/gl/GrGLVertexBuffer.cpp +++ b/src/gpu/gl/GrGLVertexBuffer.cpp @@ -11,6 +11,7 @@ GrGLVertexBuffer::GrGLVertexBuffer(GrGpuGL* gpu, const Desc& desc) : INHERITED(gpu, desc.fIsWrapped, desc.fSizeInBytes, desc.fDynamic, 0 == desc.fID) , fImpl(gpu, desc, GR_GL_ARRAY_BUFFER) { + this->registerWithCache(); } void GrGLVertexBuffer::onRelease() { diff --git a/tests/ResourceCacheTest.cpp b/tests/ResourceCacheTest.cpp index 4b43d4f..ae140e2 100644 --- a/tests/ResourceCacheTest.cpp +++ b/tests/ResourceCacheTest.cpp @@ -69,6 +69,7 @@ public: , fToDelete(NULL) , fSize(size) { ++fAlive; + this->registerWithCache(); } ~TestResource() {