Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(229)

Unified Diff: src/gpu/GrContext.cpp

Issue 1555953004: Create debug only SkSingleOwner (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: add sentinels to GrContext Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « include/private/SkMutex.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/GrContext.cpp
diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp
index 2b20e17ae16369155ba60ab6045f689db5f44341..728ef7249febc73d0e1d502fd0ecdf3a5c44f9da 100644
--- a/src/gpu/GrContext.cpp
+++ b/src/gpu/GrContext.cpp
@@ -23,9 +23,16 @@
#include "text/GrTextBlobCache.h"
#define ASSERT_OWNED_RESOURCE(R) SkASSERT(!(R) || (R)->getContext() == this)
-#define RETURN_IF_ABANDONED if (fDrawingManager->abandoned()) { return; }
-#define RETURN_FALSE_IF_ABANDONED if (fDrawingManager->abandoned()) { return false; }
-#define RETURN_NULL_IF_ABANDONED if (fDrawingManager->abandoned()) { return nullptr; }
+#define TAKE_DEBUG_MUTEX \
+ SkASSERT(1 == fSafetyMutex.fSemaphore.fCount || fSafetyMutex.fOwner == SkGetThreadID()); \
+ SkDEBUGCODE(SkAutoTAcquire<SkRecursiveMutex> debug_SafetyMutex(fSafetyMutex);)
+#define RETURN_IF_ABANDONED TAKE_DEBUG_MUTEX if (fDrawingManager->abandoned()) { return; }
+#define RETURN_FALSE_IF_ABANDONED \
+ TAKE_DEBUG_MUTEX \
+ if (fDrawingManager->abandoned()) { return false; }
+#define RETURN_NULL_IF_ABANDONED \
+ TAKE_DEBUG_MUTEX \
+ if (fDrawingManager->abandoned()) { return nullptr; }
////////////////////////////////////////////////////////////////////////////////
@@ -77,6 +84,8 @@ bool GrContext::init(GrBackend backend, GrBackendContext backendContext,
}
void GrContext::initCommon(const GrContextOptions& options) {
+ TAKE_DEBUG_MUTEX
mtklein 2016/01/05 22:47:50 What is the constraint that you are trying to enfo
joshualitt 2016/01/06 14:03:27 No, but a GrContext may only ever be used from one
mtklein 2016/01/06 14:33:46 So what do we need the reentrant mutex for? We're
+
fCaps = SkRef(fGpu->caps());
fResourceCache = new GrResourceCache(fCaps);
fResourceCache->setOverBudgetCallback(OverBudgetCB, this);
@@ -99,6 +108,8 @@ void GrContext::initCommon(const GrContextOptions& options) {
}
GrContext::~GrContext() {
+ TAKE_DEBUG_MUTEX
+
if (!fGpu) {
SkASSERT(!fCaps);
return;
@@ -121,6 +132,8 @@ GrContext::~GrContext() {
}
void GrContext::abandonContext() {
+ TAKE_DEBUG_MUTEX
+
fResourceProvider->abandon();
// Need to abandon the drawing manager first so all the render targets
@@ -139,10 +152,14 @@ void GrContext::abandonContext() {
}
void GrContext::resetContext(uint32_t state) {
+ TAKE_DEBUG_MUTEX
+
fGpu->markContextDirty(state);
}
void GrContext::freeGpuResources() {
+ TAKE_DEBUG_MUTEX
+
this->flush();
fBatchFontCache->freeAll();
@@ -154,6 +171,8 @@ void GrContext::freeGpuResources() {
}
void GrContext::getResourceCacheUsage(int* resourceCount, size_t* resourceBytes) const {
+ TAKE_DEBUG_MUTEX
+
if (resourceCount) {
*resourceCount = fResourceCache->getBudgetedResourceCount();
}
@@ -535,6 +554,8 @@ void GrContext::flushSurfaceWrites(GrSurface* surface) {
////////////////////////////////////////////////////////////////////////////////
int GrContext::getRecommendedSampleCount(GrPixelConfig config,
SkScalar dpi) const {
+ TAKE_DEBUG_MUTEX
+
if (!this->caps()->isConfigRenderable(config, true)) {
return 0;
}
@@ -552,10 +573,12 @@ int GrContext::getRecommendedSampleCount(GrPixelConfig config,
GrDrawContext* GrContext::drawContext(GrRenderTarget* rt, const SkSurfaceProps* surfaceProps) {
+ TAKE_DEBUG_MUTEX
return fDrawingManager->drawContext(rt, surfaceProps);
}
-bool GrContext::abandoned() const {
+bool GrContext::abandoned() const {
+ TAKE_DEBUG_MUTEX
return fDrawingManager->abandoned();
}
@@ -570,6 +593,7 @@ void test_pm_conversions(GrContext* ctx, int* pmToUPMValue, int* upmToPMValue) {
}
void GrContext::testPMConversionsIfNecessary(uint32_t flags) {
+ TAKE_DEBUG_MUTEX
if (SkToBool(kUnpremul_PixelOpsFlag & flags)) {
SkAutoMutexAcquire ama(fTestPMConversionsMutex);
if (!fDidTestPMConversions) {
@@ -582,6 +606,7 @@ void GrContext::testPMConversionsIfNecessary(uint32_t flags) {
const GrFragmentProcessor* GrContext::createPMToUPMEffect(GrTexture* texture,
bool swapRAndB,
const SkMatrix& matrix) const {
+ TAKE_DEBUG_MUTEX
// We should have already called this->testPMConversionsIfNecessary().
SkASSERT(fDidTestPMConversions);
GrConfigConversionEffect::PMConversion pmToUPM =
@@ -596,6 +621,7 @@ const GrFragmentProcessor* GrContext::createPMToUPMEffect(GrTexture* texture,
const GrFragmentProcessor* GrContext::createUPMToPMEffect(GrTexture* texture,
bool swapRAndB,
const SkMatrix& matrix) const {
+ TAKE_DEBUG_MUTEX
// We should have already called this->testPMConversionsIfNecessary().
SkASSERT(fDidTestPMConversions);
GrConfigConversionEffect::PMConversion upmToPM =
@@ -608,6 +634,7 @@ const GrFragmentProcessor* GrContext::createUPMToPMEffect(GrTexture* texture,
}
bool GrContext::didFailPMUPMConversionTest() const {
+ TAKE_DEBUG_MUTEX
// We should have already called this->testPMConversionsIfNecessary().
SkASSERT(fDidTestPMConversions);
// The PM<->UPM tests fail or succeed together so we only need to check one.
@@ -617,6 +644,7 @@ bool GrContext::didFailPMUPMConversionTest() const {
//////////////////////////////////////////////////////////////////////////////
void GrContext::getResourceCacheLimits(int* maxTextures, size_t* maxTextureBytes) const {
+ TAKE_DEBUG_MUTEX
if (maxTextures) {
*maxTextures = fResourceCache->getMaxResourceCount();
}
@@ -626,11 +654,13 @@ void GrContext::getResourceCacheLimits(int* maxTextures, size_t* maxTextureBytes
}
void GrContext::setResourceCacheLimits(int maxTextures, size_t maxTextureBytes) {
+ TAKE_DEBUG_MUTEX
fResourceCache->setLimits(maxTextures, maxTextureBytes);
}
//////////////////////////////////////////////////////////////////////////////
void GrContext::dumpMemoryStatistics(SkTraceMemoryDump* traceMemoryDump) const {
+ TAKE_DEBUG_MUTEX
fResourceCache->dumpMemoryStatistics(traceMemoryDump);
}
« no previous file with comments | « include/private/SkMutex.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698