Index: include/gpu/GrContext.h |
diff --git a/include/gpu/GrContext.h b/include/gpu/GrContext.h |
index 4245b7fa943cc894cb216f609f1e767116264777..6d67d3ebb3acc2b57094fb3fc858c246d5816fab 100644 |
--- a/include/gpu/GrContext.h |
+++ b/include/gpu/GrContext.h |
@@ -24,6 +24,7 @@ |
struct GrBatchAtlasConfig; |
class GrBatchFontCache; |
struct GrContextOptions; |
+class GrContextThreadSafeProxy; |
class GrDrawingManager; |
class GrDrawContext; |
class GrDrawTarget; |
@@ -61,6 +62,8 @@ public: |
virtual ~GrContext(); |
+ GrContextThreadSafeProxy* threadSafeProxy(); |
+ |
/** |
* The GrContext normally assumes that no outsider is setting state |
* within the underlying 3D API's context/device/whatever. This call informs |
@@ -359,25 +362,27 @@ public: |
SkDEBUGCODE(GrSingleOwner* debugSingleOwner() const { return &fSingleOwner; } ) |
private: |
- GrGpu* fGpu; |
- const GrCaps* fCaps; |
- GrResourceCache* fResourceCache; |
+ GrGpu* fGpu; |
+ const GrCaps* fCaps; |
+ GrResourceCache* fResourceCache; |
// this union exists because the inheritance of GrTextureProvider->GrResourceProvider |
// is in a private header. |
union { |
- GrResourceProvider* fResourceProvider; |
- GrTextureProvider* fTextureProvider; |
+ GrResourceProvider* fResourceProvider; |
+ GrTextureProvider* fTextureProvider; |
}; |
- GrBatchFontCache* fBatchFontCache; |
- SkAutoTDelete<GrLayerCache> fLayerCache; |
- SkAutoTDelete<GrTextBlobCache> fTextBlobCache; |
+ SkAutoTUnref<GrContextThreadSafeProxy> fThreadSafeProxy; |
+ |
+ GrBatchFontCache* fBatchFontCache; |
+ SkAutoTDelete<GrLayerCache> fLayerCache; |
+ SkAutoTDelete<GrTextBlobCache> fTextBlobCache; |
// Set by OverbudgetCB() to request that GrContext flush before exiting a draw. |
- bool fFlushToReduceCacheSize; |
- bool fDidTestPMConversions; |
- int fPMToUPMConversion; |
- int fUPMToPMConversion; |
+ bool fFlushToReduceCacheSize; |
+ bool fDidTestPMConversions; |
+ int fPMToUPMConversion; |
+ int fUPMToPMConversion; |
// The sw backend may call GrContext::readSurfacePixels on multiple threads |
// We may transfer the responsibilty for using a mutex to the sw backend |
// when there are fewer code paths that lead to a readSurfacePixels call |
@@ -388,26 +393,26 @@ private: |
// readSurfacePixels proceeds to grab it. |
// TODO: Stop pretending to make GrContext thread-safe for sw rasterization and provide |
// a mechanism to make a SkPicture safe for multithreaded sw rasterization. |
- SkMutex fReadPixelsMutex; |
- SkMutex fTestPMConversionsMutex; |
+ SkMutex fReadPixelsMutex; |
+ SkMutex fTestPMConversionsMutex; |
// In debug builds we guard against improper thread handling |
// This guard is passed to the GrDrawingManager and, from there to all the |
// GrDrawContexts. It is also passed to the GrTextureProvider and SkGpuDevice. |
- mutable GrSingleOwner fSingleOwner; |
+ mutable GrSingleOwner fSingleOwner; |
struct CleanUpData { |
PFCleanUpFunc fFunc; |
void* fInfo; |
}; |
- SkTDArray<CleanUpData> fCleanUpData; |
+ SkTDArray<CleanUpData> fCleanUpData; |
- const uint32_t fUniqueID; |
+ const uint32_t fUniqueID; |
- SkAutoTDelete<GrDrawingManager> fDrawingManager; |
+ SkAutoTDelete<GrDrawingManager> fDrawingManager; |
- GrAuditTrail fAuditTrail; |
+ GrAuditTrail fAuditTrail; |
// TODO: have the CMM use drawContexts and rm this friending |
friend class GrClipMaskManager; // the CMM is friended just so it can call 'drawingManager' |
@@ -452,4 +457,23 @@ private: |
typedef SkRefCnt INHERITED; |
}; |
+/** |
+ * Can be used to perform actions related to the generating GrContext in a thread safe manner. The |
+ * proxy does not access the 3D API (e.g. OpenGL) that backs the generating GrContext. |
+ */ |
+class GrContextThreadSafeProxy : public SkRefCnt { |
+private: |
+ GrContextThreadSafeProxy(const GrCaps* caps, uint32_t uniqueID) |
+ : fCaps(SkRef(caps)) |
+ , fContextUniqueID(uniqueID) {} |
+ |
+ SkAutoTUnref<const GrCaps> fCaps; |
+ uint32_t fContextUniqueID; |
+ |
+ friend class GrContext; |
+ friend class SkImage; |
+ |
+ typedef SkRefCnt INHERITED; |
+}; |
+ |
#endif |