1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */ 776f10a3bd936af7dbe2b5873d5a7eedd73cdc5dareed@google.com 88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SkPictureRecord_DEFINED 98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SkPictureRecord_DEFINED 108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkCanvas.h" 128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkFlattenable.h" 138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkPicture.h" 14db539905bb3af7bd05839a7d2558e97d5cb51ca2robertphillips#include "SkPictureData.h" 158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkTemplates.h" 168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkWriter32.h" 178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 182ca1aaaa442290b8262e1ca3ec64ebe46a191211robertphillips@google.com// These macros help with packing and unpacking a single byte value and 192ca1aaaa442290b8262e1ca3ec64ebe46a191211robertphillips@google.com// a 3 byte value into/out of a uint32_t 202ca1aaaa442290b8262e1ca3ec64ebe46a191211robertphillips@google.com#define MASK_24 0x00FFFFFF 212ca1aaaa442290b8262e1ca3ec64ebe46a191211robertphillips@google.com#define UNPACK_8_24(combined, small, large) \ 222ca1aaaa442290b8262e1ca3ec64ebe46a191211robertphillips@google.com small = (combined >> 24) & 0xFF; \ 232ca1aaaa442290b8262e1ca3ec64ebe46a191211robertphillips@google.com large = combined & MASK_24; 242ca1aaaa442290b8262e1ca3ec64ebe46a191211robertphillips@google.com#define PACK_8_24(small, large) ((small << 24) | large) 252ca1aaaa442290b8262e1ca3ec64ebe46a191211robertphillips@google.com 262ca1aaaa442290b8262e1ca3ec64ebe46a191211robertphillips@google.com 278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkPictureRecord : public SkCanvas { 288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 290bdbea75ff1a6f3c313c18cab0139728967cb93erobertphillips SkPictureRecord(const SkISize& dimensions, uint32_t recordFlags); 308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual ~SkPictureRecord(); 318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void beginCommentGroup(const char* description) override; 3336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void addComment(const char* kywd, const char* value) override; 3436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void endCommentGroup() override; 358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 369b14f26d0f3a974f3dd626c8354e1db1cfcd322frobertphillips const SkTDArray<const SkPicture* >& getPictureRefs() const { 378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return fPictureRefs; 388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 3974b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org 40b7425173f96e93b090787e2386ba5f022b6c2869fmalita const SkTDArray<const SkTextBlob* >& getTextBlobRefs() const { 41b7425173f96e93b090787e2386ba5f022b6c2869fmalita return fTextBlobRefs; 42b7425173f96e93b090787e2386ba5f022b6c2869fmalita } 43b7425173f96e93b090787e2386ba5f022b6c2869fmalita 440bdbea75ff1a6f3c313c18cab0139728967cb93erobertphillips SkData* opData(bool deepCopy) const { 450bdbea75ff1a6f3c313c18cab0139728967cb93erobertphillips this->validate(fWriter.bytesWritten(), 0); 460bdbea75ff1a6f3c313c18cab0139728967cb93erobertphillips 470bdbea75ff1a6f3c313c18cab0139728967cb93erobertphillips if (fWriter.bytesWritten() == 0) { 480bdbea75ff1a6f3c313c18cab0139728967cb93erobertphillips return SkData::NewEmpty(); 490bdbea75ff1a6f3c313c18cab0139728967cb93erobertphillips } 500bdbea75ff1a6f3c313c18cab0139728967cb93erobertphillips 510bdbea75ff1a6f3c313c18cab0139728967cb93erobertphillips if (deepCopy) { 520bdbea75ff1a6f3c313c18cab0139728967cb93erobertphillips return SkData::NewWithCopy(fWriter.contiguousArray(), fWriter.bytesWritten()); 530bdbea75ff1a6f3c313c18cab0139728967cb93erobertphillips } 540bdbea75ff1a6f3c313c18cab0139728967cb93erobertphillips 550bdbea75ff1a6f3c313c18cab0139728967cb93erobertphillips return fWriter.snapshotAsData(); 560bdbea75ff1a6f3c313c18cab0139728967cb93erobertphillips } 570bdbea75ff1a6f3c313c18cab0139728967cb93erobertphillips 580bdbea75ff1a6f3c313c18cab0139728967cb93erobertphillips const SkPictureContentInfo& contentInfo() const { 590bdbea75ff1a6f3c313c18cab0139728967cb93erobertphillips return fContentInfo; 600bdbea75ff1a6f3c313c18cab0139728967cb93erobertphillips } 610bdbea75ff1a6f3c313c18cab0139728967cb93erobertphillips 624866cc0afb7571309d9fdecb221d919f663054c0junov@chromium.org void setFlags(uint32_t recordFlags) { 634866cc0afb7571309d9fdecb221d919f663054c0junov@chromium.org fRecordFlags = recordFlags; 644866cc0afb7571309d9fdecb221d919f663054c0junov@chromium.org } 658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const SkWriter32& writeStream() const { 678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return fWriter; 688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 70d86e7ab6044e4aba017cb126a26dd378eec9fcbareed@google.com void beginRecording(); 71a6c9e0e02be390d36b80f4872c628edb3594208ejunov@chromium.org void endRecording(); 72d86e7ab6044e4aba017cb126a26dd378eec9fcbareed@google.com 7368250c8e7c2bf5d669397c849259c3bcad40237esenorblanco@chromium.orgprotected: 7468250c8e7c2bf5d669397c849259c3bcad40237esenorblanco@chromium.org void addNoOp(); 7568250c8e7c2bf5d669397c849259c3bcad40237esenorblanco@chromium.org 768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 774b32bd53c63b245707822ae83e3215863303bf43commit-bot@chromium.org void handleOptimization(int opt); 78dcecb168968ca136c7fb9e8b444bec56f19af70ccommit-bot@chromium.org size_t recordRestoreOffsetPlaceholder(SkRegion::Op); 795a63f24558b84610e93c6d7b67d849b5ab435e51robertphillips@google.com void fillRestoreOffsetPlaceholdersForCurrentStackLevel(uint32_t restoreOffset); 80e3dbedb44cad6c7b7e5c9aae5224d0b0abec9bf4junov@chromium.org 81ffacd3c56d73c03d3fe53b47a49ea6be2ca4748freed@google.com SkTDArray<int32_t> fRestoreOffsetStack; 828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 83210ae2a42613b9048e8e8c4096c5bf4fe2ddf838commit-bot@chromium.org SkTDArray<uint32_t> fCullOffsetStack; 84210ae2a42613b9048e8e8c4096c5bf4fe2ddf838commit-bot@chromium.org 852ca1aaaa442290b8262e1ca3ec64ebe46a191211robertphillips@google.com /* 862ca1aaaa442290b8262e1ca3ec64ebe46a191211robertphillips@google.com * Write the 'drawType' operation and chunk size to the skp. 'size' 87ce8343d7dde40e509317708de239be1fa72b28f9skia.committer@gmail.com * can potentially be increased if the chunk size needs its own storage 882ca1aaaa442290b8262e1ca3ec64ebe46a191211robertphillips@google.com * location (i.e., it overflows 24 bits). 892ca1aaaa442290b8262e1ca3ec64ebe46a191211robertphillips@google.com * Returns the start offset of the chunk. This is the location at which 902ca1aaaa442290b8262e1ca3ec64ebe46a191211robertphillips@google.com * the opcode & size are stored. 91ce8343d7dde40e509317708de239be1fa72b28f9skia.committer@gmail.com * TODO: since we are handing the size into here we could call reserve 922ca1aaaa442290b8262e1ca3ec64ebe46a191211robertphillips@google.com * and then return a pointer to the memory storage. This could decrease 932ca1aaaa442290b8262e1ca3ec64ebe46a191211robertphillips@google.com * allocation overhead but could lead to more wasted space (the tail 942ca1aaaa442290b8262e1ca3ec64ebe46a191211robertphillips@google.com * end of blocks could go unused). Possibly add a second addDraw that 952ca1aaaa442290b8262e1ca3ec64ebe46a191211robertphillips@google.com * operates in this manner. 962ca1aaaa442290b8262e1ca3ec64ebe46a191211robertphillips@google.com */ 97dcecb168968ca136c7fb9e8b444bec56f19af70ccommit-bot@chromium.org size_t addDraw(DrawType drawType, size_t* size) { 984469938e92d779dff05e745559e67907bbf21e78reed@google.com size_t offset = fWriter.bytesWritten(); 992ca1aaaa442290b8262e1ca3ec64ebe46a191211robertphillips@google.com 10097af1a64ae6bdddd346d8babfd9f188279dd6644reed@google.com this->predrawNotify(); 101afdada2eabdef47a59e08c884b2beb1af3f31aa5hendrikw fContentInfo.addOperation(); 10297af1a64ae6bdddd346d8babfd9f188279dd6644reed@google.com 1032ca1aaaa442290b8262e1ca3ec64ebe46a191211robertphillips@google.com SkASSERT(0 != *size); 1042ca1aaaa442290b8262e1ca3ec64ebe46a191211robertphillips@google.com SkASSERT(((uint8_t) drawType) == drawType); 1052ca1aaaa442290b8262e1ca3ec64ebe46a191211robertphillips@google.com 1062ca1aaaa442290b8262e1ca3ec64ebe46a191211robertphillips@google.com if (0 != (*size & ~MASK_24) || *size == MASK_24) { 1072ca1aaaa442290b8262e1ca3ec64ebe46a191211robertphillips@google.com fWriter.writeInt(PACK_8_24(drawType, MASK_24)); 1082ca1aaaa442290b8262e1ca3ec64ebe46a191211robertphillips@google.com *size += 1; 109dcecb168968ca136c7fb9e8b444bec56f19af70ccommit-bot@chromium.org fWriter.writeInt(SkToU32(*size)); 1102ca1aaaa442290b8262e1ca3ec64ebe46a191211robertphillips@google.com } else { 111dcecb168968ca136c7fb9e8b444bec56f19af70ccommit-bot@chromium.org fWriter.writeInt(PACK_8_24(drawType, SkToU32(*size))); 1122ca1aaaa442290b8262e1ca3ec64ebe46a191211robertphillips@google.com } 1132ca1aaaa442290b8262e1ca3ec64ebe46a191211robertphillips@google.com 1142ca1aaaa442290b8262e1ca3ec64ebe46a191211robertphillips@google.com return offset; 11574b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org } 1162ca1aaaa442290b8262e1ca3ec64ebe46a191211robertphillips@google.com 1178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void addInt(int value) { 1188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fWriter.writeInt(value); 1198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void addScalar(SkScalar scalar) { 1218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fWriter.writeScalar(scalar); 1228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 12374b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org 124e069400cabd0edd3db52bbf1958063d3ed12ef28mtklein void addBitmap(const SkBitmap& bitmap); 1258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void addMatrix(const SkMatrix& matrix); 12646616af01b412ea984a516fda1ed8ec08e689f29mtklein void addPaint(const SkPaint& paint) { this->addPaintPtr(&paint); } 12746616af01b412ea984a516fda1ed8ec08e689f29mtklein void addPaintPtr(const SkPaint* paint); 128b3c9d1c33caf325aada244204215eb790c228c12dandov void addPatch(const SkPoint cubics[12]); 1298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void addPath(const SkPath& path); 1309b14f26d0f3a974f3dd626c8354e1db1cfcd322frobertphillips void addPicture(const SkPicture* picture); 1318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void addPoint(const SkPoint& point); 1328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void addPoints(const SkPoint pts[], int count); 1338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void addRect(const SkRect& rect); 1348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void addRectPtr(const SkRect* rect); 135f0b5e1190af9807a027c0adba2f1380663c8e910reed@google.com void addIRect(const SkIRect& rect); 1368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void addIRectPtr(const SkIRect* rect); 1374ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com void addRRect(const SkRRect&); 1388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void addRegion(const SkRegion& region); 1398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void addText(const void* text, size_t byteLength); 140b7425173f96e93b090787e2386ba5f022b6c2869fmalita void addTextBlob(const SkTextBlob* blob); 1418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1424866cc0afb7571309d9fdecb221d919f663054c0junov@chromium.org int find(const SkBitmap& bitmap); 1434866cc0afb7571309d9fdecb221d919f663054c0junov@chromium.org 1446162af8d4c05354a160f6aa44d9c4440721c892arobertphillipsprotected: 145dcecb168968ca136c7fb9e8b444bec56f19af70ccommit-bot@chromium.org void validate(size_t initialOffset, size_t size) const { 1464469938e92d779dff05e745559e67907bbf21e78reed@google.com SkASSERT(fWriter.bytesWritten() == initialOffset + size); 1472ca1aaaa442290b8262e1ca3ec64ebe46a191211robertphillips@google.com } 1488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 14936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkSurface* onNewSurface(const SkImageInfo&, const SkSurfaceProps&) override; 15036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const void* onPeekPixels(SkImageInfo*, size_t*) override { 151c3bd8af6d5722e854feca70c40d92f4954c5b67bcommit-bot@chromium.org return NULL; 152c3bd8af6d5722e854feca70c40d92f4954c5b67bcommit-bot@chromium.org } 153e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org 15436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void willSave() override; 15536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SaveLayerStrategy willSaveLayer(const SkRect*, const SkPaint*, SaveFlags) override; 15636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void willRestore() override; 157e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org 15836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void didConcat(const SkMatrix&) override; 15936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void didSetMatrix(const SkMatrix&) override; 16044c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.org 16136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) override; 16276f10a3bd936af7dbe2b5873d5a7eedd73cdc5dareed@google.com 163e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com virtual void onDrawText(const void* text, size_t byteLength, SkScalar x, SkScalar y, 16436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const SkPaint&) override; 165e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com virtual void onDrawPosText(const void* text, size_t byteLength, const SkPoint pos[], 16636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const SkPaint&) override; 167e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com virtual void onDrawPosTextH(const void* text, size_t byteLength, const SkScalar xpos[], 16836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkScalar constY, const SkPaint&) override; 169e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com virtual void onDrawTextOnPath(const void* text, size_t byteLength, const SkPath& path, 17036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const SkMatrix* matrix, const SkPaint&) override; 171b7425173f96e93b090787e2386ba5f022b6c2869fmalita virtual void onDrawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y, 17236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const SkPaint& paint) override; 17346616af01b412ea984a516fda1ed8ec08e689f29mtklein 174b3c9d1c33caf325aada244204215eb790c228c12dandov virtual void onDrawPatch(const SkPoint cubics[12], const SkColor colors[4], 175b3c9d1c33caf325aada244204215eb790c228c12dandov const SkPoint texCoords[4], SkXfermode* xmode, 17636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const SkPaint& paint) override; 17736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein 17836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDrawPaint(const SkPaint&) override; 17936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDrawPoints(PointMode, size_t count, const SkPoint pts[], const SkPaint&) override; 18036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDrawRect(const SkRect&, const SkPaint&) override; 18136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDrawOval(const SkRect&, const SkPaint&) override; 18236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDrawRRect(const SkRRect&, const SkPaint&) override; 18336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDrawPath(const SkPath&, const SkPaint&) override; 18436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDrawBitmap(const SkBitmap&, SkScalar left, SkScalar top, const SkPaint*) override; 18541af966ab338e95eee81ab618ab28195075338f7reed void onDrawBitmapRect(const SkBitmap&, const SkRect* src, const SkRect& dst, const SkPaint*, 18636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein DrawBitmapRectFlags flags) override; 18736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDrawImage(const SkImage*, SkScalar left, SkScalar top, const SkPaint*) override; 18841af966ab338e95eee81ab618ab28195075338f7reed void onDrawImageRect(const SkImage*, const SkRect* src, const SkRect& dst, 18936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const SkPaint*) override; 19041af966ab338e95eee81ab618ab28195075338f7reed void onDrawBitmapNine(const SkBitmap&, const SkIRect& center, const SkRect& dst, 19136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const SkPaint*) override; 19236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDrawSprite(const SkBitmap&, int left, int top, const SkPaint*) override; 19341af966ab338e95eee81ab618ab28195075338f7reed void onDrawVertices(VertexMode vmode, int vertexCount, 19441af966ab338e95eee81ab618ab28195075338f7reed const SkPoint vertices[], const SkPoint texs[], 19541af966ab338e95eee81ab618ab28195075338f7reed const SkColor colors[], SkXfermode* xmode, 19641af966ab338e95eee81ab618ab28195075338f7reed const uint16_t indices[], int indexCount, 19736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const SkPaint&) override; 19841af966ab338e95eee81ab618ab28195075338f7reed 19936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) override; 20036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onClipRRect(const SkRRect&, SkRegion::Op, ClipEdgeStyle) override; 20136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) override; 20236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onClipRegion(const SkRegion&, SkRegion::Op) override; 2038f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com 20436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDrawPicture(const SkPicture*, const SkMatrix*, const SkPaint*) override; 2059b14f26d0f3a974f3dd626c8354e1db1cfcd322frobertphillips 2065a63f24558b84610e93c6d7b67d849b5ab435e51robertphillips@google.com int addPathToHeap(const SkPath& path); // does not write to ops stream 2075a63f24558b84610e93c6d7b67d849b5ab435e51robertphillips@google.com 2081dab403e447f4f663690e018651338304fe6e86askia.committer@gmail.com // These entry points allow the writing of matrices, clips, saves & 2095a63f24558b84610e93c6d7b67d849b5ab435e51robertphillips@google.com // restores to be deferred (e.g., if the MC state is being collapsed and 2105a63f24558b84610e93c6d7b67d849b5ab435e51robertphillips@google.com // only written out as needed). 2115a63f24558b84610e93c6d7b67d849b5ab435e51robertphillips@google.com void recordConcat(const SkMatrix& matrix); 212d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org void recordTranslate(const SkMatrix& matrix); 213d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org void recordScale(const SkMatrix& matrix); 214dcecb168968ca136c7fb9e8b444bec56f19af70ccommit-bot@chromium.org size_t recordClipRect(const SkRect& rect, SkRegion::Op op, bool doAA); 215dcecb168968ca136c7fb9e8b444bec56f19af70ccommit-bot@chromium.org size_t recordClipRRect(const SkRRect& rrect, SkRegion::Op op, bool doAA); 216dcecb168968ca136c7fb9e8b444bec56f19af70ccommit-bot@chromium.org size_t recordClipPath(int pathID, SkRegion::Op op, bool doAA); 217dcecb168968ca136c7fb9e8b444bec56f19af70ccommit-bot@chromium.org size_t recordClipRegion(const SkRegion& region, SkRegion::Op op); 2185f6102d07982043542343ff0a6c67b1319ac9fc7Florin Malita void recordSave(); 2195a63f24558b84610e93c6d7b67d849b5ab435e51robertphillips@google.com void recordSaveLayer(const SkRect* bounds, const SkPaint* paint, SaveFlags flags); 220105a4a584c4c2c84c24e102112326b15683673f5robertphillips@google.com void recordRestore(bool fillInSkips = true); 2215a63f24558b84610e93c6d7b67d849b5ab435e51robertphillips@google.com 222801cee1d4cad2c382059c0f367edd77298b05caarobertphillips@google.comprivate: 2230bdbea75ff1a6f3c313c18cab0139728967cb93erobertphillips SkPictureContentInfo fContentInfo; 2240bdbea75ff1a6f3c313c18cab0139728967cb93erobertphillips 22571a236370792416b367a7d2d6b8e471b06b331cdmtklein SkTArray<SkBitmap> fBitmaps; 22671a236370792416b367a7d2d6b8e471b06b331cdmtklein SkTArray<SkPaint> fPaints; 22771a236370792416b367a7d2d6b8e471b06b331cdmtklein SkTArray<SkPath> fPaths; 228d2700eec7eb2e26beb206b88a0f0b6f3c5f49118djsollen@google.com 2298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkWriter32 fWriter; 2308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 23109b84a00f79979142fbcfd691ccaeb5e5600922dreed@android.com // we ref each item in these arrays 232b7425173f96e93b090787e2386ba5f022b6c2869fmalita SkTDArray<const SkPicture*> fPictureRefs; 233b7425173f96e93b090787e2386ba5f022b6c2869fmalita SkTDArray<const SkTextBlob*> fTextBlobRefs; 2348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 235ae814c809e1c4e02a1876c39065775c8c7d00f96reed@android.com uint32_t fRecordFlags; 236e494dbdec36f0ffa4affeac1c3f405b58ac41220commit-bot@chromium.org int fInitialSaveCount; 237ae814c809e1c4e02a1876c39065775c8c7d00f96reed@android.com 2386142609b22814283210f79d698182b651a93136crobertphillips friend class SkPictureData; // for SkPictureData's SkPictureRecord-based constructor 2398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkCanvas INHERITED; 2418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 2428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 244