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 this->release(); |
| 182 fResource = resource; |
177 } | 183 } |
178 | 184 |
179 ~GrPendingIOResource() { | 185 ~GrPendingIOResource() { |
180 if (NULL != fResource) { | 186 this->release(); |
| 187 } |
| 188 |
| 189 T* get() const { return fResource; } |
| 190 |
| 191 private: |
| 192 void release() { |
| 193 if (fResource) { |
181 switch (IO_TYPE) { | 194 switch (IO_TYPE) { |
182 case kRead_GrIOType: | 195 case kRead_GrIOType: |
183 fResource->completedRead(); | 196 fResource->completedRead(); |
184 break; | 197 break; |
185 case kWrite_GrIOType: | 198 case kWrite_GrIOType: |
186 fResource->completedWrite(); | 199 fResource->completedWrite(); |
187 break; | 200 break; |
188 case kRW_GrIOType: | 201 case kRW_GrIOType: |
189 fResource->completedRead(); | 202 fResource->completedRead(); |
190 fResource->completedWrite(); | 203 fResource->completedWrite(); |
191 break; | 204 break; |
192 } | 205 } |
193 } | 206 } |
194 } | 207 } |
195 | 208 |
196 T* get() const { return fResource; } | |
197 | |
198 private: | |
199 T* fResource; | 209 T* fResource; |
200 }; | 210 }; |
201 #endif | 211 #endif |
OLD | NEW |