Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(61)

Side by Side Diff: cc/paint/paint_op_buffer.h

Issue 2863673002: cc: Fix data race in PaintOpBuffer by not mutating PaintOps. (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | cc/paint/paint_op_buffer.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CC_PAINT_PAINT_OP_BUFFER_H_ 5 #ifndef CC_PAINT_PAINT_OP_BUFFER_H_
6 #define CC_PAINT_PAINT_OP_BUFFER_H_ 6 #define CC_PAINT_PAINT_OP_BUFFER_H_
7 7
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 Translate, 72 Translate,
73 LastPaintOpType = Translate, 73 LastPaintOpType = Translate,
74 }; 74 };
75 75
76 struct CC_PAINT_EXPORT PaintOp { 76 struct CC_PAINT_EXPORT PaintOp {
77 uint32_t type : 8; 77 uint32_t type : 8;
78 uint32_t skip : 24; 78 uint32_t skip : 24;
79 79
80 PaintOpType GetType() const { return static_cast<PaintOpType>(type); } 80 PaintOpType GetType() const { return static_cast<PaintOpType>(type); }
81 81
82 // Subclasses should provide a static Raster() method which is called from
83 // here. The Raster method should take a const PaintOp* parameter. It is
84 // static with a pointer to the base type so that we can use it as a function
85 // pointer.
82 void Raster(SkCanvas* canvas, const SkMatrix& original_ctm) const; 86 void Raster(SkCanvas* canvas, const SkMatrix& original_ctm) const;
83 bool IsDrawOp() const; 87 bool IsDrawOp() const;
84 88
85 // Only valid for draw ops. 89 // Only valid for draw ops.
86 void RasterWithAlpha(SkCanvas* canvas, uint8_t alpha) const; 90 void RasterWithAlpha(SkCanvas* canvas, uint8_t alpha) const;
87 91
88 int CountSlowPaths() const { return 0; } 92 int CountSlowPaths() const { return 0; }
89 int CountSlowPathsFromFlags() const { return 0; } 93 int CountSlowPathsFromFlags() const { return 0; }
90 94
91 // Returns the number of bytes used by this op in referenced sub records 95 // Returns the number of bytes used by this op in referenced sub records
92 // and display lists. This doesn't count other objects like paths or blobs. 96 // and display lists. This doesn't count other objects like paths or blobs.
93 size_t AdditionalBytesUsed() const { return 0; } 97 size_t AdditionalBytesUsed() const { return 0; }
94 98
95 static constexpr bool kIsDrawOp = false; 99 static constexpr bool kIsDrawOp = false;
96 static constexpr bool kHasPaintFlags = false; 100 static constexpr bool kHasPaintFlags = false;
97 static SkRect kUnsetRect; 101 static SkRect kUnsetRect;
98 }; 102 };
99 103
100 struct CC_PAINT_EXPORT PaintOpWithFlags : PaintOp { 104 struct CC_PAINT_EXPORT PaintOpWithFlags : PaintOp {
101 static constexpr bool kHasPaintFlags = true; 105 static constexpr bool kHasPaintFlags = true;
102 106
103 explicit PaintOpWithFlags(const PaintFlags& flags) : flags(flags) {} 107 explicit PaintOpWithFlags(const PaintFlags& flags) : flags(flags) {}
104 108
105 int CountSlowPathsFromFlags() const { return flags.getPathEffect() ? 1 : 0; } 109 int CountSlowPathsFromFlags() const { return flags.getPathEffect() ? 1 : 0; }
106 110
111 // Subclasses should provide a static RasterWithFlags() method which is called
112 // from the Raster() method. The RasterWithFlags() should use the PaintFlags
113 // passed to it, instead of the |flags| member directly, as some callers may
114 // provide a modified PaintFlags. The RasterWithFlags() method is static with
115 // a const PaintOpWithFlags* parameter so that it can be used as a function
116 // pointer.
107 PaintFlags flags; 117 PaintFlags flags;
108 }; 118 };
109 119
110 struct CC_PAINT_EXPORT PaintOpWithData : PaintOpWithFlags { 120 struct CC_PAINT_EXPORT PaintOpWithData : PaintOpWithFlags {
111 // Having data is just a helper for ops that have a varying amount of data and 121 // Having data is just a helper for ops that have a varying amount of data and
112 // want a way to store that inline. This is for ops that pass in a 122 // want a way to store that inline. This is for ops that pass in a
113 // void* and a length. The void* data is assumed to not have any alignment 123 // void* and a length. The void* data is assumed to not have any alignment
114 // requirements. 124 // requirements.
115 PaintOpWithData(const PaintFlags& flags, size_t bytes) 125 PaintOpWithData(const PaintFlags& flags, size_t bytes)
116 : PaintOpWithFlags(flags), bytes(bytes) {} 126 : PaintOpWithFlags(flags), bytes(bytes) {}
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 SkScalar sweep_angle, 292 SkScalar sweep_angle,
283 bool use_center, 293 bool use_center,
284 const PaintFlags& flags) 294 const PaintFlags& flags)
285 : PaintOpWithFlags(flags), 295 : PaintOpWithFlags(flags),
286 oval(oval), 296 oval(oval),
287 start_angle(start_angle), 297 start_angle(start_angle),
288 sweep_angle(sweep_angle), 298 sweep_angle(sweep_angle),
289 use_center(use_center) {} 299 use_center(use_center) {}
290 static void Raster(const PaintOp* op, 300 static void Raster(const PaintOp* op,
291 SkCanvas* canvas, 301 SkCanvas* canvas,
292 const SkMatrix& original_ctm); 302 const SkMatrix& original_ctm) {
303 auto* flags_op = static_cast<const PaintOpWithFlags*>(op);
304 RasterWithFlags(flags_op, &flags_op->flags, canvas, original_ctm);
305 }
306 static void RasterWithFlags(const PaintOpWithFlags* op,
307 const PaintFlags* flags,
308 SkCanvas* canvas,
309 const SkMatrix& original_ctm);
293 310
294 SkRect oval; 311 SkRect oval;
295 SkScalar start_angle; 312 SkScalar start_angle;
296 SkScalar sweep_angle; 313 SkScalar sweep_angle;
297 bool use_center; 314 bool use_center;
298 }; 315 };
299 316
300 struct CC_PAINT_EXPORT DrawCircleOp final : PaintOpWithFlags { 317 struct CC_PAINT_EXPORT DrawCircleOp final : PaintOpWithFlags {
301 static constexpr PaintOpType kType = PaintOpType::DrawCircle; 318 static constexpr PaintOpType kType = PaintOpType::DrawCircle;
302 static constexpr bool kIsDrawOp = true; 319 static constexpr bool kIsDrawOp = true;
303 DrawCircleOp(SkScalar cx, 320 DrawCircleOp(SkScalar cx,
304 SkScalar cy, 321 SkScalar cy,
305 SkScalar radius, 322 SkScalar radius,
306 const PaintFlags& flags) 323 const PaintFlags& flags)
307 : PaintOpWithFlags(flags), cx(cx), cy(cy), radius(radius) {} 324 : PaintOpWithFlags(flags), cx(cx), cy(cy), radius(radius) {}
308 static void Raster(const PaintOp* op, 325 static void Raster(const PaintOp* op,
309 SkCanvas* canvas, 326 SkCanvas* canvas,
310 const SkMatrix& original_ctm); 327 const SkMatrix& original_ctm) {
328 auto* flags_op = static_cast<const PaintOpWithFlags*>(op);
329 RasterWithFlags(flags_op, &flags_op->flags, canvas, original_ctm);
330 }
331 static void RasterWithFlags(const PaintOpWithFlags* op,
332 const PaintFlags* flags,
333 SkCanvas* canvas,
334 const SkMatrix& original_ctm);
311 335
312 SkScalar cx; 336 SkScalar cx;
313 SkScalar cy; 337 SkScalar cy;
314 SkScalar radius; 338 SkScalar radius;
315 }; 339 };
316 340
317 struct CC_PAINT_EXPORT DrawColorOp final : PaintOp { 341 struct CC_PAINT_EXPORT DrawColorOp final : PaintOp {
318 static constexpr PaintOpType kType = PaintOpType::DrawColor; 342 static constexpr PaintOpType kType = PaintOpType::DrawColor;
319 static constexpr bool kIsDrawOp = true; 343 static constexpr bool kIsDrawOp = true;
320 DrawColorOp(SkColor color, SkBlendMode mode) : color(color), mode(mode) {} 344 DrawColorOp(SkColor color, SkBlendMode mode) : color(color), mode(mode) {}
(...skipping 26 matching lines...) Expand all
347 371
348 struct CC_PAINT_EXPORT DrawDRRectOp final : PaintOpWithFlags { 372 struct CC_PAINT_EXPORT DrawDRRectOp final : PaintOpWithFlags {
349 static constexpr PaintOpType kType = PaintOpType::DrawDRRect; 373 static constexpr PaintOpType kType = PaintOpType::DrawDRRect;
350 static constexpr bool kIsDrawOp = true; 374 static constexpr bool kIsDrawOp = true;
351 DrawDRRectOp(const SkRRect& outer, 375 DrawDRRectOp(const SkRRect& outer,
352 const SkRRect& inner, 376 const SkRRect& inner,
353 const PaintFlags& flags) 377 const PaintFlags& flags)
354 : PaintOpWithFlags(flags), outer(outer), inner(inner) {} 378 : PaintOpWithFlags(flags), outer(outer), inner(inner) {}
355 static void Raster(const PaintOp* op, 379 static void Raster(const PaintOp* op,
356 SkCanvas* canvas, 380 SkCanvas* canvas,
357 const SkMatrix& original_ctm); 381 const SkMatrix& original_ctm) {
382 auto* flags_op = static_cast<const PaintOpWithFlags*>(op);
383 RasterWithFlags(flags_op, &flags_op->flags, canvas, original_ctm);
384 }
385 static void RasterWithFlags(const PaintOpWithFlags* op,
386 const PaintFlags* flags,
387 SkCanvas* canvas,
388 const SkMatrix& original_ctm);
358 389
359 SkRRect outer; 390 SkRRect outer;
360 SkRRect inner; 391 SkRRect inner;
361 }; 392 };
362 393
363 struct CC_PAINT_EXPORT DrawImageOp final : PaintOpWithFlags { 394 struct CC_PAINT_EXPORT DrawImageOp final : PaintOpWithFlags {
364 static constexpr PaintOpType kType = PaintOpType::DrawImage; 395 static constexpr PaintOpType kType = PaintOpType::DrawImage;
365 static constexpr bool kIsDrawOp = true; 396 static constexpr bool kIsDrawOp = true;
366 DrawImageOp(const PaintImage& image, 397 DrawImageOp(const PaintImage& image,
367 SkScalar left, 398 SkScalar left,
368 SkScalar top, 399 SkScalar top,
369 const PaintFlags* flags); 400 const PaintFlags* flags);
370 ~DrawImageOp(); 401 ~DrawImageOp();
371 static void Raster(const PaintOp* op, 402 static void Raster(const PaintOp* op,
372 SkCanvas* canvas, 403 SkCanvas* canvas,
373 const SkMatrix& original_ctm); 404 const SkMatrix& original_ctm) {
405 auto* flags_op = static_cast<const PaintOpWithFlags*>(op);
406 RasterWithFlags(flags_op, &flags_op->flags, canvas, original_ctm);
407 }
408 static void RasterWithFlags(const PaintOpWithFlags* op,
409 const PaintFlags* flags,
410 SkCanvas* canvas,
411 const SkMatrix& original_ctm);
374 412
375 PaintImage image; 413 PaintImage image;
376 SkScalar left; 414 SkScalar left;
377 SkScalar top; 415 SkScalar top;
378 }; 416 };
379 417
380 struct CC_PAINT_EXPORT DrawImageRectOp final : PaintOpWithFlags { 418 struct CC_PAINT_EXPORT DrawImageRectOp final : PaintOpWithFlags {
381 static constexpr PaintOpType kType = PaintOpType::DrawImageRect; 419 static constexpr PaintOpType kType = PaintOpType::DrawImageRect;
382 static constexpr bool kIsDrawOp = true; 420 static constexpr bool kIsDrawOp = true;
383 DrawImageRectOp(const PaintImage& image, 421 DrawImageRectOp(const PaintImage& image,
384 const SkRect& src, 422 const SkRect& src,
385 const SkRect& dst, 423 const SkRect& dst,
386 const PaintFlags* flags, 424 const PaintFlags* flags,
387 PaintCanvas::SrcRectConstraint constraint); 425 PaintCanvas::SrcRectConstraint constraint);
388 ~DrawImageRectOp(); 426 ~DrawImageRectOp();
389 static void Raster(const PaintOp* op, 427 static void Raster(const PaintOp* op,
390 SkCanvas* canvas, 428 SkCanvas* canvas,
391 const SkMatrix& original_ctm); 429 const SkMatrix& original_ctm) {
430 auto* flags_op = static_cast<const PaintOpWithFlags*>(op);
431 RasterWithFlags(flags_op, &flags_op->flags, canvas, original_ctm);
432 }
433 static void RasterWithFlags(const PaintOpWithFlags* op,
434 const PaintFlags* flags,
435 SkCanvas* canvas,
436 const SkMatrix& original_ctm);
392 437
393 PaintImage image; 438 PaintImage image;
394 SkRect src; 439 SkRect src;
395 SkRect dst; 440 SkRect dst;
396 PaintCanvas::SrcRectConstraint constraint; 441 PaintCanvas::SrcRectConstraint constraint;
397 }; 442 };
398 443
399 struct CC_PAINT_EXPORT DrawIRectOp final : PaintOpWithFlags { 444 struct CC_PAINT_EXPORT DrawIRectOp final : PaintOpWithFlags {
400 static constexpr PaintOpType kType = PaintOpType::DrawIRect; 445 static constexpr PaintOpType kType = PaintOpType::DrawIRect;
401 static constexpr bool kIsDrawOp = true; 446 static constexpr bool kIsDrawOp = true;
402 DrawIRectOp(const SkIRect& rect, const PaintFlags& flags) 447 DrawIRectOp(const SkIRect& rect, const PaintFlags& flags)
403 : PaintOpWithFlags(flags), rect(rect) {} 448 : PaintOpWithFlags(flags), rect(rect) {}
404 static void Raster(const PaintOp* op, 449 static void Raster(const PaintOp* op,
405 SkCanvas* canvas, 450 SkCanvas* canvas,
406 const SkMatrix& original_ctm); 451 const SkMatrix& original_ctm) {
452 auto* flags_op = static_cast<const PaintOpWithFlags*>(op);
453 RasterWithFlags(flags_op, &flags_op->flags, canvas, original_ctm);
454 }
455 static void RasterWithFlags(const PaintOpWithFlags* op,
456 const PaintFlags* flags,
457 SkCanvas* canvas,
458 const SkMatrix& original_ctm);
407 459
408 SkIRect rect; 460 SkIRect rect;
409 }; 461 };
410 462
411 struct CC_PAINT_EXPORT DrawLineOp final : PaintOpWithFlags { 463 struct CC_PAINT_EXPORT DrawLineOp final : PaintOpWithFlags {
412 static constexpr PaintOpType kType = PaintOpType::DrawLine; 464 static constexpr PaintOpType kType = PaintOpType::DrawLine;
413 static constexpr bool kIsDrawOp = true; 465 static constexpr bool kIsDrawOp = true;
414 DrawLineOp(SkScalar x0, 466 DrawLineOp(SkScalar x0,
415 SkScalar y0, 467 SkScalar y0,
416 SkScalar x1, 468 SkScalar x1,
417 SkScalar y1, 469 SkScalar y1,
418 const PaintFlags& flags) 470 const PaintFlags& flags)
419 : PaintOpWithFlags(flags), x0(x0), y0(y0), x1(x1), y1(y1) {} 471 : PaintOpWithFlags(flags), x0(x0), y0(y0), x1(x1), y1(y1) {}
420 static void Raster(const PaintOp* op, 472 static void Raster(const PaintOp* op,
421 SkCanvas* canvas, 473 SkCanvas* canvas,
422 const SkMatrix& original_ctm); 474 const SkMatrix& original_ctm) {
475 auto* flags_op = static_cast<const PaintOpWithFlags*>(op);
476 RasterWithFlags(flags_op, &flags_op->flags, canvas, original_ctm);
477 }
478 static void RasterWithFlags(const PaintOpWithFlags* op,
479 const PaintFlags* flags,
480 SkCanvas* canvas,
481 const SkMatrix& original_ctm);
482
423 int CountSlowPaths() const; 483 int CountSlowPaths() const;
424 484
425 SkScalar x0; 485 SkScalar x0;
426 SkScalar y0; 486 SkScalar y0;
427 SkScalar x1; 487 SkScalar x1;
428 SkScalar y1; 488 SkScalar y1;
429 }; 489 };
430 490
431 struct CC_PAINT_EXPORT DrawOvalOp final : PaintOpWithFlags { 491 struct CC_PAINT_EXPORT DrawOvalOp final : PaintOpWithFlags {
432 static constexpr PaintOpType kType = PaintOpType::DrawOval; 492 static constexpr PaintOpType kType = PaintOpType::DrawOval;
433 static constexpr bool kIsDrawOp = true; 493 static constexpr bool kIsDrawOp = true;
434 DrawOvalOp(const SkRect& oval, const PaintFlags& flags) 494 DrawOvalOp(const SkRect& oval, const PaintFlags& flags)
435 : PaintOpWithFlags(flags), oval(oval) {} 495 : PaintOpWithFlags(flags), oval(oval) {}
436 static void Raster(const PaintOp* op, 496 static void Raster(const PaintOp* op,
437 SkCanvas* canvas, 497 SkCanvas* canvas,
438 const SkMatrix& original_ctm); 498 const SkMatrix& original_ctm) {
499 auto* flags_op = static_cast<const PaintOpWithFlags*>(op);
500 RasterWithFlags(flags_op, &flags_op->flags, canvas, original_ctm);
501 }
502 static void RasterWithFlags(const PaintOpWithFlags* op,
503 const PaintFlags* flags,
504 SkCanvas* canvas,
505 const SkMatrix& original_ctm);
439 506
440 SkRect oval; 507 SkRect oval;
441 }; 508 };
442 509
443 struct CC_PAINT_EXPORT DrawPathOp final : PaintOpWithFlags { 510 struct CC_PAINT_EXPORT DrawPathOp final : PaintOpWithFlags {
444 static constexpr PaintOpType kType = PaintOpType::DrawPath; 511 static constexpr PaintOpType kType = PaintOpType::DrawPath;
445 static constexpr bool kIsDrawOp = true; 512 static constexpr bool kIsDrawOp = true;
446 DrawPathOp(const SkPath& path, const PaintFlags& flags) 513 DrawPathOp(const SkPath& path, const PaintFlags& flags)
447 : PaintOpWithFlags(flags), path(path) {} 514 : PaintOpWithFlags(flags), path(path) {}
448 static void Raster(const PaintOp* op, 515 static void Raster(const PaintOp* op,
449 SkCanvas* canvas, 516 SkCanvas* canvas,
450 const SkMatrix& original_ctm); 517 const SkMatrix& original_ctm) {
518 auto* flags_op = static_cast<const PaintOpWithFlags*>(op);
519 RasterWithFlags(flags_op, &flags_op->flags, canvas, original_ctm);
520 }
521 static void RasterWithFlags(const PaintOpWithFlags* op,
522 const PaintFlags* flags,
523 SkCanvas* canvas,
524 const SkMatrix& original_ctm);
451 int CountSlowPaths() const; 525 int CountSlowPaths() const;
452 526
453 ThreadsafePath path; 527 ThreadsafePath path;
454 }; 528 };
455 529
456 struct CC_PAINT_EXPORT DrawPosTextOp final : PaintOpWithArray<SkPoint> { 530 struct CC_PAINT_EXPORT DrawPosTextOp final : PaintOpWithArray<SkPoint> {
457 static constexpr PaintOpType kType = PaintOpType::DrawPosText; 531 static constexpr PaintOpType kType = PaintOpType::DrawPosText;
458 static constexpr bool kIsDrawOp = true; 532 static constexpr bool kIsDrawOp = true;
459 DrawPosTextOp(size_t bytes, size_t count, const PaintFlags& flags); 533 DrawPosTextOp(size_t bytes, size_t count, const PaintFlags& flags);
460 ~DrawPosTextOp(); 534 ~DrawPosTextOp();
461 static void Raster(const PaintOp* op, 535 static void Raster(const PaintOp* op,
462 SkCanvas* canvas, 536 SkCanvas* canvas,
463 const SkMatrix& original_ctm); 537 const SkMatrix& original_ctm) {
538 auto* flags_op = static_cast<const PaintOpWithFlags*>(op);
539 RasterWithFlags(flags_op, &flags_op->flags, canvas, original_ctm);
540 }
541 static void RasterWithFlags(const PaintOpWithFlags* op,
542 const PaintFlags* flags,
543 SkCanvas* canvas,
544 const SkMatrix& original_ctm);
545
464 const void* GetData() const { return GetDataForThis(this); } 546 const void* GetData() const { return GetDataForThis(this); }
465 void* GetData() { return GetDataForThis(this); } 547 void* GetData() { return GetDataForThis(this); }
466 const SkPoint* GetArray() const { return GetArrayForThis(this); } 548 const SkPoint* GetArray() const { return GetArrayForThis(this); }
467 SkPoint* GetArray() { return GetArrayForThis(this); } 549 SkPoint* GetArray() { return GetArrayForThis(this); }
468 }; 550 };
469 551
470 struct CC_PAINT_EXPORT DrawRecordOp final : PaintOp { 552 struct CC_PAINT_EXPORT DrawRecordOp final : PaintOp {
471 static constexpr PaintOpType kType = PaintOpType::DrawRecord; 553 static constexpr PaintOpType kType = PaintOpType::DrawRecord;
472 static constexpr bool kIsDrawOp = true; 554 static constexpr bool kIsDrawOp = true;
473 explicit DrawRecordOp(sk_sp<const PaintRecord> record); 555 explicit DrawRecordOp(sk_sp<const PaintRecord> record);
474 ~DrawRecordOp(); 556 ~DrawRecordOp();
475 static void Raster(const PaintOp* op, 557 static void Raster(const PaintOp* op,
476 SkCanvas* canvas, 558 SkCanvas* canvas,
477 const SkMatrix& original_ctm); 559 const SkMatrix& original_ctm);
478 size_t AdditionalBytesUsed() const; 560 size_t AdditionalBytesUsed() const;
479 561
480 sk_sp<const PaintRecord> record; 562 sk_sp<const PaintRecord> record;
481 }; 563 };
482 564
483 struct CC_PAINT_EXPORT DrawRectOp final : PaintOpWithFlags { 565 struct CC_PAINT_EXPORT DrawRectOp final : PaintOpWithFlags {
484 static constexpr PaintOpType kType = PaintOpType::DrawRect; 566 static constexpr PaintOpType kType = PaintOpType::DrawRect;
485 static constexpr bool kIsDrawOp = true; 567 static constexpr bool kIsDrawOp = true;
486 DrawRectOp(const SkRect& rect, const PaintFlags& flags) 568 DrawRectOp(const SkRect& rect, const PaintFlags& flags)
487 : PaintOpWithFlags(flags), rect(rect) {} 569 : PaintOpWithFlags(flags), rect(rect) {}
488 static void Raster(const PaintOp* op, 570 static void Raster(const PaintOp* op,
489 SkCanvas* canvas, 571 SkCanvas* canvas,
490 const SkMatrix& original_ctm); 572 const SkMatrix& original_ctm) {
573 auto* flags_op = static_cast<const PaintOpWithFlags*>(op);
574 RasterWithFlags(flags_op, &flags_op->flags, canvas, original_ctm);
575 }
576 static void RasterWithFlags(const PaintOpWithFlags* op,
577 const PaintFlags* flags,
578 SkCanvas* canvas,
579 const SkMatrix& original_ctm);
491 580
492 SkRect rect; 581 SkRect rect;
493 }; 582 };
494 583
495 struct CC_PAINT_EXPORT DrawRRectOp final : PaintOpWithFlags { 584 struct CC_PAINT_EXPORT DrawRRectOp final : PaintOpWithFlags {
496 static constexpr PaintOpType kType = PaintOpType::DrawRRect; 585 static constexpr PaintOpType kType = PaintOpType::DrawRRect;
497 static constexpr bool kIsDrawOp = true; 586 static constexpr bool kIsDrawOp = true;
498 DrawRRectOp(const SkRRect& rrect, const PaintFlags& flags) 587 DrawRRectOp(const SkRRect& rrect, const PaintFlags& flags)
499 : PaintOpWithFlags(flags), rrect(rrect) {} 588 : PaintOpWithFlags(flags), rrect(rrect) {}
500 static void Raster(const PaintOp* op, 589 static void Raster(const PaintOp* op,
501 SkCanvas* canvas, 590 SkCanvas* canvas,
502 const SkMatrix& original_ctm); 591 const SkMatrix& original_ctm) {
592 auto* flags_op = static_cast<const PaintOpWithFlags*>(op);
593 RasterWithFlags(flags_op, &flags_op->flags, canvas, original_ctm);
594 }
595 static void RasterWithFlags(const PaintOpWithFlags* op,
596 const PaintFlags* flags,
597 SkCanvas* canvas,
598 const SkMatrix& original_ctm);
503 599
504 SkRRect rrect; 600 SkRRect rrect;
505 }; 601 };
506 602
507 struct CC_PAINT_EXPORT DrawTextOp final : PaintOpWithData { 603 struct CC_PAINT_EXPORT DrawTextOp final : PaintOpWithData {
508 static constexpr PaintOpType kType = PaintOpType::DrawText; 604 static constexpr PaintOpType kType = PaintOpType::DrawText;
509 static constexpr bool kIsDrawOp = true; 605 static constexpr bool kIsDrawOp = true;
510 DrawTextOp(size_t bytes, SkScalar x, SkScalar y, const PaintFlags& flags) 606 DrawTextOp(size_t bytes, SkScalar x, SkScalar y, const PaintFlags& flags)
511 : PaintOpWithData(flags, bytes), x(x), y(y) {} 607 : PaintOpWithData(flags, bytes), x(x), y(y) {}
512 static void Raster(const PaintOp* op, 608 static void Raster(const PaintOp* op,
513 SkCanvas* canvas, 609 SkCanvas* canvas,
514 const SkMatrix& original_ctm); 610 const SkMatrix& original_ctm) {
611 auto* flags_op = static_cast<const PaintOpWithFlags*>(op);
612 RasterWithFlags(flags_op, &flags_op->flags, canvas, original_ctm);
613 }
614 static void RasterWithFlags(const PaintOpWithFlags* op,
615 const PaintFlags* flags,
616 SkCanvas* canvas,
617 const SkMatrix& original_ctm);
515 618
516 void* GetData() { return GetDataForThis(this); } 619 void* GetData() { return GetDataForThis(this); }
517 const void* GetData() const { return GetDataForThis(this); } 620 const void* GetData() const { return GetDataForThis(this); }
518 621
519 SkScalar x; 622 SkScalar x;
520 SkScalar y; 623 SkScalar y;
521 }; 624 };
522 625
523 struct CC_PAINT_EXPORT DrawTextBlobOp final : PaintOpWithFlags { 626 struct CC_PAINT_EXPORT DrawTextBlobOp final : PaintOpWithFlags {
524 static constexpr PaintOpType kType = PaintOpType::DrawTextBlob; 627 static constexpr PaintOpType kType = PaintOpType::DrawTextBlob;
525 static constexpr bool kIsDrawOp = true; 628 static constexpr bool kIsDrawOp = true;
526 DrawTextBlobOp(sk_sp<SkTextBlob> blob, 629 DrawTextBlobOp(sk_sp<SkTextBlob> blob,
527 SkScalar x, 630 SkScalar x,
528 SkScalar y, 631 SkScalar y,
529 const PaintFlags& flags); 632 const PaintFlags& flags);
530 ~DrawTextBlobOp(); 633 ~DrawTextBlobOp();
531 static void Raster(const PaintOp* op, 634 static void Raster(const PaintOp* op,
532 SkCanvas* canvas, 635 SkCanvas* canvas,
533 const SkMatrix& original_ctm); 636 const SkMatrix& original_ctm) {
637 auto* flags_op = static_cast<const PaintOpWithFlags*>(op);
638 RasterWithFlags(flags_op, &flags_op->flags, canvas, original_ctm);
639 }
640 static void RasterWithFlags(const PaintOpWithFlags* op,
641 const PaintFlags* flags,
642 SkCanvas* canvas,
643 const SkMatrix& original_ctm);
534 644
535 sk_sp<SkTextBlob> blob; 645 sk_sp<SkTextBlob> blob;
536 SkScalar x; 646 SkScalar x;
537 SkScalar y; 647 SkScalar y;
538 }; 648 };
539 649
540 struct CC_PAINT_EXPORT NoopOp final : PaintOp { 650 struct CC_PAINT_EXPORT NoopOp final : PaintOp {
541 static constexpr PaintOpType kType = PaintOpType::Noop; 651 static constexpr PaintOpType kType = PaintOpType::Noop;
542 static void Raster(const PaintOp* op, 652 static void Raster(const PaintOp* op,
543 SkCanvas* canvas, 653 SkCanvas* canvas,
(...skipping 24 matching lines...) Expand all
568 const SkMatrix& original_ctm); 678 const SkMatrix& original_ctm);
569 }; 679 };
570 680
571 struct CC_PAINT_EXPORT SaveLayerOp final : PaintOpWithFlags { 681 struct CC_PAINT_EXPORT SaveLayerOp final : PaintOpWithFlags {
572 static constexpr PaintOpType kType = PaintOpType::SaveLayer; 682 static constexpr PaintOpType kType = PaintOpType::SaveLayer;
573 SaveLayerOp(const SkRect* bounds, const PaintFlags* flags) 683 SaveLayerOp(const SkRect* bounds, const PaintFlags* flags)
574 : PaintOpWithFlags(flags ? *flags : PaintFlags()), 684 : PaintOpWithFlags(flags ? *flags : PaintFlags()),
575 bounds(bounds ? *bounds : kUnsetRect) {} 685 bounds(bounds ? *bounds : kUnsetRect) {}
576 static void Raster(const PaintOp* op, 686 static void Raster(const PaintOp* op,
577 SkCanvas* canvas, 687 SkCanvas* canvas,
578 const SkMatrix& original_ctm); 688 const SkMatrix& original_ctm) {
689 auto* flags_op = static_cast<const PaintOpWithFlags*>(op);
690 RasterWithFlags(flags_op, &flags_op->flags, canvas, original_ctm);
691 }
692 static void RasterWithFlags(const PaintOpWithFlags* op,
693 const PaintFlags* flags,
694 SkCanvas* canvas,
695 const SkMatrix& original_ctm);
579 696
580 SkRect bounds; 697 SkRect bounds;
581 }; 698 };
582 699
583 struct CC_PAINT_EXPORT SaveLayerAlphaOp final : PaintOp { 700 struct CC_PAINT_EXPORT SaveLayerAlphaOp final : PaintOp {
584 static constexpr PaintOpType kType = PaintOpType::SaveLayerAlpha; 701 static constexpr PaintOpType kType = PaintOpType::SaveLayerAlpha;
585 SaveLayerAlphaOp(const SkRect* bounds, uint8_t alpha) 702 SaveLayerAlphaOp(const SkRect* bounds, uint8_t alpha)
586 : bounds(bounds ? *bounds : kUnsetRect), alpha(alpha) {} 703 : bounds(bounds ? *bounds : kUnsetRect), alpha(alpha) {}
587 static void Raster(const PaintOp* op, 704 static void Raster(const PaintOp* op,
588 SkCanvas* canvas, 705 SkCanvas* canvas,
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
832 // Record additional bytes used by referenced sub-records and display lists. 949 // Record additional bytes used by referenced sub-records and display lists.
833 size_t subrecord_bytes_used_ = 0; 950 size_t subrecord_bytes_used_ = 0;
834 SkRect cull_rect_; 951 SkRect cull_rect_;
835 952
836 DISALLOW_COPY_AND_ASSIGN(PaintOpBuffer); 953 DISALLOW_COPY_AND_ASSIGN(PaintOpBuffer);
837 }; 954 };
838 955
839 } // namespace cc 956 } // namespace cc
840 957
841 #endif // CC_PAINT_PAINT_OP_BUFFER_H_ 958 #endif // CC_PAINT_PAINT_OP_BUFFER_H_
OLDNEW
« no previous file with comments | « no previous file | cc/paint/paint_op_buffer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698