1c4b21e6c03a6cdb03e116b9f510eb10cf8daedb1commit-bot@chromium.org/* 2c4b21e6c03a6cdb03e116b9f510eb10cf8daedb1commit-bot@chromium.org * Copyright 2014 Google Inc. 3c4b21e6c03a6cdb03e116b9f510eb10cf8daedb1commit-bot@chromium.org * 4c4b21e6c03a6cdb03e116b9f510eb10cf8daedb1commit-bot@chromium.org * Use of this source code is governed by a BSD-style license that can be 5c4b21e6c03a6cdb03e116b9f510eb10cf8daedb1commit-bot@chromium.org * found in the LICENSE file. 6c4b21e6c03a6cdb03e116b9f510eb10cf8daedb1commit-bot@chromium.org */ 7c4b21e6c03a6cdb03e116b9f510eb10cf8daedb1commit-bot@chromium.org 8e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org#ifndef SkRecords_DEFINED 9e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org#define SkRecords_DEFINED 10e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org 11f70b531daaf47db1ee95c70da9843f1dd1f418d3reed#include "SkData.h" 12e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org#include "SkCanvas.h" 133cb3840c9af6f70896cf5565a38d4ee03c02d767reed#include "SkDrawable.h" 14bfd5f171e6a3eccd7c4bede652a85fd76bcbce2areed#include "SkImageFilter.h" 15a8db72864a43ad1fbba3c2892cf5cd88060a43efreed#include "SkMatrix.h" 16d3ebb48320cf1b7e969974673e4bd7743816985ebungeman#include "SkPath.h" 172347b624678fedf1d2f7ab1d79b9ad70087c3392reed#include "SkPicture.h" 18d3ebb48320cf1b7e969974673e4bd7743816985ebungeman#include "SkRect.h" 19267be7fbc38174652c750ec69d8dc1feaa72db0cMike Reed#include "SkRegion.h" 20d3ebb48320cf1b7e969974673e4bd7743816985ebungeman#include "SkRRect.h" 2171c3c760a83123ee0b3127b8c65c6394ce541c50reed#include "SkRSXform.h" 22f70b531daaf47db1ee95c70da9843f1dd1f418d3reed#include "SkString.h" 2300d5c2c6523321d25b32905ff4822f083a4173eefmalita#include "SkTextBlob.h" 2414583e11fd622c686993b741499060a6f3527055Mike Reed#include "SkVertices.h" 252347b624678fedf1d2f7ab1d79b9ad70087c3392reed 264dbbd04314cc0606f8d3bafe515c97e52c180f73halcanary// Windows.h, will pull in all of the GDI defines. GDI #defines 274dbbd04314cc0606f8d3bafe515c97e52c180f73halcanary// DrawText to DrawTextA or DrawTextW, but SkRecord has a struct 284dbbd04314cc0606f8d3bafe515c97e52c180f73halcanary// called DrawText. Since this file does not use GDI, undefing 294dbbd04314cc0606f8d3bafe515c97e52c180f73halcanary// DrawText makes things less confusing. 304dbbd04314cc0606f8d3bafe515c97e52c180f73halcanary#ifdef DrawText 314dbbd04314cc0606f8d3bafe515c97e52c180f73halcanary#undef DrawText 324dbbd04314cc0606f8d3bafe515c97e52c180f73halcanary#endif 334dbbd04314cc0606f8d3bafe515c97e52c180f73halcanary 3400d5c2c6523321d25b32905ff4822f083a4173eefmalitanamespace SkRecords { 3500d5c2c6523321d25b32905ff4822f083a4173eefmalita 36e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org// A list of all the types of canvas calls we can record. 37e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org// Each of these is reified into a struct below. 38e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org// 39e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org// (We're using the macro-of-macro trick here to do several different things with the same list.) 40e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org// 41e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org// We leave this SK_RECORD_TYPES macro defined for use by code that wants to operate on SkRecords 42e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org// types polymorphically. (See SkRecord::Record::{visit,mutate} for an example.) 4337f6e62f114b72d34bcd3140b16b3b30fe5750c8commit-bot@chromium.org// 4437f6e62f114b72d34bcd3140b16b3b30fe5750c8commit-bot@chromium.org// Order doesn't technically matter here, but the compiler can generally generate better code if 4537f6e62f114b72d34bcd3140b16b3b30fe5750c8commit-bot@chromium.org// you keep them semantically grouped, especially the Draws. It's also nice to leave NoOp at 0. 4688c3e279ab79125e5741b0b0b3175291e2e2bbeecommit-bot@chromium.org#define SK_RECORD_TYPES(M) \ 4788c3e279ab79125e5741b0b0b3175291e2e2bbeecommit-bot@chromium.org M(NoOp) \ 4888c3e279ab79125e5741b0b0b3175291e2e2bbeecommit-bot@chromium.org M(Restore) \ 4988c3e279ab79125e5741b0b0b3175291e2e2bbeecommit-bot@chromium.org M(Save) \ 5088c3e279ab79125e5741b0b0b3175291e2e2bbeecommit-bot@chromium.org M(SaveLayer) \ 5188c3e279ab79125e5741b0b0b3175291e2e2bbeecommit-bot@chromium.org M(SetMatrix) \ 52cbdf007bc2eb85056a1a5c75c088202becba2d16mtklein M(Translate) \ 53e5de130788c8637d2f7df9ddb0241b78e04d5882vjiaoblack M(TranslateZ) \ 54e9d2052e4931eeade49042a855b9c1f5ab7c84c5mtklein M(Concat) \ 5588c3e279ab79125e5741b0b0b3175291e2e2bbeecommit-bot@chromium.org M(ClipPath) \ 5688c3e279ab79125e5741b0b0b3175291e2e2bbeecommit-bot@chromium.org M(ClipRRect) \ 5788c3e279ab79125e5741b0b0b3175291e2e2bbeecommit-bot@chromium.org M(ClipRect) \ 5888c3e279ab79125e5741b0b0b3175291e2e2bbeecommit-bot@chromium.org M(ClipRegion) \ 59ac3aa245acc7b469aa2f0d0078e53401d78ac8b9bsalomon M(DrawArc) \ 606be2aa9a251bf6022570a03140f956655b3ef1dareed M(DrawDrawable) \ 6165151754b9fdb6a968d7307764c20655d1b680a0piotaixr M(DrawImage) \ 62c573a40ed5024b463e47088d307e3164a486dba5msarett M(DrawImageLattice) \ 6365151754b9fdb6a968d7307764c20655d1b680a0piotaixr M(DrawImageRect) \ 644c21dc5ddf3b482293ed34eead876d8d61a662c3reed M(DrawImageNine) \ 6588c3e279ab79125e5741b0b0b3175291e2e2bbeecommit-bot@chromium.org M(DrawDRRect) \ 6688c3e279ab79125e5741b0b0b3175291e2e2bbeecommit-bot@chromium.org M(DrawOval) \ 6788c3e279ab79125e5741b0b0b3175291e2e2bbeecommit-bot@chromium.org M(DrawPaint) \ 6888c3e279ab79125e5741b0b0b3175291e2e2bbeecommit-bot@chromium.org M(DrawPath) \ 69963137b75c0a1fe91f35e9826742f36309f5e65ddandov M(DrawPatch) \ 702347b624678fedf1d2f7ab1d79b9ad70087c3392reed M(DrawPicture) \ 7195302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack M(DrawShadowedPicture) \ 7288c3e279ab79125e5741b0b0b3175291e2e2bbeecommit-bot@chromium.org M(DrawPoints) \ 7388c3e279ab79125e5741b0b0b3175291e2e2bbeecommit-bot@chromium.org M(DrawPosText) \ 7488c3e279ab79125e5741b0b0b3175291e2e2bbeecommit-bot@chromium.org M(DrawPosTextH) \ 75c551d9fcae98ff7b9d56f315947e89a26632aeecmtklein M(DrawText) \ 76c551d9fcae98ff7b9d56f315947e89a26632aeecmtklein M(DrawTextOnPath) \ 7745561a0b15fe045ba272c328684c3f7ae290785areed M(DrawTextRSXform) \ 7888c3e279ab79125e5741b0b0b3175291e2e2bbeecommit-bot@chromium.org M(DrawRRect) \ 7988c3e279ab79125e5741b0b0b3175291e2e2bbeecommit-bot@chromium.org M(DrawRect) \ 8044df651ebefc284acc2f66425dff3ea0b0e14b36msarett M(DrawRegion) \ 8129dfaa80f5776904f42b72b387a99e75f8dc5f5fmtklein M(DrawTextBlob) \ 8271c3c760a83123ee0b3127b8c65c6394ce541c50reed M(DrawAtlas) \ 83f70b531daaf47db1ee95c70da9843f1dd1f418d3reed M(DrawVertices) \ 84f70b531daaf47db1ee95c70da9843f1dd1f418d3reed M(DrawAnnotation) 85e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org 86e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org// Defines SkRecords::Type, an enum of all record types. 87e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org#define ENUM(T) T##_Type, 88e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.orgenum Type { SK_RECORD_TYPES(ENUM) }; 89e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org#undef ENUM 90e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org 919b222a5ddd3b39ca191d8443bade6052cdcb713dmtklein#define ACT_AS_PTR(ptr) \ 929b222a5ddd3b39ca191d8443bade6052cdcb713dmtklein operator T*() const { return ptr; } \ 939b222a5ddd3b39ca191d8443bade6052cdcb713dmtklein T* operator->() const { return ptr; } 9488c3e279ab79125e5741b0b0b3175291e2e2bbeecommit-bot@chromium.org 95653d51867c20fc643537e4a0d73178697766ae4acommit-bot@chromium.org// An Optional doesn't own the pointer's memory, but may need to destroy non-POD data. 96653d51867c20fc643537e4a0d73178697766ae4acommit-bot@chromium.orgtemplate <typename T> 97653d51867c20fc643537e4a0d73178697766ae4acommit-bot@chromium.orgclass Optional : SkNoncopyable { 98653d51867c20fc643537e4a0d73178697766ae4acommit-bot@chromium.orgpublic: 999db912c2ac2ab53bc24f2d50a3e5a80162051dccmtklein Optional() : fPtr(nullptr) {} 100653d51867c20fc643537e4a0d73178697766ae4acommit-bot@chromium.org Optional(T* ptr) : fPtr(ptr) {} 101449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein Optional(Optional&& o) : fPtr(o.fPtr) { 102449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein o.fPtr = nullptr; 103449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein } 104653d51867c20fc643537e4a0d73178697766ae4acommit-bot@chromium.org ~Optional() { if (fPtr) fPtr->~T(); } 105653d51867c20fc643537e4a0d73178697766ae4acommit-bot@chromium.org 106fc6c37b981daeece7474ce61070c707c37eefa62Mike Klein ACT_AS_PTR(fPtr) 10788c3e279ab79125e5741b0b0b3175291e2e2bbeecommit-bot@chromium.orgprivate: 10888c3e279ab79125e5741b0b0b3175291e2e2bbeecommit-bot@chromium.org T* fPtr; 10988c3e279ab79125e5741b0b0b3175291e2e2bbeecommit-bot@chromium.org}; 11088c3e279ab79125e5741b0b0b3175291e2e2bbeecommit-bot@chromium.org 11188c3e279ab79125e5741b0b0b3175291e2e2bbeecommit-bot@chromium.org// Like Optional, but ptr must not be NULL. 11288c3e279ab79125e5741b0b0b3175291e2e2bbeecommit-bot@chromium.orgtemplate <typename T> 11388c3e279ab79125e5741b0b0b3175291e2e2bbeecommit-bot@chromium.orgclass Adopted : SkNoncopyable { 11488c3e279ab79125e5741b0b0b3175291e2e2bbeecommit-bot@chromium.orgpublic: 11588c3e279ab79125e5741b0b0b3175291e2e2bbeecommit-bot@chromium.org Adopted(T* ptr) : fPtr(ptr) { SkASSERT(fPtr); } 116f0ae5e471b759f18b614a8e0928c9151947de04ccommit-bot@chromium.org Adopted(Adopted* source) { 117f0ae5e471b759f18b614a8e0928c9151947de04ccommit-bot@chromium.org // Transfer ownership from source to this. 118f0ae5e471b759f18b614a8e0928c9151947de04ccommit-bot@chromium.org fPtr = source->fPtr; 119f0ae5e471b759f18b614a8e0928c9151947de04ccommit-bot@chromium.org source->fPtr = NULL; 120f0ae5e471b759f18b614a8e0928c9151947de04ccommit-bot@chromium.org } 121f0ae5e471b759f18b614a8e0928c9151947de04ccommit-bot@chromium.org ~Adopted() { if (fPtr) fPtr->~T(); } 12288c3e279ab79125e5741b0b0b3175291e2e2bbeecommit-bot@chromium.org 123fc6c37b981daeece7474ce61070c707c37eefa62Mike Klein ACT_AS_PTR(fPtr) 124653d51867c20fc643537e4a0d73178697766ae4acommit-bot@chromium.orgprivate: 125653d51867c20fc643537e4a0d73178697766ae4acommit-bot@chromium.org T* fPtr; 126653d51867c20fc643537e4a0d73178697766ae4acommit-bot@chromium.org}; 127653d51867c20fc643537e4a0d73178697766ae4acommit-bot@chromium.org 128653d51867c20fc643537e4a0d73178697766ae4acommit-bot@chromium.org// PODArray doesn't own the pointer's memory, and we assume the data is POD. 129653d51867c20fc643537e4a0d73178697766ae4acommit-bot@chromium.orgtemplate <typename T> 130f0ae5e471b759f18b614a8e0928c9151947de04ccommit-bot@chromium.orgclass PODArray { 131653d51867c20fc643537e4a0d73178697766ae4acommit-bot@chromium.orgpublic: 1329db912c2ac2ab53bc24f2d50a3e5a80162051dccmtklein PODArray() {} 133653d51867c20fc643537e4a0d73178697766ae4acommit-bot@chromium.org PODArray(T* ptr) : fPtr(ptr) {} 134f0ae5e471b759f18b614a8e0928c9151947de04ccommit-bot@chromium.org // Default copy and assign. 135653d51867c20fc643537e4a0d73178697766ae4acommit-bot@chromium.org 136fc6c37b981daeece7474ce61070c707c37eefa62Mike Klein ACT_AS_PTR(fPtr) 137653d51867c20fc643537e4a0d73178697766ae4acommit-bot@chromium.orgprivate: 138653d51867c20fc643537e4a0d73178697766ae4acommit-bot@chromium.org T* fPtr; 139653d51867c20fc643537e4a0d73178697766ae4acommit-bot@chromium.org}; 140653d51867c20fc643537e4a0d73178697766ae4acommit-bot@chromium.org 14116307bd65011667ecdcb755465ce632eef204749commit-bot@chromium.org#undef ACT_AS_PTR 14216307bd65011667ecdcb755465ce632eef204749commit-bot@chromium.org 143af57903f330a0afd0c10244d4a66f64fdbef5d1emtklein// SkPath::getBounds() isn't thread safe unless we precache the bounds in a singlethreaded context. 14414ed0fd498639d1742e9b25ca4105193fa93b139mtklein// SkPath::cheapComputeDirection() is similar. 14514ed0fd498639d1742e9b25ca4105193fa93b139mtklein// Recording is a convenient time to cache these, or we can delay it to between record and playback. 14614ed0fd498639d1742e9b25ca4105193fa93b139mtkleinstruct PreCachedPath : public SkPath { 1479db912c2ac2ab53bc24f2d50a3e5a80162051dccmtklein PreCachedPath() {} 148449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein PreCachedPath(const SkPath& path); 149af57903f330a0afd0c10244d4a66f64fdbef5d1emtklein}; 150e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org 151af57903f330a0afd0c10244d4a66f64fdbef5d1emtklein// Like SkPath::getBounds(), SkMatrix::getType() isn't thread safe unless we precache it. 152af57903f330a0afd0c10244d4a66f64fdbef5d1emtklein// This may not cover all SkMatrices used by the picture (e.g. some could be hiding in a shader). 153af57903f330a0afd0c10244d4a66f64fdbef5d1emtkleinstruct TypedMatrix : public SkMatrix { 1549db912c2ac2ab53bc24f2d50a3e5a80162051dccmtklein TypedMatrix() {} 155449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein TypedMatrix(const SkMatrix& matrix); 156e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org}; 157e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org 158449d9b7e2d1b2e20963f18639c6e541ef953f069mtkleinenum Tags { 159449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein kDraw_Tag = 1, // May draw something (usually named DrawFoo). 160449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein kHasImage_Tag = 2, // Contains an SkImage or SkBitmap. 161449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein kHasText_Tag = 4, // Contains text. 1621bb5fecbea494d77d7d5633522be1cdc76d043aemtklein kHasPaint_Tag = 8, // May have an SkPaint field, at least optionally. 163449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein}; 164e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org 165449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein// A macro to make it a little easier to define a struct that can be stored in SkRecord. 166449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein#define RECORD(T, tags, ...) \ 167449d9b7e2d1b2e20963f18639c6e541ef953f069mtkleinstruct T { \ 168449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein static const Type kType = T##_Type; \ 169449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein static const int kTags = tags; \ 170449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein __VA_ARGS__; \ 171449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein}; 172449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein 173449d9b7e2d1b2e20963f18639c6e541ef953f069mtkleinRECORD(NoOp, 0); 174449d9b7e2d1b2e20963f18639c6e541ef953f069mtkleinRECORD(Restore, 0, 175449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkIRect devBounds; 176449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein TypedMatrix matrix); 177449d9b7e2d1b2e20963f18639c6e541ef953f069mtkleinRECORD(Save, 0); 178e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org 1791bb5fecbea494d77d7d5633522be1cdc76d043aemtkleinRECORD(SaveLayer, kHasPaint_Tag, 180449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein Optional<SkRect> bounds; 181449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein Optional<SkPaint> paint; 182da574d17f864ed70323a1c0fc6e4e969153a4c98mtklein sk_sp<const SkImageFilter> backdrop; 1834960eeec4a1f2a772654883d7f3615d47bcd5dc3reed SkCanvas::SaveLayerFlags saveLayerFlags); 184449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein 185449d9b7e2d1b2e20963f18639c6e541ef953f069mtkleinRECORD(SetMatrix, 0, 186449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein TypedMatrix matrix); 187e9d2052e4931eeade49042a855b9c1f5ab7c84c5mtkleinRECORD(Concat, 0, 188e9d2052e4931eeade49042a855b9c1f5ab7c84c5mtklein TypedMatrix matrix); 189e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org 190cbdf007bc2eb85056a1a5c75c088202becba2d16mtkleinRECORD(Translate, 0, 191cbdf007bc2eb85056a1a5c75c088202becba2d16mtklein SkScalar dx; 192cbdf007bc2eb85056a1a5c75c088202becba2d16mtklein SkScalar dy); 193e5de130788c8637d2f7df9ddb0241b78e04d5882vjiaoblackRECORD(TranslateZ, 0, SkScalar z); 194e5de130788c8637d2f7df9ddb0241b78e04d5882vjiaoblack 19573603f3c52ffd89fe9d035be827b566a0e7d3b79reedstruct ClipOpAndAA { 19673603f3c52ffd89fe9d035be827b566a0e7d3b79reed ClipOpAndAA() {} 197ebfce6d9b42198e04288a15953f40c395a7b6139Mike Reed ClipOpAndAA(SkClipOp op, bool aa) : fOp(static_cast<unsigned>(op)), fAA(aa) {} 198ebfce6d9b42198e04288a15953f40c395a7b6139Mike Reed 199ebfce6d9b42198e04288a15953f40c395a7b6139Mike Reed SkClipOp op() const { return static_cast<SkClipOp>(fOp); } 200ebfce6d9b42198e04288a15953f40c395a7b6139Mike Reed bool aa() const { return fAA != 0; } 201ebfce6d9b42198e04288a15953f40c395a7b6139Mike Reed 202ebfce6d9b42198e04288a15953f40c395a7b6139Mike Reedprivate: 203ebfce6d9b42198e04288a15953f40c395a7b6139Mike Reed unsigned fOp : 31; // This really only needs to be 3, but there's no win today to do so. 204ebfce6d9b42198e04288a15953f40c395a7b6139Mike Reed unsigned fAA : 1; // MSVC won't pack an enum with an bool, so we call this an unsigned. 205cdeeb095a629b0db9f0ddff09516f2b78255c047mtklein}; 20673603f3c52ffd89fe9d035be827b566a0e7d3b79reedstatic_assert(sizeof(ClipOpAndAA) == 4, "ClipOpAndAASize"); 207cdeeb095a629b0db9f0ddff09516f2b78255c047mtklein 208449d9b7e2d1b2e20963f18639c6e541ef953f069mtkleinRECORD(ClipPath, 0, 209449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkIRect devBounds; 210449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein PreCachedPath path; 21173603f3c52ffd89fe9d035be827b566a0e7d3b79reed ClipOpAndAA opAA); 212449d9b7e2d1b2e20963f18639c6e541ef953f069mtkleinRECORD(ClipRRect, 0, 213449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkIRect devBounds; 214449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkRRect rrect; 21573603f3c52ffd89fe9d035be827b566a0e7d3b79reed ClipOpAndAA opAA); 216449d9b7e2d1b2e20963f18639c6e541ef953f069mtkleinRECORD(ClipRect, 0, 217449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkIRect devBounds; 218449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkRect rect; 21973603f3c52ffd89fe9d035be827b566a0e7d3b79reed ClipOpAndAA opAA); 220449d9b7e2d1b2e20963f18639c6e541ef953f069mtkleinRECORD(ClipRegion, 0, 221449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkIRect devBounds; 222449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkRegion region; 223c1f7774e8d327e3c98b4094c9c01d26e27013f71Mike Reed SkClipOp op); 224e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org 22537f6e62f114b72d34bcd3140b16b3b30fe5750c8commit-bot@chromium.org// While not strictly required, if you have an SkPaint, it's fastest to put it first. 226ac3aa245acc7b469aa2f0d0078e53401d78ac8b9bsalomonRECORD(DrawArc, kDraw_Tag|kHasPaint_Tag, 227ac3aa245acc7b469aa2f0d0078e53401d78ac8b9bsalomon SkPaint paint; 228ac3aa245acc7b469aa2f0d0078e53401d78ac8b9bsalomon SkRect oval; 229ac3aa245acc7b469aa2f0d0078e53401d78ac8b9bsalomon SkScalar startAngle; 230ac3aa245acc7b469aa2f0d0078e53401d78ac8b9bsalomon SkScalar sweepAngle; 231ac3aa245acc7b469aa2f0d0078e53401d78ac8b9bsalomon unsigned useCenter); 2321bb5fecbea494d77d7d5633522be1cdc76d043aemtkleinRECORD(DrawDRRect, kDraw_Tag|kHasPaint_Tag, 233449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkPaint paint; 234449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkRRect outer; 235449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkRRect inner); 236449d9b7e2d1b2e20963f18639c6e541ef953f069mtkleinRECORD(DrawDrawable, kDraw_Tag, 237449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein Optional<SkMatrix> matrix; 238449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkRect worstCaseBounds; 239449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein int32_t index); 2401bb5fecbea494d77d7d5633522be1cdc76d043aemtkleinRECORD(DrawImage, kDraw_Tag|kHasImage_Tag|kHasPaint_Tag, 241449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein Optional<SkPaint> paint; 242da574d17f864ed70323a1c0fc6e4e969153a4c98mtklein sk_sp<const SkImage> image; 243449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkScalar left; 244449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkScalar top); 245c573a40ed5024b463e47088d307e3164a486dba5msarettRECORD(DrawImageLattice, kDraw_Tag|kHasImage_Tag|kHasPaint_Tag, 246c573a40ed5024b463e47088d307e3164a486dba5msarett Optional<SkPaint> paint; 247c573a40ed5024b463e47088d307e3164a486dba5msarett sk_sp<const SkImage> image; 248c573a40ed5024b463e47088d307e3164a486dba5msarett int xCount; 249c573a40ed5024b463e47088d307e3164a486dba5msarett PODArray<int> xDivs; 250c573a40ed5024b463e47088d307e3164a486dba5msarett int yCount; 251c573a40ed5024b463e47088d307e3164a486dba5msarett PODArray<int> yDivs; 2520764efe6a9ae65ad83992f614f57ca9db5b1f191msarett int flagCount; 2530764efe6a9ae65ad83992f614f57ca9db5b1f191msarett PODArray<SkCanvas::Lattice::Flags> flags; 25471df2d7bc1bbc83ad4cf005f9027df4cb3b88a9bmsarett SkIRect src; 255c573a40ed5024b463e47088d307e3164a486dba5msarett SkRect dst); 2561bb5fecbea494d77d7d5633522be1cdc76d043aemtkleinRECORD(DrawImageRect, kDraw_Tag|kHasImage_Tag|kHasPaint_Tag, 257449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein Optional<SkPaint> paint; 258da574d17f864ed70323a1c0fc6e4e969153a4c98mtklein sk_sp<const SkImage> image; 259449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein Optional<SkRect> src; 260449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkRect dst; 261449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkCanvas::SrcRectConstraint constraint); 2621bb5fecbea494d77d7d5633522be1cdc76d043aemtkleinRECORD(DrawImageNine, kDraw_Tag|kHasImage_Tag|kHasPaint_Tag, 263449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein Optional<SkPaint> paint; 264da574d17f864ed70323a1c0fc6e4e969153a4c98mtklein sk_sp<const SkImage> image; 265449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkIRect center; 266449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkRect dst); 2671bb5fecbea494d77d7d5633522be1cdc76d043aemtkleinRECORD(DrawOval, kDraw_Tag|kHasPaint_Tag, 268449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkPaint paint; 269449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkRect oval); 2701bb5fecbea494d77d7d5633522be1cdc76d043aemtkleinRECORD(DrawPaint, kDraw_Tag|kHasPaint_Tag, 271449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkPaint paint); 2721bb5fecbea494d77d7d5633522be1cdc76d043aemtkleinRECORD(DrawPath, kDraw_Tag|kHasPaint_Tag, 273449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkPaint paint; 274449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein PreCachedPath path); 2751bb5fecbea494d77d7d5633522be1cdc76d043aemtkleinRECORD(DrawPicture, kDraw_Tag|kHasPaint_Tag, 276449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein Optional<SkPaint> paint; 277da574d17f864ed70323a1c0fc6e4e969153a4c98mtklein sk_sp<const SkPicture> picture; 278449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein TypedMatrix matrix); 2791bb5fecbea494d77d7d5633522be1cdc76d043aemtkleinRECORD(DrawShadowedPicture, kDraw_Tag|kHasPaint_Tag, 28095302da19d8b0a3bcd9d9be0e79f486760787f09vjiaoblack Optional<SkPaint> paint; 281da574d17f864ed70323a1c0fc6e4e969153a4c98mtklein sk_sp<const SkPicture> picture; 282e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack TypedMatrix matrix; 283e6f5d5623160a69e1585f5121a3695092327dfe0vjiaoblack const SkShadowParams& params); 2841bb5fecbea494d77d7d5633522be1cdc76d043aemtkleinRECORD(DrawPoints, kDraw_Tag|kHasPaint_Tag, 285449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkPaint paint; 286449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkCanvas::PointMode mode; 287449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein unsigned count; 288449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkPoint* pts); 2891bb5fecbea494d77d7d5633522be1cdc76d043aemtkleinRECORD(DrawPosText, kDraw_Tag|kHasText_Tag|kHasPaint_Tag, 290449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkPaint paint; 291449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein PODArray<char> text; 292449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein size_t byteLength; 293449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein PODArray<SkPoint> pos); 2941bb5fecbea494d77d7d5633522be1cdc76d043aemtkleinRECORD(DrawPosTextH, kDraw_Tag|kHasText_Tag|kHasPaint_Tag, 295449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkPaint paint; 296449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein PODArray<char> text; 297449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein unsigned byteLength; 298449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkScalar y; 299449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein PODArray<SkScalar> xpos); 3001bb5fecbea494d77d7d5633522be1cdc76d043aemtkleinRECORD(DrawRRect, kDraw_Tag|kHasPaint_Tag, 301449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkPaint paint; 302449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkRRect rrect); 3031bb5fecbea494d77d7d5633522be1cdc76d043aemtkleinRECORD(DrawRect, kDraw_Tag|kHasPaint_Tag, 304449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkPaint paint; 305449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkRect rect); 30644df651ebefc284acc2f66425dff3ea0b0e14b36msarettRECORD(DrawRegion, kDraw_Tag|kHasPaint_Tag, 30744df651ebefc284acc2f66425dff3ea0b0e14b36msarett SkPaint paint; 30844df651ebefc284acc2f66425dff3ea0b0e14b36msarett SkRegion region); 3091bb5fecbea494d77d7d5633522be1cdc76d043aemtkleinRECORD(DrawText, kDraw_Tag|kHasText_Tag|kHasPaint_Tag, 310449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkPaint paint; 311449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein PODArray<char> text; 312449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein size_t byteLength; 313449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkScalar x; 314449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkScalar y); 3151bb5fecbea494d77d7d5633522be1cdc76d043aemtkleinRECORD(DrawTextBlob, kDraw_Tag|kHasText_Tag|kHasPaint_Tag, 316449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkPaint paint; 317da574d17f864ed70323a1c0fc6e4e969153a4c98mtklein sk_sp<const SkTextBlob> blob; 318449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkScalar x; 319449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkScalar y); 3201bb5fecbea494d77d7d5633522be1cdc76d043aemtkleinRECORD(DrawTextOnPath, kDraw_Tag|kHasText_Tag|kHasPaint_Tag, 321449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkPaint paint; 322449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein PODArray<char> text; 323449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein size_t byteLength; 324449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein PreCachedPath path; 325449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein TypedMatrix matrix); 3261bb5fecbea494d77d7d5633522be1cdc76d043aemtkleinRECORD(DrawTextRSXform, kDraw_Tag|kHasText_Tag|kHasPaint_Tag, 32745561a0b15fe045ba272c328684c3f7ae290785areed SkPaint paint; 32845561a0b15fe045ba272c328684c3f7ae290785areed PODArray<char> text; 32945561a0b15fe045ba272c328684c3f7ae290785areed size_t byteLength; 33045561a0b15fe045ba272c328684c3f7ae290785areed PODArray<SkRSXform> xforms; 33145561a0b15fe045ba272c328684c3f7ae290785areed Optional<SkRect> cull); 3321bb5fecbea494d77d7d5633522be1cdc76d043aemtkleinRECORD(DrawPatch, kDraw_Tag|kHasPaint_Tag, 333449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkPaint paint; 334449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein PODArray<SkPoint> cubics; 335449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein PODArray<SkColor> colors; 336449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein PODArray<SkPoint> texCoords; 3377d954ad797176afedb9262fdea4507d0fc60eb9dMike Reed SkBlendMode bmode); 3381bb5fecbea494d77d7d5633522be1cdc76d043aemtkleinRECORD(DrawAtlas, kDraw_Tag|kHasImage_Tag|kHasPaint_Tag, 339449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein Optional<SkPaint> paint; 340da574d17f864ed70323a1c0fc6e4e969153a4c98mtklein sk_sp<const SkImage> atlas; 341449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein PODArray<SkRSXform> xforms; 342449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein PODArray<SkRect> texs; 343449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein PODArray<SkColor> colors; 344449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein int count; 3457d954ad797176afedb9262fdea4507d0fc60eb9dMike Reed SkBlendMode mode; 346449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein Optional<SkRect> cull); 3471bb5fecbea494d77d7d5633522be1cdc76d043aemtkleinRECORD(DrawVertices, kDraw_Tag|kHasPaint_Tag, 348449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein SkPaint paint; 34914583e11fd622c686993b741499060a6f3527055Mike Reed sk_sp<SkVertices> vertices; 35014583e11fd622c686993b741499060a6f3527055Mike Reed SkBlendMode bmode); 3511bb5fecbea494d77d7d5633522be1cdc76d043aemtkleinRECORD(DrawAnnotation, 0, // TODO: kDraw_Tag, skia:5548 352f70b531daaf47db1ee95c70da9843f1dd1f418d3reed SkRect rect; 353f70b531daaf47db1ee95c70da9843f1dd1f418d3reed SkString key; 354da574d17f864ed70323a1c0fc6e4e969153a4c98mtklein sk_sp<SkData> value); 355449d9b7e2d1b2e20963f18639c6e541ef953f069mtklein#undef RECORD 356e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org 357e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org} // namespace SkRecords 358e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org 359e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org#endif//SkRecords_DEFINED 360