Index: include/gpu/GrGpuResourceRef.h |
diff --git a/include/gpu/GrGpuResourceRef.h b/include/gpu/GrGpuResourceRef.h |
index 93298f0656f4e5e03529c27e04e59233c0dba1bc..4bae25c4eff018701c70e95650891afd2f556e29 100644 |
--- a/include/gpu/GrGpuResourceRef.h |
+++ b/include/gpu/GrGpuResourceRef.h |
@@ -159,25 +159,40 @@ private: |
*/ |
template <typename T, GrIOType IO_TYPE> class GrPendingIOResource : SkNoncopyable { |
public: |
- GrPendingIOResource(T* resource) : fResource(resource) { |
- if (NULL != fResource) { |
+ GrPendingIOResource(T* resource = NULL) : fResource(NULL) { |
+ this->reset(resource); |
+ } |
+ |
+ void reset(T* resource) { |
+ if (resource) { |
switch (IO_TYPE) { |
case kRead_GrIOType: |
- fResource->addPendingRead(); |
+ resource->addPendingRead(); |
break; |
case kWrite_GrIOType: |
- fResource->addPendingWrite(); |
+ resource->addPendingWrite(); |
break; |
case kRW_GrIOType: |
- fResource->addPendingRead(); |
- fResource->addPendingWrite(); |
+ resource->addPendingRead(); |
+ resource->addPendingWrite(); |
break; |
} |
} |
+ if (fResource) { |
bsalomon
2014/11/18 22:05:27
why not just this->release(), since it does the ch
|
+ this->release(); |
+ } |
+ fResource = resource; |
} |
~GrPendingIOResource() { |
- if (NULL != fResource) { |
+ this->release(); |
+ } |
+ |
+ T* get() const { return fResource; } |
+ |
+private: |
+ void release() { |
+ if (fResource) { |
switch (IO_TYPE) { |
case kRead_GrIOType: |
fResource->completedRead(); |
@@ -193,9 +208,6 @@ public: |
} |
} |
- T* get() const { return fResource; } |
- |
-private: |
T* fResource; |
}; |
#endif |