1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- /*
- * Copyright 2018 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
- #ifndef DDLTileHelper_DEFINED
- #define DDLTileHelper_DEFINED
- #include "include/core/SkRect.h"
- #include "include/core/SkRefCnt.h"
- #include "include/core/SkSurfaceCharacterization.h"
- class DDLPromiseImageHelper;
- class SkCanvas;
- class SkData;
- class SkDeferredDisplayList;
- class SkPicture;
- class SkSurface;
- class SkSurfaceCharacterization;
- class DDLTileHelper {
- public:
- // TileData class encapsulates the information and behavior for a single tile/thread in
- // a DDL rendering.
- class TileData {
- public:
- TileData(sk_sp<SkSurface>, const SkIRect& clip);
- // This method can be invoked in parallel
- // In each thread we will reconvert the compressedPictureData into an SkPicture
- // replacing each image-index with a promise image.
- void createTileSpecificSKP(SkData* compressedPictureData,
- const DDLPromiseImageHelper& helper);
- // This method can be invoked in parallel
- // Create the per-tile DDL from the per-tile SKP
- void createDDL();
- // This method operates serially and replays the recorded DDL into the tile surface.
- void draw();
- // This method also operates serially and composes the results of replaying the DDL into
- // the final destination surface.
- void compose(SkCanvas* dst);
- void reset();
- private:
- sk_sp<SkSurface> fSurface;
- SkSurfaceCharacterization fCharacterization;
- SkIRect fClip; // in the device space of the dest canvas
- sk_sp<SkPicture> fReconstitutedPicture;
- SkTArray<sk_sp<SkImage>> fPromiseImages; // All the promise images in the
- // reconstituted picture
- std::unique_ptr<SkDeferredDisplayList> fDisplayList;
- };
- DDLTileHelper(SkCanvas* canvas, const SkIRect& viewport, int numDivisions);
- void createSKPPerTile(SkData* compressedPictureData, const DDLPromiseImageHelper& helper);
- void createDDLsInParallel();
- void drawAllTilesAndFlush(GrContext*, bool flush);
- void composeAllTiles(SkCanvas* dstCanvas);
- void resetAllTiles();
- private:
- int fNumDivisions; // number of tiles along a side
- SkTArray<TileData> fTiles;
- };
- #endif
|