Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(150)

Side by Side Diff: src/core/SkPicture.cpp

Issue 752573002: simplify uniqueID code in picture (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: simplify loop Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « include/core/SkPicture.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 27 matching lines...) Expand all
38 38
39 #include "SkRecord.h" 39 #include "SkRecord.h"
40 #include "SkRecordDraw.h" 40 #include "SkRecordDraw.h"
41 #include "SkRecordOpts.h" 41 #include "SkRecordOpts.h"
42 #include "SkRecorder.h" 42 #include "SkRecorder.h"
43 43
44 template <typename T> int SafeCount(const T* obj) { 44 template <typename T> int SafeCount(const T* obj) {
45 return obj ? obj->count() : 0; 45 return obj ? obj->count() : 0;
46 } 46 }
47 47
48 static int32_t gPictureGenerationID;
49
50 // never returns a 0
51 static int32_t next_picture_generation_id() {
52 // Loop in case our global wraps around.
53 int32_t genID;
54 do {
55 genID = sk_atomic_inc(&gPictureGenerationID) + 1;
56 } while (0 == genID);
57 return genID;
58 }
59
48 /////////////////////////////////////////////////////////////////////////////// 60 ///////////////////////////////////////////////////////////////////////////////
49 61
50 namespace { 62 namespace {
51 63
52 // Some commands have a paint, some have an optional paint. Either way, get bac k a pointer. 64 // Some commands have a paint, some have an optional paint. Either way, get bac k a pointer.
53 static const SkPaint* AsPtr(const SkPaint& p) { return &p; } 65 static const SkPaint* AsPtr(const SkPaint& p) { return &p; }
54 static const SkPaint* AsPtr(const SkRecords::Optional<SkPaint>& p) { return p; } 66 static const SkPaint* AsPtr(const SkRecords::Optional<SkPaint>& p) { return p; }
55 67
56 /** SkRecords visitor to determine whether an instance may require an 68 /** SkRecords visitor to determine whether an instance may require an
57 "external" bitmap to rasterize. May return false positives. 69 "external" bitmap to rasterize. May return false positives.
(...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after
505 #if SK_SUPPORT_GPU 517 #if SK_SUPPORT_GPU
506 bool SkPicture::suitableForGpuRasterization(GrContext*, const char **reason) con st { 518 bool SkPicture::suitableForGpuRasterization(GrContext*, const char **reason) con st {
507 return fAnalysis.suitableForGpuRasterization(reason, 0); 519 return fAnalysis.suitableForGpuRasterization(reason, 0);
508 } 520 }
509 #endif 521 #endif
510 522
511 bool SkPicture::hasText() const { return fAnalysis.fHasText; } 523 bool SkPicture::hasText() const { return fAnalysis.fHasText; }
512 bool SkPicture::willPlayBackBitmaps() const { return fAnalysis.fWillPlaybackBitm aps; } 524 bool SkPicture::willPlayBackBitmaps() const { return fAnalysis.fWillPlaybackBitm aps; }
513 int SkPicture::approximateOpCount() const { return fRecord->count(); } 525 int SkPicture::approximateOpCount() const { return fRecord->count(); }
514 526
515 static int32_t gPictureGenerationID = SK_InvalidGenID; // This will be set at l ink time.
516
517 static int32_t next_picture_generation_id() {
518 // Loop in case our global wraps around.
519 int32_t genID;
520 do {
521 genID = sk_atomic_inc(&gPictureGenerationID) + 1;
522 } while (SK_InvalidGenID == genID);
523 return genID;
524 }
525
526 uint32_t SkPicture::uniqueID() const {
527 if (SK_InvalidGenID == fUniqueID) {
528 fUniqueID = next_picture_generation_id();
529 }
530 return fUniqueID;
531 }
532
533 SkPicture::SkPicture(const SkRect& cullRect, SkRecord* record, SkData* drawableP icts, 527 SkPicture::SkPicture(const SkRect& cullRect, SkRecord* record, SkData* drawableP icts,
534 SkBBoxHierarchy* bbh) 528 SkBBoxHierarchy* bbh)
535 : fCullRect(cullRect) 529 : fUniqueID(next_picture_generation_id())
530 , fCullRect(cullRect)
536 , fRecord(record) 531 , fRecord(record)
537 , fBBH(SkSafeRef(bbh)) 532 , fBBH(SkSafeRef(bbh))
538 , fDrawablePicts(SkSafeRef(drawablePicts)) 533 , fDrawablePicts(SkSafeRef(drawablePicts))
539 , fAnalysis(*fRecord) { 534 , fAnalysis(*fRecord)
540 this->needsNewGenID(); 535 {}
541 }
542 536
543 // Note that we are assuming that this entry point will only be called from 537 // Note that we are assuming that this entry point will only be called from
544 // one thread. Currently the only client of this method is 538 // one thread. Currently the only client of this method is
545 // SkGpuDevice::EXPERIMENTAL_optimize which should be only called from a single 539 // SkGpuDevice::EXPERIMENTAL_optimize which should be only called from a single
546 // thread. 540 // thread.
547 void SkPicture::addDeletionListener(DeletionListener* listener) const { 541 void SkPicture::addDeletionListener(DeletionListener* listener) const {
548 SkASSERT(listener); 542 SkASSERT(listener);
549 543
550 *fDeletionListeners.append() = SkRef(listener); 544 *fDeletionListeners.append() = SkRef(listener);
551 } 545 }
552 546
553 void SkPicture::callDeletionListeners() { 547 void SkPicture::callDeletionListeners() {
554 for (int i = 0; i < fDeletionListeners.count(); ++i) { 548 for (int i = 0; i < fDeletionListeners.count(); ++i) {
555 fDeletionListeners[i]->onDeletion(this->uniqueID()); 549 fDeletionListeners[i]->onDeletion(this->uniqueID());
556 } 550 }
557 551
558 fDeletionListeners.unrefAll(); 552 fDeletionListeners.unrefAll();
559 } 553 }
OLDNEW
« no previous file with comments | « include/core/SkPicture.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698