| /* | 
 |  * Copyright 2015 Google Inc. | 
 |  * | 
 |  * Use of this source code is governed by a BSD-style license that can be | 
 |  * found in the LICENSE file. | 
 |  */ | 
 |  | 
 | #ifndef SkBigPicture_DEFINED | 
 | #define SkBigPicture_DEFINED | 
 |  | 
 | #include "include/core/SkPicture.h" | 
 | #include "include/core/SkRect.h" | 
 | #include "include/private/SkNoncopyable.h" | 
 | #include "include/private/SkOnce.h" | 
 | #include "include/private/SkTemplates.h" | 
 |  | 
 | class SkBBoxHierarchy; | 
 | class SkMatrix; | 
 | class SkRecord; | 
 |  | 
 | // An implementation of SkPicture supporting an arbitrary number of drawing commands. | 
 | class SkBigPicture final : public SkPicture { | 
 | public: | 
 |     // An array of refcounted const SkPicture pointers. | 
 |     class SnapshotArray : ::SkNoncopyable { | 
 |     public: | 
 |         SnapshotArray(const SkPicture* pics[], int count) : fPics(pics), fCount(count) {} | 
 |         ~SnapshotArray() { for (int i = 0; i < fCount; i++) { fPics[i]->unref(); } } | 
 |  | 
 |         const SkPicture* const* begin() const { return fPics; } | 
 |         int count() const { return fCount; } | 
 |     private: | 
 |         SkAutoTMalloc<const SkPicture*> fPics; | 
 |         int fCount; | 
 |     }; | 
 |  | 
 |     SkBigPicture(const SkRect& cull, | 
 |                  sk_sp<SkRecord>, | 
 |                  std::unique_ptr<SnapshotArray>, | 
 |                  sk_sp<SkBBoxHierarchy>, | 
 |                  size_t approxBytesUsedBySubPictures); | 
 |  | 
 |  | 
 | // SkPicture overrides | 
 |     void playback(SkCanvas*, AbortCallback*) const override; | 
 |     SkRect cullRect() const override; | 
 |     int approximateOpCount(bool nested) const override; | 
 |     size_t approximateBytesUsed() const override; | 
 |     const SkBigPicture* asSkBigPicture() const override { return this; } | 
 |  | 
 | // Used by GrLayerHoister | 
 |     void partialPlayback(SkCanvas*, | 
 |                          int start, | 
 |                          int stop, | 
 |                          const SkMatrix& initialCTM) const; | 
 | // Used by GrRecordReplaceDraw | 
 |     const SkBBoxHierarchy* bbh() const { return fBBH.get(); } | 
 |     const SkRecord*     record() const { return fRecord.get(); } | 
 |  | 
 | private: | 
 |     int drawableCount() const; | 
 |     SkPicture const* const* drawablePicts() const; | 
 |  | 
 |     const SkRect                         fCullRect; | 
 |     const size_t                         fApproxBytesUsedBySubPictures; | 
 |     sk_sp<const SkRecord>                fRecord; | 
 |     std::unique_ptr<const SnapshotArray> fDrawablePicts; | 
 |     sk_sp<const SkBBoxHierarchy>         fBBH; | 
 | }; | 
 |  | 
 | #endif//SkBigPicture_DEFINED |