1685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com 2685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com/* 3685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com * Copyright 2011 Google Inc. 4685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com * 5685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com * Use of this source code is governed by a BSD-style license that can be 6685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com * found in the LICENSE file. 7685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com */ 8bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#ifndef SkPictureRecord_DEFINED 9bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#define SkPictureRecord_DEFINED 10bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 11bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkCanvas.h" 12bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkFlattenable.h" 13bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkPathHeap.h" 14bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkPicture.h" 15bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkPictureFlat.h" 16bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkTemplates.h" 17bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkWriter32.h" 18bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 196e832b50c712743d821e01829b127b86271a7ebbrileya@google.comclass SkPictureStateTree; 206e832b50c712743d821e01829b127b86271a7ebbrileya@google.comclass SkBBoxHierarchy; 216e832b50c712743d821e01829b127b86271a7ebbrileya@google.com 22f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com// These macros help with packing and unpacking a single byte value and 23f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com// a 3 byte value into/out of a uint32_t 24f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com#define MASK_24 0x00FFFFFF 25f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com#define UNPACK_8_24(combined, small, large) \ 26f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com small = (combined >> 24) & 0xFF; \ 27f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com large = combined & MASK_24; 28f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com#define PACK_8_24(small, large) ((small << 24) | large) 29f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com 30f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com 31bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comclass SkPictureRecord : public SkCanvas { 32bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.compublic: 33118a6d00c3089c0fcfce67919bbbeb37adda6423reed@google.com SkPictureRecord(uint32_t recordFlags, SkDevice*); 34bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com virtual ~SkPictureRecord(); 35bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 36d84ed564a00a67019a345ea545ca63ab514533f7junov@chromium.org virtual SkDevice* setDevice(SkDevice* device) SK_OVERRIDE; 37d84ed564a00a67019a345ea545ca63ab514533f7junov@chromium.org 382c381c97d14b46a59b14908009107c8a3f7bd5d7reed@google.com virtual int save(SaveFlags) SK_OVERRIDE; 392c381c97d14b46a59b14908009107c8a3f7bd5d7reed@google.com virtual int saveLayer(const SkRect* bounds, const SkPaint*, SaveFlags) SK_OVERRIDE; 402c381c97d14b46a59b14908009107c8a3f7bd5d7reed@google.com virtual void restore() SK_OVERRIDE; 412c381c97d14b46a59b14908009107c8a3f7bd5d7reed@google.com virtual bool translate(SkScalar dx, SkScalar dy) SK_OVERRIDE; 422c381c97d14b46a59b14908009107c8a3f7bd5d7reed@google.com virtual bool scale(SkScalar sx, SkScalar sy) SK_OVERRIDE; 432c381c97d14b46a59b14908009107c8a3f7bd5d7reed@google.com virtual bool rotate(SkScalar degrees) SK_OVERRIDE; 442c381c97d14b46a59b14908009107c8a3f7bd5d7reed@google.com virtual bool skew(SkScalar sx, SkScalar sy) SK_OVERRIDE; 452c381c97d14b46a59b14908009107c8a3f7bd5d7reed@google.com virtual bool concat(const SkMatrix& matrix) SK_OVERRIDE; 462c381c97d14b46a59b14908009107c8a3f7bd5d7reed@google.com virtual void setMatrix(const SkMatrix& matrix) SK_OVERRIDE; 477e93ed91c3173a963cc17ef6e34b731b577b1250reed@google.com virtual bool clipRect(const SkRect&, SkRegion::Op, bool) SK_OVERRIDE; 487a7e655343617093a5eea37c7a556602a1bb0576reed@google.com virtual bool clipRRect(const SkRRect&, SkRegion::Op, bool) SK_OVERRIDE; 497e93ed91c3173a963cc17ef6e34b731b577b1250reed@google.com virtual bool clipPath(const SkPath&, SkRegion::Op, bool) SK_OVERRIDE; 502c381c97d14b46a59b14908009107c8a3f7bd5d7reed@google.com virtual bool clipRegion(const SkRegion& region, SkRegion::Op op) SK_OVERRIDE; 512c381c97d14b46a59b14908009107c8a3f7bd5d7reed@google.com virtual void clear(SkColor) SK_OVERRIDE; 522c381c97d14b46a59b14908009107c8a3f7bd5d7reed@google.com virtual void drawPaint(const SkPaint& paint) SK_OVERRIDE; 53bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com virtual void drawPoints(PointMode, size_t count, const SkPoint pts[], 542c381c97d14b46a59b14908009107c8a3f7bd5d7reed@google.com const SkPaint&) SK_OVERRIDE; 557a7e655343617093a5eea37c7a556602a1bb0576reed@google.com virtual void drawOval(const SkRect&, const SkPaint&) SK_OVERRIDE; 567a7e655343617093a5eea37c7a556602a1bb0576reed@google.com virtual void drawRect(const SkRect&, const SkPaint&) SK_OVERRIDE; 577a7e655343617093a5eea37c7a556602a1bb0576reed@google.com virtual void drawRRect(const SkRRect&, const SkPaint&) SK_OVERRIDE; 582c381c97d14b46a59b14908009107c8a3f7bd5d7reed@google.com virtual void drawPath(const SkPath& path, const SkPaint&) SK_OVERRIDE; 59bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com virtual void drawBitmap(const SkBitmap&, SkScalar left, SkScalar top, 602c381c97d14b46a59b14908009107c8a3f7bd5d7reed@google.com const SkPaint*) SK_OVERRIDE; 613b4aeaece7522f100f25bcb2214214acaf7891e8reed@google.com virtual void drawBitmapRectToRect(const SkBitmap&, const SkRect* src, 623b4aeaece7522f100f25bcb2214214acaf7891e8reed@google.com const SkRect& dst, const SkPaint*) SK_OVERRIDE; 63bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com virtual void drawBitmapMatrix(const SkBitmap&, const SkMatrix&, 642c381c97d14b46a59b14908009107c8a3f7bd5d7reed@google.com const SkPaint*) SK_OVERRIDE; 653f270706ca0ff7302b938355e6d481a6b5f04e4breed@google.com virtual void drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, 662c381c97d14b46a59b14908009107c8a3f7bd5d7reed@google.com const SkRect& dst, const SkPaint*) SK_OVERRIDE; 67bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com virtual void drawSprite(const SkBitmap&, int left, int top, 682c381c97d14b46a59b14908009107c8a3f7bd5d7reed@google.com const SkPaint*) SK_OVERRIDE; 698c331d260c7fe604a69b6ace405a4c6cd160cf17vandebo@chromium.org virtual void drawText(const void* text, size_t byteLength, SkScalar x, 702c381c97d14b46a59b14908009107c8a3f7bd5d7reed@google.com SkScalar y, const SkPaint&) SK_OVERRIDE; 718c331d260c7fe604a69b6ace405a4c6cd160cf17vandebo@chromium.org virtual void drawPosText(const void* text, size_t byteLength, 722c381c97d14b46a59b14908009107c8a3f7bd5d7reed@google.com const SkPoint pos[], const SkPaint&) SK_OVERRIDE; 73bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com virtual void drawPosTextH(const void* text, size_t byteLength, 742c381c97d14b46a59b14908009107c8a3f7bd5d7reed@google.com const SkScalar xpos[], SkScalar constY, const SkPaint&) SK_OVERRIDE; 758c331d260c7fe604a69b6ace405a4c6cd160cf17vandebo@chromium.org virtual void drawTextOnPath(const void* text, size_t byteLength, 768c331d260c7fe604a69b6ace405a4c6cd160cf17vandebo@chromium.org const SkPath& path, const SkMatrix* matrix, 772c381c97d14b46a59b14908009107c8a3f7bd5d7reed@google.com const SkPaint&) SK_OVERRIDE; 782c381c97d14b46a59b14908009107c8a3f7bd5d7reed@google.com virtual void drawPicture(SkPicture& picture) SK_OVERRIDE; 79bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com virtual void drawVertices(VertexMode, int vertexCount, 80bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com const SkPoint vertices[], const SkPoint texs[], 81bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com const SkColor colors[], SkXfermode*, 82bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com const uint16_t indices[], int indexCount, 832c381c97d14b46a59b14908009107c8a3f7bd5d7reed@google.com const SkPaint&) SK_OVERRIDE; 842c381c97d14b46a59b14908009107c8a3f7bd5d7reed@google.com virtual void drawData(const void*, size_t) SK_OVERRIDE; 85aa62052fd968fb037fc17a1f2a3c1be34b4342bbrobertphillips@google.com virtual void beginCommentGroup(const char* description) SK_OVERRIDE; 86aa62052fd968fb037fc17a1f2a3c1be34b4342bbrobertphillips@google.com virtual void addComment(const char* kywd, const char* value) SK_OVERRIDE; 87aa62052fd968fb037fc17a1f2a3c1be34b4342bbrobertphillips@google.com virtual void endCommentGroup() SK_OVERRIDE; 886bfd74c3d62f40c933ade44051e8a407e017b882junov@chromium.org virtual bool isDrawingToLayer() const SK_OVERRIDE; 89bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 9075714eee0c7480aa4787b976da221739fe5d8977junov@chromium.org void addFontMetricsTopBottom(const SkPaint& paint, const SkFlatData&, 918878ff132d537e6bd4e682fbcc570f6a8b2ac689reed@google.com SkScalar minY, SkScalar maxY); 928c331d260c7fe604a69b6ace405a4c6cd160cf17vandebo@chromium.org 93bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com const SkTDArray<SkPicture* >& getPictureRefs() const { 94bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com return fPictureRefs; 95bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com } 968c331d260c7fe604a69b6ace405a4c6cd160cf17vandebo@chromium.org 97dc8630fa3915d6b1a6cfef385ac6846cf78e0b94junov@chromium.org void setFlags(uint32_t recordFlags) { 98dc8630fa3915d6b1a6cfef385ac6846cf78e0b94junov@chromium.org fRecordFlags = recordFlags; 99dc8630fa3915d6b1a6cfef385ac6846cf78e0b94junov@chromium.org } 100bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 101bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com const SkWriter32& writeStream() const { 102bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com return fWriter; 103bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com } 104bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 105118a6d00c3089c0fcfce67919bbbeb37adda6423reed@google.com void beginRecording(); 1069aa18db116c81f6fbd563a6c28111c65bb56d742junov@chromium.org void endRecording(); 107118a6d00c3089c0fcfce67919bbbeb37adda6423reed@google.com 108bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comprivate: 10947c2076e9e3b4777af036acfa5ff258a38cca586commit-bot@chromium.org void handleOptimization(int opt); 110c74b2c43b91702aac3f4f7d1dae4754da3952dbbjunov@chromium.org void recordRestoreOffsetPlaceholder(SkRegion::Op); 111c74b2c43b91702aac3f4f7d1dae4754da3952dbbjunov@chromium.org void fillRestoreOffsetPlaceholdersForCurrentStackLevel( 112c74b2c43b91702aac3f4f7d1dae4754da3952dbbjunov@chromium.org uint32_t restoreOffset); 113c74b2c43b91702aac3f4f7d1dae4754da3952dbbjunov@chromium.org 1142522d74ffa4a622327fb1a14c1f0e2482d2466e0reed@google.com SkTDArray<int32_t> fRestoreOffsetStack; 1156bfd74c3d62f40c933ade44051e8a407e017b882junov@chromium.org int fFirstSavedLayerIndex; 1166bfd74c3d62f40c933ade44051e8a407e017b882junov@chromium.org enum { 1176bfd74c3d62f40c933ade44051e8a407e017b882junov@chromium.org kNoSavedLayerIndex = -1 1186bfd74c3d62f40c933ade44051e8a407e017b882junov@chromium.org }; 119bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 120f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com /* 121f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com * Write the 'drawType' operation and chunk size to the skp. 'size' 1224b7bb5ccda62759133bc13e69f5247c91ef6a61eskia.committer@gmail.com * can potentially be increased if the chunk size needs its own storage 123f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com * location (i.e., it overflows 24 bits). 124f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com * Returns the start offset of the chunk. This is the location at which 125f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com * the opcode & size are stored. 1264b7bb5ccda62759133bc13e69f5247c91ef6a61eskia.committer@gmail.com * TODO: since we are handing the size into here we could call reserve 127f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com * and then return a pointer to the memory storage. This could decrease 128f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com * allocation overhead but could lead to more wasted space (the tail 129f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com * end of blocks could go unused). Possibly add a second addDraw that 130f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com * operates in this manner. 131f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com */ 132f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com uint32_t addDraw(DrawType drawType, uint32_t* size) { 133f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com uint32_t offset = fWriter.size(); 134f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com 1352ffcbf828d03b8e32ffc93b1b0ee8a98faeaa51ereed@google.com this->predrawNotify(); 1362ffcbf828d03b8e32ffc93b1b0ee8a98faeaa51ereed@google.com 137f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com #ifdef SK_DEBUG_TRACE 138bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkDebugf("add %s\n", DrawTypeToString(drawType)); 139f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com #endif 140f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com 141f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com SkASSERT(0 != *size); 142f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com SkASSERT(((uint8_t) drawType) == drawType); 143f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com 144f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com if (0 != (*size & ~MASK_24) || *size == MASK_24) { 145f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com fWriter.writeInt(PACK_8_24(drawType, MASK_24)); 146f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com *size += 1; 147f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com fWriter.writeInt(*size); 148f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com } else { 149f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com fWriter.writeInt(PACK_8_24(drawType, *size)); 150f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com } 151f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com 152f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com return offset; 1538c331d260c7fe604a69b6ace405a4c6cd160cf17vandebo@chromium.org } 154f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com 155bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void addInt(int value) { 156bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com fWriter.writeInt(value); 157bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com } 158bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void addScalar(SkScalar scalar) { 159bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com fWriter.writeScalar(scalar); 160bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com } 1618c331d260c7fe604a69b6ace405a4c6cd160cf17vandebo@chromium.org 162bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void addBitmap(const SkBitmap& bitmap); 163bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void addMatrix(const SkMatrix& matrix); 164bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void addMatrixPtr(const SkMatrix* matrix); 165fc8ff2e8e6b71629b28b31e759f3551418f4ea13junov@chromium.org const SkFlatData* addPaint(const SkPaint& paint) { return this->addPaintPtr(&paint); } 166fc8ff2e8e6b71629b28b31e759f3551418f4ea13junov@chromium.org const SkFlatData* addPaintPtr(const SkPaint* paint); 167bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void addPath(const SkPath& path); 168bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void addPicture(SkPicture& picture); 169bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void addPoint(const SkPoint& point); 170bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void addPoints(const SkPoint pts[], int count); 171bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void addRect(const SkRect& rect); 172bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void addRectPtr(const SkRect* rect); 1733f270706ca0ff7302b938355e6d481a6b5f04e4breed@google.com void addIRect(const SkIRect& rect); 174bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void addIRectPtr(const SkIRect* rect); 1757a7e655343617093a5eea37c7a556602a1bb0576reed@google.com void addRRect(const SkRRect&); 176bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void addRegion(const SkRegion& region); 177bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void addText(const void* text, size_t byteLength); 178bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 179dc8630fa3915d6b1a6cfef385ac6846cf78e0b94junov@chromium.org int find(const SkBitmap& bitmap); 180dc8630fa3915d6b1a6cfef385ac6846cf78e0b94junov@chromium.org 181bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#ifdef SK_DEBUG_DUMP 182bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.compublic: 183bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void dumpMatrices(); 184bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void dumpPaints(); 185bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#endif 186bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 187bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#ifdef SK_DEBUG_SIZE 188bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.compublic: 1898c331d260c7fe604a69b6ace405a4c6cd160cf17vandebo@chromium.org size_t size() const; 190bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com int bitmaps(size_t* size) const; 191bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com int matrices(size_t* size) const; 192bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com int paints(size_t* size) const; 193bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com int paths(size_t* size) const; 194bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com int regions(size_t* size) const; 195bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com size_t streamlen() const; 1968c331d260c7fe604a69b6ace405a4c6cd160cf17vandebo@chromium.org 197bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com size_t fPointBytes, fRectBytes, fTextBytes; 198bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com int fPointWrites, fRectWrites, fTextWrites; 199bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#endif 200bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 201bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#ifdef SK_DEBUG_VALIDATE 202bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.compublic: 203f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com void validate(uint32_t initialOffset, uint32_t size) const; 204bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comprivate: 205bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void validateBitmaps() const; 206bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void validateMatrices() const; 207bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void validatePaints() const; 208bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void validatePaths() const; 209bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com void validateRegions() const; 210bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#else 211bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.compublic: 212f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com void validate(uint32_t initialOffset, uint32_t size) const { 213f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com SkASSERT(fWriter.size() == initialOffset + size); 214f2a01d9185ed3a378410418de02dfc9fc6ecd725robertphillips@google.com } 215bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#endif 216bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 2176e832b50c712743d821e01829b127b86271a7ebbrileya@google.comprotected: 2186e832b50c712743d821e01829b127b86271a7ebbrileya@google.com 2196e832b50c712743d821e01829b127b86271a7ebbrileya@google.com // These are set to NULL in our constructor, but may be changed by 2206e832b50c712743d821e01829b127b86271a7ebbrileya@google.com // subclasses, in which case they will be SkSafeUnref'd in our destructor. 2216e832b50c712743d821e01829b127b86271a7ebbrileya@google.com SkBBoxHierarchy* fBoundingHierarchy; 2226e832b50c712743d821e01829b127b86271a7ebbrileya@google.com SkPictureStateTree* fStateTree; 2236e832b50c712743d821e01829b127b86271a7ebbrileya@google.com 224a26d7d39508b41303ac6d10c87de0704823d7760robertphillips@google.com // Allocated in the constructor and managed by this class. 2253855f87fcb9a9e590b6c94d742395415a3f1b06cdjsollen@google.com SkBitmapHeap* fBitmapHeap; 226a26d7d39508b41303ac6d10c87de0704823d7760robertphillips@google.com 227a26d7d39508b41303ac6d10c87de0704823d7760robertphillips@google.comprivate: 228a9aa73ae674668fe929a04566a17804eefe7938edjsollen@google.com SkChunkFlatController fFlattenableHeap; 229dc8630fa3915d6b1a6cfef385ac6846cf78e0b94junov@chromium.org 230ba64210404187e9ef7a9d55135695aa0bd745467djsollen@google.com SkMatrixDictionary fMatrices; 231ba64210404187e9ef7a9d55135695aa0bd745467djsollen@google.com SkPaintDictionary fPaints; 232ba64210404187e9ef7a9d55135695aa0bd745467djsollen@google.com SkRegionDictionary fRegions; 233ba64210404187e9ef7a9d55135695aa0bd745467djsollen@google.com 234bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkPathHeap* fPathHeap; // reference counted 235bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkWriter32 fWriter; 236bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 237a29ebf3d2a01b26182e0998bdeba43afa9998bdcreed@android.com // we ref each item in these arrays 238bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com SkTDArray<SkPicture*> fPictureRefs; 239bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 240c4a55d734d36f634765d63b9adfb69ddbc6182fereed@android.com uint32_t fRecordFlags; 241d84ed564a00a67019a345ea545ca63ab514533f7junov@chromium.org int fInitialSaveCount; 242c4a55d734d36f634765d63b9adfb69ddbc6182fereed@android.com 243bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com friend class SkPicturePlayback; 2440803cf0def1522f41242a298a5b431c0d006dca6junov@chromium.org friend class SkPictureTester; // for unit testing 245bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 246bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com typedef SkCanvas INHERITED; 247bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com}; 248bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com 249bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#endif 250