Chromium Code Reviews| 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 |