| /* | |
| * Copyright 2015 Google Inc. | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #include "SkBBoxHierarchy.h" | |
| #include "SkBigPicture.h" | |
| #include "SkPictureCommon.h" | |
| #include "SkRecord.h" | |
| #include "SkRecordDraw.h" | |
| #include "SkTraceEvent.h" | |
| SkBigPicture::SkBigPicture(const SkRect& cull, | |
| SkRecord* record, | |
| SnapshotArray* drawablePicts, | |
| SkBBoxHierarchy* bbh, | |
| size_t approxBytesUsedBySubPictures) | |
| : fCullRect(cull) | |
| , fApproxBytesUsedBySubPictures(approxBytesUsedBySubPictures) | |
| , fRecord(record) // Take ownership of caller's ref. | |
| , fDrawablePicts(drawablePicts) // Take ownership. | |
| , fBBH(bbh) // Take ownership of caller's ref. | |
| {} | |
| void SkBigPicture::playback(SkCanvas* canvas, AbortCallback* callback) const { | |
| SkASSERT(canvas); | |
| // If the query contains the whole picture, don't bother with the BBH. | |
| const bool useBBH = !canvas->getLocalClipBounds().contains(this->cullRect()); | |
| SkRecordDraw(*fRecord, | |
| canvas, | |
| this->drawablePicts(), | |
| nullptr, | |
| this->drawableCount(), | |
| useBBH ? fBBH.get() : nullptr, | |
| callback); | |
| } | |
| void SkBigPicture::partialPlayback(SkCanvas* canvas, | |
| int start, | |
| int stop, | |
| const SkMatrix& initialCTM) const { | |
| SkASSERT(canvas); | |
| SkRecordPartialDraw(*fRecord, | |
| canvas, | |
| this->drawablePicts(), | |
| this->drawableCount(), | |
| start, | |
| stop, | |
| initialCTM); | |
| } | |
| SkRect SkBigPicture::cullRect() const { return fCullRect; } | |
| int SkBigPicture::approximateOpCount() const { return fRecord->count(); } | |
| size_t SkBigPicture::approximateBytesUsed() const { | |
| size_t bytes = sizeof(*this) + fRecord->bytesUsed() + fApproxBytesUsedBySubPictures; | |
| if (fBBH) { bytes += fBBH->bytesUsed(); } | |
| return bytes; | |
| } | |
| int SkBigPicture::drawableCount() const { | |
| return fDrawablePicts ? fDrawablePicts->count() : 0; | |
| } | |
| SkPicture const* const* SkBigPicture::drawablePicts() const { | |
| return fDrawablePicts ? fDrawablePicts->begin() : nullptr; | |
| } | |