OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2007 The Android Open Source Project | 2 * Copyright 2007 The Android Open Source Project |
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 | 8 |
9 #include "SkPictureFlat.h" | 9 #include "SkPictureFlat.h" |
10 #include "SkPictureData.h" | 10 #include "SkPictureData.h" |
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
234 SkPicture::~SkPicture() { | 234 SkPicture::~SkPicture() { |
235 // If the ID is still zero, no one has read it, so no need to send this mess
age. | 235 // If the ID is still zero, no one has read it, so no need to send this mess
age. |
236 uint32_t id = sk_atomic_load(&fUniqueID, sk_memory_order_relaxed); | 236 uint32_t id = sk_atomic_load(&fUniqueID, sk_memory_order_relaxed); |
237 if (id != 0) { | 237 if (id != 0) { |
238 SkPicture::DeletionMessage msg; | 238 SkPicture::DeletionMessage msg; |
239 msg.fUniqueID = id; | 239 msg.fUniqueID = id; |
240 SkMessageBus<SkPicture::DeletionMessage>::Post(msg); | 240 SkMessageBus<SkPicture::DeletionMessage>::Post(msg); |
241 } | 241 } |
242 } | 242 } |
243 | 243 |
244 void SkPicture::EXPERIMENTAL_addAccelData(const SkPicture::AccelData* data) cons
t { | |
245 fAccelData.reset(SkRef(data)); | |
246 } | |
247 | |
248 const SkPicture::AccelData* SkPicture::EXPERIMENTAL_getAccelData( | 244 const SkPicture::AccelData* SkPicture::EXPERIMENTAL_getAccelData( |
249 SkPicture::AccelData::Key key) const { | 245 SkPicture::AccelData::Key key) const { |
250 if (fAccelData.get() && fAccelData->getKey() == key) { | 246 if (fAccelData.get() && fAccelData->getKey() == key) { |
251 return fAccelData.get(); | 247 return fAccelData.get(); |
252 } | 248 } |
253 return NULL; | 249 return NULL; |
254 } | 250 } |
255 | 251 |
256 SkPicture::AccelData::Domain SkPicture::AccelData::GenerateDomain() { | 252 SkPicture::AccelData::Domain SkPicture::AccelData::GenerateDomain() { |
257 static int32_t gNextID = 0; | 253 static int32_t gNextID = 0; |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
445 #if SK_SUPPORT_GPU | 441 #if SK_SUPPORT_GPU |
446 bool SkPicture::suitableForGpuRasterization(GrContext*, const char **reason) con
st { | 442 bool SkPicture::suitableForGpuRasterization(GrContext*, const char **reason) con
st { |
447 return fAnalysis.suitableForGpuRasterization(reason, 0); | 443 return fAnalysis.suitableForGpuRasterization(reason, 0); |
448 } | 444 } |
449 #endif | 445 #endif |
450 | 446 |
451 bool SkPicture::hasText() const { return fAnalysis.fHasText; } | 447 bool SkPicture::hasText() const { return fAnalysis.fHasText; } |
452 bool SkPicture::willPlayBackBitmaps() const { return fAnalysis.fWillPlaybackBitm
aps; } | 448 bool SkPicture::willPlayBackBitmaps() const { return fAnalysis.fWillPlaybackBitm
aps; } |
453 int SkPicture::approximateOpCount() const { return fRecord->count(); } | 449 int SkPicture::approximateOpCount() const { return fRecord->count(); } |
454 | 450 |
455 SkPicture::SkPicture(const SkRect& cullRect, SkRecord* record, SnapshotArray* dr
awablePicts, | 451 SkPicture::SkPicture(const SkRect& cullRect, |
456 SkBBoxHierarchy* bbh, size_t approxBytesUsedBySubPictures) | 452 SkRecord* record, |
| 453 SnapshotArray* drawablePicts, |
| 454 SkBBoxHierarchy* bbh, |
| 455 AccelData* accelData, |
| 456 size_t approxBytesUsedBySubPictures) |
457 : fUniqueID(0) | 457 : fUniqueID(0) |
458 , fCullRect(cullRect) | 458 , fCullRect(cullRect) |
459 , fRecord(record) // For performance, we take ownership of the caller's re
f. | 459 , fRecord(record) // Take ownership of caller's ref. |
460 , fBBH(bbh) // Ditto. | 460 , fDrawablePicts(drawablePicts) // Take ownership. |
461 , fDrawablePicts(drawablePicts) // take ownership | 461 , fBBH(bbh) // Take ownership of caller's ref. |
| 462 , fAccelData(accelData) // Take ownership of caller's ref. |
462 , fApproxBytesUsedBySubPictures(approxBytesUsedBySubPictures) | 463 , fApproxBytesUsedBySubPictures(approxBytesUsedBySubPictures) |
463 , fAnalysis(*fRecord) | 464 , fAnalysis(*fRecord) |
464 {} | 465 {} |
465 | 466 |
466 | 467 |
467 static uint32_t gNextID = 1; | 468 static uint32_t gNextID = 1; |
468 uint32_t SkPicture::uniqueID() const { | 469 uint32_t SkPicture::uniqueID() const { |
469 uint32_t id = sk_atomic_load(&fUniqueID, sk_memory_order_relaxed); | 470 uint32_t id = sk_atomic_load(&fUniqueID, sk_memory_order_relaxed); |
470 while (id == 0) { | 471 while (id == 0) { |
471 uint32_t next = sk_atomic_fetch_add(&gNextID, 1u); | 472 uint32_t next = sk_atomic_fetch_add(&gNextID, 1u); |
472 if (sk_atomic_compare_exchange(&fUniqueID, &id, next, | 473 if (sk_atomic_compare_exchange(&fUniqueID, &id, next, |
473 sk_memory_order_relaxed, | 474 sk_memory_order_relaxed, |
474 sk_memory_order_relaxed)) { | 475 sk_memory_order_relaxed)) { |
475 id = next; | 476 id = next; |
476 } else { | 477 } else { |
477 // sk_atomic_compare_exchange replaced id with the current value of
fUniqueID. | 478 // sk_atomic_compare_exchange replaced id with the current value of
fUniqueID. |
478 } | 479 } |
479 } | 480 } |
480 return id; | 481 return id; |
481 } | 482 } |
OLD | NEW |