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

Side by Side Diff: src/gpu/SkGpuDevice.cpp

Issue 1744103002: move annotations to canvas virtual (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: update dumpcanvas Created 4 years, 9 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
OLDNEW
1 /* 1 /*
2 * Copyright 2011 Google Inc. 2 * Copyright 2011 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 #include "SkGpuDevice.h" 8 #include "SkGpuDevice.h"
9 9
10 #include "GrBlurUtils.h" 10 #include "GrBlurUtils.h"
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 do { \ 62 do { \
63 if (gShouldDrawProc && !gShouldDrawProc()) return; \ 63 if (gShouldDrawProc && !gShouldDrawProc()) return; \
64 this->prepareDraw(draw); \ 64 this->prepareDraw(draw); \
65 } while (0) 65 } while (0)
66 #else 66 #else
67 #define CHECK_SHOULD_DRAW(draw) this->prepareDraw(draw) 67 #define CHECK_SHOULD_DRAW(draw) this->prepareDraw(draw)
68 #endif 68 #endif
69 69
70 /////////////////////////////////////////////////////////////////////////////// 70 ///////////////////////////////////////////////////////////////////////////////
71 71
72 #define CHECK_FOR_ANNOTATION(paint) \
73 do { if (paint.getAnnotation()) { return; } } while (0)
74
75 ///////////////////////////////////////////////////////////////////////////////
76
77 // Helper for turning a bitmap into a texture. If the bitmap is GrTexture backed this 72 // Helper for turning a bitmap into a texture. If the bitmap is GrTexture backed this
78 // just accesses the backing GrTexture. Otherwise, it creates a cached texture 73 // just accesses the backing GrTexture. Otherwise, it creates a cached texture
79 // representation and releases it in the destructor. 74 // representation and releases it in the destructor.
80 class AutoBitmapTexture : public SkNoncopyable { 75 class AutoBitmapTexture : public SkNoncopyable {
81 public: 76 public:
82 AutoBitmapTexture() {} 77 AutoBitmapTexture() {}
83 78
84 AutoBitmapTexture(GrContext* context, 79 AutoBitmapTexture(GrContext* context,
85 const SkBitmap& bitmap, 80 const SkBitmap& bitmap,
86 const GrTextureParams& params, 81 const GrTextureParams& params,
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 return ((int) pts[0].fY) != pts[0].fY; 390 return ((int) pts[0].fY) != pts[0].fY;
396 } 391 }
397 } 392 }
398 return true; 393 return true;
399 } 394 }
400 395
401 void SkGpuDevice::drawPoints(const SkDraw& draw, SkCanvas::PointMode mode, 396 void SkGpuDevice::drawPoints(const SkDraw& draw, SkCanvas::PointMode mode,
402 size_t count, const SkPoint pts[], const SkPaint& p aint) { 397 size_t count, const SkPoint pts[], const SkPaint& p aint) {
403 ASSERT_SINGLE_OWNER 398 ASSERT_SINGLE_OWNER
404 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawPoints", fContext); 399 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawPoints", fContext);
405 CHECK_FOR_ANNOTATION(paint);
406 CHECK_SHOULD_DRAW(draw); 400 CHECK_SHOULD_DRAW(draw);
407 401
408 SkScalar width = paint.getStrokeWidth(); 402 SkScalar width = paint.getStrokeWidth();
409 if (width < 0) { 403 if (width < 0) {
410 return; 404 return;
411 } 405 }
412 406
413 if (paint.getPathEffect() && 2 == count && SkCanvas::kLines_PointMode == mod e) { 407 if (paint.getPathEffect() && 2 == count && SkCanvas::kLines_PointMode == mod e) {
414 GrStrokeInfo strokeInfo(paint, SkPaint::kStroke_Style); 408 GrStrokeInfo strokeInfo(paint, SkPaint::kStroke_Style);
415 GrPaint grPaint; 409 GrPaint grPaint;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
447 nullptr, 441 nullptr,
448 nullptr, 442 nullptr,
449 0); 443 0);
450 } 444 }
451 445
452 /////////////////////////////////////////////////////////////////////////////// 446 ///////////////////////////////////////////////////////////////////////////////
453 447
454 void SkGpuDevice::drawRect(const SkDraw& draw, const SkRect& rect, const SkPaint & paint) { 448 void SkGpuDevice::drawRect(const SkDraw& draw, const SkRect& rect, const SkPaint & paint) {
455 ASSERT_SINGLE_OWNER 449 ASSERT_SINGLE_OWNER
456 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawRect", fContext); 450 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawRect", fContext);
457 CHECK_FOR_ANNOTATION(paint);
458 CHECK_SHOULD_DRAW(draw); 451 CHECK_SHOULD_DRAW(draw);
459 452
460 bool doStroke = paint.getStyle() != SkPaint::kFill_Style; 453 bool doStroke = paint.getStyle() != SkPaint::kFill_Style;
461 SkScalar width = paint.getStrokeWidth(); 454 SkScalar width = paint.getStrokeWidth();
462 455
463 /* 456 /*
464 We have special code for hairline strokes, miter-strokes, bevel-stroke 457 We have special code for hairline strokes, miter-strokes, bevel-stroke
465 and fills. Anything else we just call our path code. 458 and fills. Anything else we just call our path code.
466 */ 459 */
467 bool usePath = doStroke && width > 0 && 460 bool usePath = doStroke && width > 0 &&
(...skipping 26 matching lines...) Expand all
494 487
495 fDrawContext->drawRect(fClip, grPaint, *draw.fMatrix, rect, &strokeInfo); 488 fDrawContext->drawRect(fClip, grPaint, *draw.fMatrix, rect, &strokeInfo);
496 } 489 }
497 490
498 /////////////////////////////////////////////////////////////////////////////// 491 ///////////////////////////////////////////////////////////////////////////////
499 492
500 void SkGpuDevice::drawRRect(const SkDraw& draw, const SkRRect& rect, 493 void SkGpuDevice::drawRRect(const SkDraw& draw, const SkRRect& rect,
501 const SkPaint& paint) { 494 const SkPaint& paint) {
502 ASSERT_SINGLE_OWNER 495 ASSERT_SINGLE_OWNER
503 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawRRect", fContext); 496 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawRRect", fContext);
504 CHECK_FOR_ANNOTATION(paint);
505 CHECK_SHOULD_DRAW(draw); 497 CHECK_SHOULD_DRAW(draw);
506 498
507 GrPaint grPaint; 499 GrPaint grPaint;
508 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, &grPaint)) { 500 if (!SkPaintToGrPaint(this->context(), paint, *draw.fMatrix, &grPaint)) {
509 return; 501 return;
510 } 502 }
511 503
512 GrStrokeInfo strokeInfo(paint); 504 GrStrokeInfo strokeInfo(paint);
513 if (paint.getMaskFilter()) { 505 if (paint.getMaskFilter()) {
514 // try to hit the fast path for drawing filtered round rects 506 // try to hit the fast path for drawing filtered round rects
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
618 610
619 fDrawContext->fillRectWithLocalMatrix(fClip, grPaint, SkMatrix::I(), bounds, inverseVM); 611 fDrawContext->fillRectWithLocalMatrix(fClip, grPaint, SkMatrix::I(), bounds, inverseVM);
620 return true; 612 return true;
621 } 613 }
622 614
623 615
624 void SkGpuDevice::drawDRRect(const SkDraw& draw, const SkRRect& outer, 616 void SkGpuDevice::drawDRRect(const SkDraw& draw, const SkRRect& outer,
625 const SkRRect& inner, const SkPaint& paint) { 617 const SkRRect& inner, const SkPaint& paint) {
626 ASSERT_SINGLE_OWNER 618 ASSERT_SINGLE_OWNER
627 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawDRRect", fContext); 619 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawDRRect", fContext);
628 CHECK_FOR_ANNOTATION(paint);
629 CHECK_SHOULD_DRAW(draw); 620 CHECK_SHOULD_DRAW(draw);
630 621
631 if (outer.isEmpty()) { 622 if (outer.isEmpty()) {
632 return; 623 return;
633 } 624 }
634 625
635 if (inner.isEmpty()) { 626 if (inner.isEmpty()) {
636 return this->drawRRect(draw, outer, paint); 627 return this->drawRRect(draw, outer, paint);
637 } 628 }
638 629
(...skipping 16 matching lines...) Expand all
655 *draw.fMatrix, nullptr, 646 *draw.fMatrix, nullptr,
656 draw.fClip->getBounds(), true); 647 draw.fClip->getBounds(), true);
657 } 648 }
658 649
659 650
660 ///////////////////////////////////////////////////////////////////////////// 651 /////////////////////////////////////////////////////////////////////////////
661 652
662 void SkGpuDevice::drawOval(const SkDraw& draw, const SkRect& oval, const SkPaint & paint) { 653 void SkGpuDevice::drawOval(const SkDraw& draw, const SkRect& oval, const SkPaint & paint) {
663 ASSERT_SINGLE_OWNER 654 ASSERT_SINGLE_OWNER
664 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawOval", fContext); 655 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawOval", fContext);
665 CHECK_FOR_ANNOTATION(paint);
666 CHECK_SHOULD_DRAW(draw); 656 CHECK_SHOULD_DRAW(draw);
667 657
668 // Presumably the path effect warps this to something other than an oval 658 // Presumably the path effect warps this to something other than an oval
669 if (paint.getPathEffect()) { 659 if (paint.getPathEffect()) {
670 SkPath path; 660 SkPath path;
671 path.setIsVolatile(true); 661 path.setIsVolatile(true);
672 path.addOval(oval); 662 path.addOval(oval);
673 this->drawPath(draw, path, paint, nullptr, true); 663 this->drawPath(draw, path, paint, nullptr, true);
674 return; 664 return;
675 } 665 }
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
710 this->drawOval(draw, rect, paint); 700 this->drawOval(draw, rect, paint);
711 return; 701 return;
712 } 702 }
713 SkRRect rrect; 703 SkRRect rrect;
714 if (origSrcPath.isRRect(&rrect)) { 704 if (origSrcPath.isRRect(&rrect)) {
715 this->drawRRect(draw, rrect, paint); 705 this->drawRRect(draw, rrect, paint);
716 return; 706 return;
717 } 707 }
718 } 708 }
719 709
720 CHECK_FOR_ANNOTATION(paint);
721 CHECK_SHOULD_DRAW(draw); 710 CHECK_SHOULD_DRAW(draw);
722 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawPath", fContext); 711 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawPath", fContext);
723 712
724 GrBlurUtils::drawPathWithMaskFilter(fContext, fDrawContext, 713 GrBlurUtils::drawPathWithMaskFilter(fContext, fDrawContext,
725 fClip, origSrcPath, paint, 714 fClip, origSrcPath, paint,
726 *draw.fMatrix, prePathMatrix, 715 *draw.fMatrix, prePathMatrix,
727 draw.fClip->getBounds(), pathIsMutable); 716 draw.fClip->getBounds(), pathIsMutable);
728 } 717 }
729 718
730 static const int kBmpSmallTileSize = 1 << 10; 719 static const int kBmpSmallTileSize = 1 << 10;
(...skipping 790 matching lines...) Expand 10 before | Expand all | Expand 10 after
1521 this->drawTextureProducer(&maker, src, &dst, constraint, *draw.fMatrix, fClip, paint); 1510 this->drawTextureProducer(&maker, src, &dst, constraint, *draw.fMatrix, fClip, paint);
1522 } else if (as_IB(image)->getROPixels(&bm)) { 1511 } else if (as_IB(image)->getROPixels(&bm)) {
1523 this->drawBitmapRect(draw, bm, src, dst, paint, constraint); 1512 this->drawBitmapRect(draw, bm, src, dst, paint, constraint);
1524 } 1513 }
1525 } 1514 }
1526 1515
1527 void SkGpuDevice::drawProducerNine(const SkDraw& draw, GrTextureProducer* produc er, 1516 void SkGpuDevice::drawProducerNine(const SkDraw& draw, GrTextureProducer* produc er,
1528 const SkIRect& center, const SkRect& dst, con st SkPaint& paint) { 1517 const SkIRect& center, const SkRect& dst, con st SkPaint& paint) {
1529 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawProducerNine", fContext); 1518 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawProducerNine", fContext);
1530 1519
1531 CHECK_FOR_ANNOTATION(paint);
1532 CHECK_SHOULD_DRAW(draw); 1520 CHECK_SHOULD_DRAW(draw);
1533 1521
1534 bool useFallback = paint.getMaskFilter() || paint.isAntiAlias() || 1522 bool useFallback = paint.getMaskFilter() || paint.isAntiAlias() ||
1535 fRenderTarget->isUnifiedMultisampled(); 1523 fRenderTarget->isUnifiedMultisampled();
1536 bool doBicubic; 1524 bool doBicubic;
1537 GrTextureParams::FilterMode textureFilterMode = 1525 GrTextureParams::FilterMode textureFilterMode =
1538 GrSkFilterQualityToGrFilterMode(paint.getFilterQuality(), *draw.fMatrix, SkMatrix::I(), 1526 GrSkFilterQualityToGrFilterMode(paint.getFilterQuality(), *draw.fMatrix, SkMatrix::I(),
1539 &doBicubic); 1527 &doBicubic);
1540 if (useFallback || doBicubic || GrTextureParams::kNone_FilterMode != texture FilterMode) { 1528 if (useFallback || doBicubic || GrTextureParams::kNone_FilterMode != texture FilterMode) {
1541 SkNinePatchIter iter(producer->width(), producer->height(), center, dst) ; 1529 SkNinePatchIter iter(producer->width(), producer->height(), center, dst) ;
(...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after
1946 } 1934 }
1947 1935
1948 SkImageFilter::Cache* SkGpuDevice::getImageFilterCache() { 1936 SkImageFilter::Cache* SkGpuDevice::getImageFilterCache() {
1949 ASSERT_SINGLE_OWNER 1937 ASSERT_SINGLE_OWNER
1950 // We always return a transient cache, so it is freed after each 1938 // We always return a transient cache, so it is freed after each
1951 // filter traversal. 1939 // filter traversal.
1952 return SkGpuDevice::NewImageFilterCache(); 1940 return SkGpuDevice::NewImageFilterCache();
1953 } 1941 }
1954 1942
1955 #endif 1943 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698