OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2007 The Android Open Source Project | 3 * Copyright 2007 The Android Open Source Project |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 | 9 |
10 #include "SkPictureFlat.h" | 10 #include "SkPictureFlat.h" |
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
215 int32_t id = sk_atomic_inc(&gNextID); | 215 int32_t id = sk_atomic_inc(&gNextID); |
216 if (id >= 1 << (8 * sizeof(Domain))) { | 216 if (id >= 1 << (8 * sizeof(Domain))) { |
217 SK_CRASH(); | 217 SK_CRASH(); |
218 } | 218 } |
219 | 219 |
220 return static_cast<Domain>(id); | 220 return static_cast<Domain>(id); |
221 } | 221 } |
222 | 222 |
223 /////////////////////////////////////////////////////////////////////////////// | 223 /////////////////////////////////////////////////////////////////////////////// |
224 | 224 |
| 225 #ifdef SK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES |
| 226 |
225 SkCanvas* SkPicture::beginRecording(int width, int height, | 227 SkCanvas* SkPicture::beginRecording(int width, int height, |
226 uint32_t recordingFlags) { | 228 uint32_t recordingFlags) { |
227 if (fPlayback) { | 229 if (fPlayback) { |
228 SkDELETE(fPlayback); | 230 SkDELETE(fPlayback); |
229 fPlayback = NULL; | 231 fPlayback = NULL; |
230 } | 232 } |
231 SkSafeUnref(fAccelData); | 233 SkSafeUnref(fAccelData); |
232 SkSafeSetNull(fRecord); | 234 SkSafeSetNull(fRecord); |
233 | 235 |
234 this->needsNewGenID(); | 236 this->needsNewGenID(); |
(...skipping 10 matching lines...) Expand all Loading... |
245 fRecord = SkNEW_ARGS(SkBBoxHierarchyRecord, (size, recordingFlags, tree)
); | 247 fRecord = SkNEW_ARGS(SkBBoxHierarchyRecord, (size, recordingFlags, tree)
); |
246 tree->unref(); | 248 tree->unref(); |
247 } else { | 249 } else { |
248 fRecord = SkNEW_ARGS(SkPictureRecord, (size, recordingFlags)); | 250 fRecord = SkNEW_ARGS(SkPictureRecord, (size, recordingFlags)); |
249 } | 251 } |
250 fRecord->beginRecording(); | 252 fRecord->beginRecording(); |
251 | 253 |
252 return fRecord; | 254 return fRecord; |
253 } | 255 } |
254 | 256 |
| 257 #endif |
| 258 |
| 259 SkCanvas* SkPicture::beginRecording(int width, int height, |
| 260 SkBBHFactory* bbhFactory, |
| 261 uint32_t recordingFlags) { |
| 262 if (fPlayback) { |
| 263 SkDELETE(fPlayback); |
| 264 fPlayback = NULL; |
| 265 } |
| 266 SkSafeUnref(fAccelData); |
| 267 SkSafeSetNull(fRecord); |
| 268 |
| 269 this->needsNewGenID(); |
| 270 |
| 271 fWidth = width; |
| 272 fHeight = height; |
| 273 |
| 274 const SkISize size = SkISize::Make(width, height); |
| 275 |
| 276 if (NULL != bbhFactory) { |
| 277 SkAutoTUnref<SkBBoxHierarchy> tree((*bbhFactory)(width, height)); |
| 278 SkASSERT(NULL != tree); |
| 279 fRecord = SkNEW_ARGS(SkBBoxHierarchyRecord, (size, |
| 280 recordingFlags| |
| 281 kOptimizeForClippedPlayback
_RecordingFlag, |
| 282 tree.get())); |
| 283 } else { |
| 284 fRecord = SkNEW_ARGS(SkPictureRecord, (size, recordingFlags)); |
| 285 } |
| 286 fRecord->beginRecording(); |
| 287 |
| 288 return fRecord; |
| 289 } |
| 290 |
| 291 |
| 292 #ifdef SK_SUPPORT_LEGACY_DERIVED_PICTURE_CLASSES |
| 293 |
255 SkBBoxHierarchy* SkPicture::createBBoxHierarchy() const { | 294 SkBBoxHierarchy* SkPicture::createBBoxHierarchy() const { |
256 // TODO: this code is now replicated in SkRTreePicture. Once all external | 295 // TODO: this code is now replicated in SkRTreePicture. Once all external |
257 // clients have been weaned off of kOptimizeForClippedPlayback_RecordingFlag
, | 296 // clients have been weaned off of kOptimizeForClippedPlayback_RecordingFlag
, |
258 // this code can be removed. | 297 // this code can be removed. |
259 | 298 |
260 // These values were empirically determined to produce reasonable | 299 // These values were empirically determined to produce reasonable |
261 // performance in most cases. | 300 // performance in most cases. |
262 static const int kRTreeMinChildren = 6; | 301 static const int kRTreeMinChildren = 6; |
263 static const int kRTreeMaxChildren = 11; | 302 static const int kRTreeMaxChildren = 11; |
264 | 303 |
265 SkScalar aspectRatio = SkScalarDiv(SkIntToScalar(fWidth), | 304 SkScalar aspectRatio = SkScalarDiv(SkIntToScalar(fWidth), |
266 SkIntToScalar(fHeight)); | 305 SkIntToScalar(fHeight)); |
267 bool sortDraws = false; // Do not sort draw calls when bulk loading. | 306 bool sortDraws = false; // Do not sort draw calls when bulk loading. |
268 | 307 |
269 return SkRTree::Create(kRTreeMinChildren, kRTreeMaxChildren, | 308 return SkRTree::Create(kRTreeMinChildren, kRTreeMaxChildren, |
270 aspectRatio, sortDraws); | 309 aspectRatio, sortDraws); |
271 } | 310 } |
272 | 311 |
| 312 #endif |
| 313 |
273 SkCanvas* SkPicture::getRecordingCanvas() const { | 314 SkCanvas* SkPicture::getRecordingCanvas() const { |
274 // will be null if we are not recording | 315 // will be null if we are not recording |
275 return fRecord; | 316 return fRecord; |
276 } | 317 } |
277 | 318 |
278 void SkPicture::endRecording() { | 319 void SkPicture::endRecording() { |
279 if (NULL == fPlayback) { | 320 if (NULL == fPlayback) { |
280 if (NULL != fRecord) { | 321 if (NULL != fRecord) { |
281 fRecord->endRecording(); | 322 fRecord->endRecording(); |
282 SkPictInfo info; | 323 SkPictInfo info; |
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
518 if (NULL != fRecord) { | 559 if (NULL != fRecord) { |
519 SkASSERT(NULL == fPlayback); | 560 SkASSERT(NULL == fPlayback); |
520 return SK_InvalidGenID; | 561 return SK_InvalidGenID; |
521 } | 562 } |
522 | 563 |
523 if (SK_InvalidGenID == fUniqueID) { | 564 if (SK_InvalidGenID == fUniqueID) { |
524 fUniqueID = next_picture_generation_id(); | 565 fUniqueID = next_picture_generation_id(); |
525 } | 566 } |
526 return fUniqueID; | 567 return fUniqueID; |
527 } | 568 } |
OLD | NEW |