Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright 2014 Google Inc. | 2 * Copyright 2014 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #ifndef GrGpuResourceRef_DEFINED | 8 #ifndef GrGpuResourceRef_DEFINED |
| 9 #define GrGpuResourceRef_DEFINED | 9 #define GrGpuResourceRef_DEFINED |
| 10 | 10 |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 152 private: | 152 private: |
| 153 typedef GrGpuResourceRef INHERITED; | 153 typedef GrGpuResourceRef INHERITED; |
| 154 }; | 154 }; |
| 155 | 155 |
| 156 /** | 156 /** |
| 157 * This is similar to GrTGpuResourceRef but can only be in the pending IO state. It never owns a | 157 * This is similar to GrTGpuResourceRef but can only be in the pending IO state. It never owns a |
| 158 * ref. | 158 * ref. |
| 159 */ | 159 */ |
| 160 template <typename T, GrIOType IO_TYPE> class GrPendingIOResource : SkNoncopyabl e { | 160 template <typename T, GrIOType IO_TYPE> class GrPendingIOResource : SkNoncopyabl e { |
| 161 public: | 161 public: |
| 162 GrPendingIOResource(T* resource) : fResource(resource) { | 162 GrPendingIOResource(T* resource = NULL) : fResource(NULL) { |
| 163 if (NULL != fResource) { | 163 this->reset(resource); |
| 164 } | |
| 165 | |
| 166 void reset(T* resource) { | |
| 167 if (resource) { | |
| 164 switch (IO_TYPE) { | 168 switch (IO_TYPE) { |
| 165 case kRead_GrIOType: | 169 case kRead_GrIOType: |
| 166 fResource->addPendingRead(); | 170 resource->addPendingRead(); |
| 167 break; | 171 break; |
| 168 case kWrite_GrIOType: | 172 case kWrite_GrIOType: |
| 169 fResource->addPendingWrite(); | 173 resource->addPendingWrite(); |
| 170 break; | 174 break; |
| 171 case kRW_GrIOType: | 175 case kRW_GrIOType: |
| 172 fResource->addPendingRead(); | 176 resource->addPendingRead(); |
| 173 fResource->addPendingWrite(); | 177 resource->addPendingWrite(); |
| 174 break; | 178 break; |
| 175 } | 179 } |
| 176 } | 180 } |
| 181 if (fResource) { | |
|
bsalomon
2014/11/18 22:05:27
why not just this->release(), since it does the ch
| |
| 182 this->release(); | |
| 183 } | |
| 184 fResource = resource; | |
| 177 } | 185 } |
| 178 | 186 |
| 179 ~GrPendingIOResource() { | 187 ~GrPendingIOResource() { |
| 180 if (NULL != fResource) { | 188 this->release(); |
| 189 } | |
| 190 | |
| 191 T* get() const { return fResource; } | |
| 192 | |
| 193 private: | |
| 194 void release() { | |
| 195 if (fResource) { | |
| 181 switch (IO_TYPE) { | 196 switch (IO_TYPE) { |
| 182 case kRead_GrIOType: | 197 case kRead_GrIOType: |
| 183 fResource->completedRead(); | 198 fResource->completedRead(); |
| 184 break; | 199 break; |
| 185 case kWrite_GrIOType: | 200 case kWrite_GrIOType: |
| 186 fResource->completedWrite(); | 201 fResource->completedWrite(); |
| 187 break; | 202 break; |
| 188 case kRW_GrIOType: | 203 case kRW_GrIOType: |
| 189 fResource->completedRead(); | 204 fResource->completedRead(); |
| 190 fResource->completedWrite(); | 205 fResource->completedWrite(); |
| 191 break; | 206 break; |
| 192 } | 207 } |
| 193 } | 208 } |
| 194 } | 209 } |
| 195 | 210 |
| 196 T* get() const { return fResource; } | |
| 197 | |
| 198 private: | |
| 199 T* fResource; | 211 T* fResource; |
| 200 }; | 212 }; |
| 201 #endif | 213 #endif |
| OLD | NEW |