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 #include "SkPicture.h" | 12 #include "SkPicture.h" |
| 13 #include "SkTextBlob.h" |
13 | 14 |
14 class SkPictureBox { | 15 namespace SkRecords { |
| 16 |
| 17 template <typename T> |
| 18 class RefBox : SkNoncopyable { |
15 public: | 19 public: |
16 SkPictureBox(const SkPicture* obj) : fObj(SkRef(obj)) {} | 20 RefBox(const T* obj) : fObj(SkRef(obj)) {} |
17 ~SkPictureBox() { fObj->unref(); } | 21 ~RefBox() { fObj->unref(); } |
18 | 22 |
19 operator const SkPicture*() const { return fObj; } | 23 operator const T*() const { return fObj; } |
20 | 24 |
21 private: | 25 private: |
22 SkPictureBox(const SkPictureBox&); | 26 const T* fObj; |
23 SkPictureBox& operator=(const SkPictureBox&); | |
24 | |
25 const SkPicture* fObj; | |
26 }; | 27 }; |
27 | 28 |
28 namespace SkRecords { | |
29 | |
30 // A list of all the types of canvas calls we can record. | 29 // A list of all the types of canvas calls we can record. |
31 // Each of these is reified into a struct below. | 30 // Each of these is reified into a struct below. |
32 // | 31 // |
33 // (We're using the macro-of-macro trick here to do several different things wit
h the same list.) | 32 // (We're using the macro-of-macro trick here to do several different things wit
h the same list.) |
34 // | 33 // |
35 // We leave this SK_RECORD_TYPES macro defined for use by code that wants to ope
rate on SkRecords | 34 // We leave this SK_RECORD_TYPES macro defined for use by code that wants to ope
rate on SkRecords |
36 // types polymorphically. (See SkRecord::Record::{visit,mutate} for an example.
) | 35 // types polymorphically. (See SkRecord::Record::{visit,mutate} for an example.
) |
37 // | 36 // |
38 // Order doesn't technically matter here, but the compiler can generally generat
e better code if | 37 // Order doesn't technically matter here, but the compiler can generally generat
e better code if |
39 // you keep them semantically grouped, especially the Draws. It's also nice to
leave NoOp at 0. | 38 // you keep them semantically grouped, especially the Draws. It's also nice to
leave NoOp at 0. |
(...skipping 21 matching lines...) Expand all Loading... |
61 M(DrawPatch) \ | 60 M(DrawPatch) \ |
62 M(DrawPicture) \ | 61 M(DrawPicture) \ |
63 M(DrawPoints) \ | 62 M(DrawPoints) \ |
64 M(DrawPosText) \ | 63 M(DrawPosText) \ |
65 M(DrawPosTextH) \ | 64 M(DrawPosTextH) \ |
66 M(DrawText) \ | 65 M(DrawText) \ |
67 M(DrawTextOnPath) \ | 66 M(DrawTextOnPath) \ |
68 M(DrawRRect) \ | 67 M(DrawRRect) \ |
69 M(DrawRect) \ | 68 M(DrawRect) \ |
70 M(DrawSprite) \ | 69 M(DrawSprite) \ |
| 70 M(DrawTextBlob) \ |
71 M(DrawVertices) | 71 M(DrawVertices) |
72 | 72 |
73 // Defines SkRecords::Type, an enum of all record types. | 73 // Defines SkRecords::Type, an enum of all record types. |
74 #define ENUM(T) T##_Type, | 74 #define ENUM(T) T##_Type, |
75 enum Type { SK_RECORD_TYPES(ENUM) }; | 75 enum Type { SK_RECORD_TYPES(ENUM) }; |
76 #undef ENUM | 76 #undef ENUM |
77 | 77 |
78 // Macros to make it easier to define a record for a draw call with 0 args, 1 ar
gs, 2 args, etc. | 78 // Macros to make it easier to define a record for a draw call with 0 args, 1 ar
gs, 2 args, etc. |
79 // These should be clearer when you look at their use below. | 79 // These should be clearer when you look at their use below. |
80 #define RECORD0(T) \ | 80 #define RECORD0(T) \ |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
224 RECORD5(DrawBitmapRectToRect, Optional<SkPaint>, paint, | 224 RECORD5(DrawBitmapRectToRect, Optional<SkPaint>, paint, |
225 ImmutableBitmap, bitmap, | 225 ImmutableBitmap, bitmap, |
226 Optional<SkRect>, src, | 226 Optional<SkRect>, src, |
227 SkRect, dst, | 227 SkRect, dst, |
228 SkCanvas::DrawBitmapRectFlags, flags); | 228 SkCanvas::DrawBitmapRectFlags, flags); |
229 RECORD3(DrawDRRect, SkPaint, paint, SkRRect, outer, SkRRect, inner); | 229 RECORD3(DrawDRRect, SkPaint, paint, SkRRect, outer, SkRRect, inner); |
230 RECORD2(DrawOval, SkPaint, paint, SkRect, oval); | 230 RECORD2(DrawOval, SkPaint, paint, SkRect, oval); |
231 RECORD1(DrawPaint, SkPaint, paint); | 231 RECORD1(DrawPaint, SkPaint, paint); |
232 RECORD2(DrawPath, SkPaint, paint, SkPath, path); | 232 RECORD2(DrawPath, SkPaint, paint, SkPath, path); |
233 //RECORD2(DrawPatch, SkPaint, paint, SkPatch, patch); | 233 //RECORD2(DrawPatch, SkPaint, paint, SkPatch, patch); |
234 RECORD3(DrawPicture, Optional<SkPaint>, paint, SkPictureBox, picture, Optional<S
kMatrix>, matrix); | 234 RECORD3(DrawPicture, Optional<SkPaint>, paint, RefBox<SkPicture>, picture, Optio
nal<SkMatrix>, matrix); |
235 RECORD4(DrawPoints, SkPaint, paint, SkCanvas::PointMode, mode, size_t, count, Sk
Point*, pts); | 235 RECORD4(DrawPoints, SkPaint, paint, SkCanvas::PointMode, mode, size_t, count, Sk
Point*, pts); |
236 RECORD4(DrawPosText, SkPaint, paint, | 236 RECORD4(DrawPosText, SkPaint, paint, |
237 PODArray<char>, text, | 237 PODArray<char>, text, |
238 size_t, byteLength, | 238 size_t, byteLength, |
239 PODArray<SkPoint>, pos); | 239 PODArray<SkPoint>, pos); |
240 RECORD5(DrawPosTextH, SkPaint, paint, | 240 RECORD5(DrawPosTextH, SkPaint, paint, |
241 PODArray<char>, text, | 241 PODArray<char>, text, |
242 size_t, byteLength, | 242 size_t, byteLength, |
243 PODArray<SkScalar>, xpos, | 243 PODArray<SkScalar>, xpos, |
244 SkScalar, y); | 244 SkScalar, y); |
245 RECORD2(DrawRRect, SkPaint, paint, SkRRect, rrect); | 245 RECORD2(DrawRRect, SkPaint, paint, SkRRect, rrect); |
246 RECORD2(DrawRect, SkPaint, paint, SkRect, rect); | 246 RECORD2(DrawRect, SkPaint, paint, SkRect, rect); |
247 RECORD4(DrawSprite, Optional<SkPaint>, paint, ImmutableBitmap, bitmap, int, left
, int, top); | 247 RECORD4(DrawSprite, Optional<SkPaint>, paint, ImmutableBitmap, bitmap, int, left
, int, top); |
248 RECORD5(DrawText, SkPaint, paint, | 248 RECORD5(DrawText, SkPaint, paint, |
249 PODArray<char>, text, | 249 PODArray<char>, text, |
250 size_t, byteLength, | 250 size_t, byteLength, |
251 SkScalar, x, | 251 SkScalar, x, |
252 SkScalar, y); | 252 SkScalar, y); |
| 253 RECORD4(DrawTextBlob, SkPaint, paint, |
| 254 RefBox<SkTextBlob>, blob, |
| 255 SkScalar, x, |
| 256 SkScalar, y); |
253 RECORD5(DrawTextOnPath, SkPaint, paint, | 257 RECORD5(DrawTextOnPath, SkPaint, paint, |
254 PODArray<char>, text, | 258 PODArray<char>, text, |
255 size_t, byteLength, | 259 size_t, byteLength, |
256 SkPath, path, | 260 SkPath, path, |
257 Optional<SkMatrix>, matrix); | 261 Optional<SkMatrix>, matrix); |
258 | 262 |
259 // This guy is so ugly we just write it manually. | 263 // This guy is so ugly we just write it manually. |
260 struct DrawVertices { | 264 struct DrawVertices { |
261 static const Type kType = DrawVertices_Type; | 265 static const Type kType = DrawVertices_Type; |
262 | 266 |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
311 #undef RECORD0 | 315 #undef RECORD0 |
312 #undef RECORD1 | 316 #undef RECORD1 |
313 #undef RECORD2 | 317 #undef RECORD2 |
314 #undef RECORD3 | 318 #undef RECORD3 |
315 #undef RECORD4 | 319 #undef RECORD4 |
316 #undef RECORD5 | 320 #undef RECORD5 |
317 | 321 |
318 } // namespace SkRecords | 322 } // namespace SkRecords |
319 | 323 |
320 #endif//SkRecords_DEFINED | 324 #endif//SkRecords_DEFINED |
OLD | NEW |