| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2014 Google Inc. | 2 * Copyright 2014 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #ifndef SkRecords_DEFINED | 8 #ifndef SkRecords_DEFINED |
| 9 #define SkRecords_DEFINED | 9 #define SkRecords_DEFINED |
| 10 | 10 |
| 11 #include "SkCanvas.h" | 11 #include "SkCanvas.h" |
| 12 | 12 |
| 13 namespace SkRecords { | 13 namespace SkRecords { |
| 14 | 14 |
| 15 // A list of all the types of canvas calls we can record. | 15 // A list of all the types of canvas calls we can record. |
| 16 // Each of these is reified into a struct below. | 16 // Each of these is reified into a struct below. |
| 17 // | 17 // |
| 18 // (We're using the macro-of-macro trick here to do several different things wit
h the same list.) | 18 // (We're using the macro-of-macro trick here to do several different things wit
h the same list.) |
| 19 // | 19 // |
| 20 // We leave this SK_RECORD_TYPES macro defined for use by code that wants to ope
rate on SkRecords | 20 // We leave this SK_RECORD_TYPES macro defined for use by code that wants to ope
rate on SkRecords |
| 21 // types polymorphically. (See SkRecord::Record::{visit,mutate} for an example.
) | 21 // types polymorphically. (See SkRecord::Record::{visit,mutate} for an example.
) |
| 22 // |
| 23 // Order doesn't technically matter here, but the compiler can generally generat
e better code if |
| 24 // you keep them semantically grouped, especially the Draws. It's also nice to
leave NoOp at 0. |
| 22 #define SK_RECORD_TYPES(M) \ | 25 #define SK_RECORD_TYPES(M) \ |
| 23 M(NoOp) \ | 26 M(NoOp) \ |
| 24 M(Restore) \ | 27 M(Restore) \ |
| 25 M(Save) \ | 28 M(Save) \ |
| 26 M(SaveLayer) \ | 29 M(SaveLayer) \ |
| 30 M(PushCull) \ |
| 31 M(PopCull) \ |
| 32 M(PairedPushCull) /*From SkRecordAnnotateCullingPairs*/ \ |
| 27 M(Concat) \ | 33 M(Concat) \ |
| 28 M(SetMatrix) \ | 34 M(SetMatrix) \ |
| 29 M(ClipPath) \ | 35 M(ClipPath) \ |
| 30 M(ClipRRect) \ | 36 M(ClipRRect) \ |
| 31 M(ClipRect) \ | 37 M(ClipRect) \ |
| 32 M(ClipRegion) \ | 38 M(ClipRegion) \ |
| 33 M(Clear) \ | 39 M(Clear) \ |
| 34 M(DrawBitmap) \ | 40 M(DrawBitmap) \ |
| 35 M(DrawBitmapMatrix) \ | 41 M(DrawBitmapMatrix) \ |
| 36 M(DrawBitmapNine) \ | 42 M(DrawBitmapNine) \ |
| 37 M(DrawBitmapRectToRect) \ | 43 M(DrawBitmapRectToRect) \ |
| 38 M(DrawDRRect) \ | 44 M(DrawDRRect) \ |
| 39 M(DrawOval) \ | 45 M(DrawOval) \ |
| 40 M(DrawPaint) \ | 46 M(DrawPaint) \ |
| 41 M(DrawPath) \ | 47 M(DrawPath) \ |
| 42 M(DrawPoints) \ | 48 M(DrawPoints) \ |
| 43 M(DrawPosText) \ | 49 M(DrawPosText) \ |
| 44 M(DrawPosTextH) \ | 50 M(DrawPosTextH) \ |
| 45 M(DrawRRect) \ | 51 M(DrawRRect) \ |
| 46 M(DrawRect) \ | 52 M(DrawRect) \ |
| 47 M(DrawSprite) \ | 53 M(DrawSprite) \ |
| 48 M(DrawText) \ | 54 M(DrawText) \ |
| 49 M(DrawTextOnPath) \ | 55 M(DrawTextOnPath) \ |
| 50 M(DrawVertices) \ | 56 M(DrawVertices) \ |
| 51 M(PushCull) \ | |
| 52 M(PopCull) \ | |
| 53 M(PairedPushCull) /*From SkRecordAnnotateCullingPairs*/ \ | |
| 54 M(BoundedDrawPosTextH) /*From SkRecordBoundDrawPosTextH*/ | 57 M(BoundedDrawPosTextH) /*From SkRecordBoundDrawPosTextH*/ |
| 55 | 58 |
| 56 // Defines SkRecords::Type, an enum of all record types. | 59 // Defines SkRecords::Type, an enum of all record types. |
| 57 #define ENUM(T) T##_Type, | 60 #define ENUM(T) T##_Type, |
| 58 enum Type { SK_RECORD_TYPES(ENUM) }; | 61 enum Type { SK_RECORD_TYPES(ENUM) }; |
| 59 #undef ENUM | 62 #undef ENUM |
| 60 | 63 |
| 61 // Macros to make it easier to define a record for a draw call with 0 args, 1 ar
gs, 2 args, etc. | 64 // Macros to make it easier to define a record for a draw call with 0 args, 1 ar
gs, 2 args, etc. |
| 62 // These should be clearer when you look at their use below. | 65 // These should be clearer when you look at their use below. |
| 63 #define RECORD0(T) \ | 66 #define RECORD0(T) \ |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 188 | 191 |
| 189 RECORD1(Concat, SkMatrix, matrix); | 192 RECORD1(Concat, SkMatrix, matrix); |
| 190 RECORD1(SetMatrix, SkMatrix, matrix); | 193 RECORD1(SetMatrix, SkMatrix, matrix); |
| 191 | 194 |
| 192 RECORD3(ClipPath, SkPath, path, SkRegion::Op, op, bool, doAA); | 195 RECORD3(ClipPath, SkPath, path, SkRegion::Op, op, bool, doAA); |
| 193 RECORD3(ClipRRect, SkRRect, rrect, SkRegion::Op, op, bool, doAA); | 196 RECORD3(ClipRRect, SkRRect, rrect, SkRegion::Op, op, bool, doAA); |
| 194 RECORD3(ClipRect, SkRect, rect, SkRegion::Op, op, bool, doAA); | 197 RECORD3(ClipRect, SkRect, rect, SkRegion::Op, op, bool, doAA); |
| 195 RECORD2(ClipRegion, SkRegion, region, SkRegion::Op, op); | 198 RECORD2(ClipRegion, SkRegion, region, SkRegion::Op, op); |
| 196 | 199 |
| 197 RECORD1(Clear, SkColor, color); | 200 RECORD1(Clear, SkColor, color); |
| 198 RECORD4(DrawBitmap, ImmutableBitmap, bitmap, | 201 // While not strictly required, if you have an SkPaint, it's fastest to put it f
irst. |
| 202 RECORD4(DrawBitmap, Optional<SkPaint>, paint, |
| 203 ImmutableBitmap, bitmap, |
| 199 SkScalar, left, | 204 SkScalar, left, |
| 200 SkScalar, top, | 205 SkScalar, top); |
| 201 Optional<SkPaint>, paint); | 206 RECORD3(DrawBitmapMatrix, Optional<SkPaint>, paint, ImmutableBitmap, bitmap, SkM
atrix, matrix); |
| 202 RECORD3(DrawBitmapMatrix, ImmutableBitmap, bitmap, SkMatrix, matrix, Optional<Sk
Paint>, paint); | 207 RECORD4(DrawBitmapNine, Optional<SkPaint>, paint, |
| 203 RECORD4(DrawBitmapNine, ImmutableBitmap, bitmap, | 208 ImmutableBitmap, bitmap, |
| 204 SkIRect, center, | 209 SkIRect, center, |
| 205 SkRect, dst, | 210 SkRect, dst); |
| 206 Optional<SkPaint>, paint); | 211 RECORD5(DrawBitmapRectToRect, Optional<SkPaint>, paint, |
| 207 RECORD5(DrawBitmapRectToRect, ImmutableBitmap, bitmap, | 212 ImmutableBitmap, bitmap, |
| 208 Optional<SkRect>, src, | 213 Optional<SkRect>, src, |
| 209 SkRect, dst, | 214 SkRect, dst, |
| 210 Optional<SkPaint>, paint, | |
| 211 SkCanvas::DrawBitmapRectFlags, flags); | 215 SkCanvas::DrawBitmapRectFlags, flags); |
| 212 RECORD3(DrawDRRect, SkRRect, outer, SkRRect, inner, SkPaint, paint); | 216 RECORD3(DrawDRRect, SkPaint, paint, SkRRect, outer, SkRRect, inner); |
| 213 RECORD2(DrawOval, SkRect, oval, SkPaint, paint); | 217 RECORD2(DrawOval, SkPaint, paint, SkRect, oval); |
| 214 RECORD1(DrawPaint, SkPaint, paint); | 218 RECORD1(DrawPaint, SkPaint, paint); |
| 215 RECORD2(DrawPath, SkPath, path, SkPaint, paint); | 219 RECORD2(DrawPath, SkPaint, paint, SkPath, path); |
| 216 RECORD4(DrawPoints, SkCanvas::PointMode, mode, size_t, count, SkPoint*, pts, SkP
aint, paint); | 220 RECORD4(DrawPoints, SkPaint, paint, SkCanvas::PointMode, mode, size_t, count, Sk
Point*, pts); |
| 217 RECORD4(DrawPosText, PODArray<char>, text, | 221 RECORD4(DrawPosText, SkPaint, paint, |
| 222 PODArray<char>, text, |
| 218 size_t, byteLength, | 223 size_t, byteLength, |
| 219 PODArray<SkPoint>, pos, | 224 PODArray<SkPoint>, pos); |
| 220 SkPaint, paint); | 225 RECORD5(DrawPosTextH, SkPaint, paint, |
| 221 RECORD5(DrawPosTextH, PODArray<char>, text, | 226 PODArray<char>, text, |
| 222 size_t, byteLength, | 227 size_t, byteLength, |
| 223 PODArray<SkScalar>, xpos, | 228 PODArray<SkScalar>, xpos, |
| 224 SkScalar, y, | 229 SkScalar, y); |
| 225 SkPaint, paint); | 230 RECORD2(DrawRRect, SkPaint, paint, SkRRect, rrect); |
| 226 RECORD2(DrawRRect, SkRRect, rrect, SkPaint, paint); | 231 RECORD2(DrawRect, SkPaint, paint, SkRect, rect); |
| 227 RECORD2(DrawRect, SkRect, rect, SkPaint, paint); | 232 RECORD4(DrawSprite, Optional<SkPaint>, paint, ImmutableBitmap, bitmap, int, left
, int, top); |
| 228 RECORD4(DrawSprite, ImmutableBitmap, bitmap, int, left, int, top, Optional<SkPai
nt>, paint); | 233 RECORD5(DrawText, SkPaint, paint, |
| 229 RECORD5(DrawText, PODArray<char>, text, | 234 PODArray<char>, text, |
| 230 size_t, byteLength, | 235 size_t, byteLength, |
| 231 SkScalar, x, | 236 SkScalar, x, |
| 232 SkScalar, y, | 237 SkScalar, y); |
| 233 SkPaint, paint); | 238 RECORD5(DrawTextOnPath, SkPaint, paint, |
| 234 RECORD5(DrawTextOnPath, PODArray<char>, text, | 239 PODArray<char>, text, |
| 235 size_t, byteLength, | 240 size_t, byteLength, |
| 236 SkPath, path, | 241 SkPath, path, |
| 237 Optional<SkMatrix>, matrix, | 242 Optional<SkMatrix>, matrix); |
| 238 SkPaint, paint); | |
| 239 | 243 |
| 240 // This guy is so ugly we just write it manually. | 244 // This guy is so ugly we just write it manually. |
| 241 struct DrawVertices { | 245 struct DrawVertices { |
| 242 static const Type kType = DrawVertices_Type; | 246 static const Type kType = DrawVertices_Type; |
| 243 | 247 |
| 244 DrawVertices(SkCanvas::VertexMode vmode, | 248 DrawVertices(const SkPaint& paint, |
| 249 SkCanvas::VertexMode vmode, |
| 245 int vertexCount, | 250 int vertexCount, |
| 246 SkPoint* vertices, | 251 SkPoint* vertices, |
| 247 SkPoint* texs, | 252 SkPoint* texs, |
| 248 SkColor* colors, | 253 SkColor* colors, |
| 249 SkXfermode* xmode, | 254 SkXfermode* xmode, |
| 250 uint16_t* indices, | 255 uint16_t* indices, |
| 251 int indexCount, | 256 int indexCount) |
| 252 const SkPaint& paint) | 257 : paint(paint) |
| 253 : vmode(vmode) | 258 , vmode(vmode) |
| 254 , vertexCount(vertexCount) | 259 , vertexCount(vertexCount) |
| 255 , vertices(vertices) | 260 , vertices(vertices) |
| 256 , texs(texs) | 261 , texs(texs) |
| 257 , colors(colors) | 262 , colors(colors) |
| 258 , xmode(SkSafeRef(xmode)) | 263 , xmode(SkSafeRef(xmode)) |
| 259 , indices(indices) | 264 , indices(indices) |
| 260 , indexCount(indexCount) | 265 , indexCount(indexCount) {} |
| 261 , paint(paint) {} | |
| 262 | 266 |
| 267 SkPaint paint; |
| 263 SkCanvas::VertexMode vmode; | 268 SkCanvas::VertexMode vmode; |
| 264 int vertexCount; | 269 int vertexCount; |
| 265 PODArray<SkPoint> vertices; | 270 PODArray<SkPoint> vertices; |
| 266 PODArray<SkPoint> texs; | 271 PODArray<SkPoint> texs; |
| 267 PODArray<SkColor> colors; | 272 PODArray<SkColor> colors; |
| 268 SkAutoTUnref<SkXfermode> xmode; | 273 SkAutoTUnref<SkXfermode> xmode; |
| 269 PODArray<uint16_t> indices; | 274 PODArray<uint16_t> indices; |
| 270 int indexCount; | 275 int indexCount; |
| 271 SkPaint paint; | |
| 272 }; | 276 }; |
| 273 | 277 |
| 274 // Records added by optimizations. | 278 // Records added by optimizations. |
| 275 RECORD2(PairedPushCull, Adopted<PushCull>, base, unsigned, skip); | 279 RECORD2(PairedPushCull, Adopted<PushCull>, base, unsigned, skip); |
| 276 RECORD3(BoundedDrawPosTextH, Adopted<DrawPosTextH>, base, SkScalar, minY, SkScal
ar, maxY); | 280 RECORD3(BoundedDrawPosTextH, Adopted<DrawPosTextH>, base, SkScalar, minY, SkScal
ar, maxY); |
| 277 | 281 |
| 278 #undef RECORD0 | 282 #undef RECORD0 |
| 279 #undef RECORD1 | 283 #undef RECORD1 |
| 280 #undef RECORD2 | 284 #undef RECORD2 |
| 281 #undef RECORD3 | 285 #undef RECORD3 |
| 282 #undef RECORD4 | 286 #undef RECORD4 |
| 283 #undef RECORD5 | 287 #undef RECORD5 |
| 284 | 288 |
| 285 } // namespace SkRecords | 289 } // namespace SkRecords |
| 286 | 290 |
| 287 #endif//SkRecords_DEFINED | 291 #endif//SkRecords_DEFINED |
| OLD | NEW |