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

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

Issue 677463002: Set temporary paths volatile so we don't cache them. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 2 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 "effects/GrBicubicEffect.h" 10 #include "effects/GrBicubicEffect.h"
(...skipping 688 matching lines...) Expand 10 before | Expand all | Expand 10 after
699 // its parameter type is const). 699 // its parameter type is const).
700 SkPath* pathPtr = const_cast<SkPath*>(&origSrcPath); 700 SkPath* pathPtr = const_cast<SkPath*>(&origSrcPath);
701 SkTLazy<SkPath> tmpPath; 701 SkTLazy<SkPath> tmpPath;
702 SkTLazy<SkPath> effectPath; 702 SkTLazy<SkPath> effectPath;
703 703
704 if (prePathMatrix) { 704 if (prePathMatrix) {
705 SkPath* result = pathPtr; 705 SkPath* result = pathPtr;
706 706
707 if (!pathIsMutable) { 707 if (!pathIsMutable) {
708 result = tmpPath.init(); 708 result = tmpPath.init();
709 result->setIsVolatile(true);
709 pathIsMutable = true; 710 pathIsMutable = true;
710 } 711 }
711 // should I push prePathMatrix on our MV stack temporarily, instead 712 // should I push prePathMatrix on our MV stack temporarily, instead
712 // of applying it here? See SkDraw.cpp 713 // of applying it here? See SkDraw.cpp
bsalomon 2014/10/23 17:54:09 Seems like we should do this instead of making a n
jvanverth1 2014/10/23 20:06:18 Filed as Issue 3055.
713 pathPtr->transform(*prePathMatrix, result); 714 pathPtr->transform(*prePathMatrix, result);
714 pathPtr = result; 715 pathPtr = result;
715 } 716 }
716 // at this point we're done with prePathMatrix 717 // at this point we're done with prePathMatrix
717 SkDEBUGCODE(prePathMatrix = (const SkMatrix*)0x50FF8001;) 718 SkDEBUGCODE(prePathMatrix = (const SkMatrix*)0x50FF8001;)
718 719
719 GrStrokeInfo strokeInfo(paint); 720 GrStrokeInfo strokeInfo(paint);
720 SkPathEffect* pathEffect = paint.getPathEffect(); 721 SkPathEffect* pathEffect = paint.getPathEffect();
721 const SkRect* cullRect = NULL; // TODO: what is our bounds? 722 const SkRect* cullRect = NULL; // TODO: what is our bounds?
722 SkStrokeRec* strokePtr = strokeInfo.getStrokeRecPtr(); 723 SkStrokeRec* strokePtr = strokeInfo.getStrokeRecPtr();
(...skipping 10 matching lines...) Expand all
733 SkPath* strokedPath = pathIsMutable ? pathPtr : tmpPath.init(); 734 SkPath* strokedPath = pathIsMutable ? pathPtr : tmpPath.init();
734 if (stroke.applyToPath(strokedPath, *pathPtr)) { 735 if (stroke.applyToPath(strokedPath, *pathPtr)) {
735 pathPtr = strokedPath; 736 pathPtr = strokedPath;
736 pathIsMutable = true; 737 pathIsMutable = true;
737 strokeInfo.setFillStyle(); 738 strokeInfo.setFillStyle();
738 } 739 }
739 } 740 }
740 741
741 // avoid possibly allocating a new path in transform if we can 742 // avoid possibly allocating a new path in transform if we can
742 SkPath* devPathPtr = pathIsMutable ? pathPtr : tmpPath.init(); 743 SkPath* devPathPtr = pathIsMutable ? pathPtr : tmpPath.init();
744 if (pathIsMutable) {
bsalomon 2014/10/23 17:54:09 Maybe we should avoid this early transformation to
jvanverth1 2014/10/23 20:06:18 Filed as Issue 3056
745 devPathPtr->setIsVolatile(true);
746 }
743 747
744 // transform the path into device space 748 // transform the path into device space
745 pathPtr->transform(fContext->getMatrix(), devPathPtr); 749 pathPtr->transform(fContext->getMatrix(), devPathPtr);
746 750
747 SkRect maskRect; 751 SkRect maskRect;
748 if (paint.getMaskFilter()->canFilterMaskGPU(devPathPtr->getBounds(), 752 if (paint.getMaskFilter()->canFilterMaskGPU(devPathPtr->getBounds(),
749 draw.fClip->getBounds(), 753 draw.fClip->getBounds(),
750 fContext->getMatrix(), 754 fContext->getMatrix(),
751 &maskRect)) { 755 &maskRect)) {
752 // The context's matrix may change while creating the mask, so save the CTM here to 756 // The context's matrix may change while creating the mask, so save the CTM here to
(...skipping 1071 matching lines...) Expand 10 before | Expand all | Expand 10 after
1824 GrLayerHoister::UnlockLayers(fContext, atlased, nonAtlased, recycled); 1828 GrLayerHoister::UnlockLayers(fContext, atlased, nonAtlased, recycled);
1825 1829
1826 return true; 1830 return true;
1827 } 1831 }
1828 1832
1829 SkImageFilter::Cache* SkGpuDevice::getImageFilterCache() { 1833 SkImageFilter::Cache* SkGpuDevice::getImageFilterCache() {
1830 // We always return a transient cache, so it is freed after each 1834 // We always return a transient cache, so it is freed after each
1831 // filter traversal. 1835 // filter traversal.
1832 return SkImageFilter::Cache::Create(kDefaultImageFilterCacheSize); 1836 return SkImageFilter::Cache::Create(kDefaultImageFilterCacheSize);
1833 } 1837 }
OLDNEW
« src/core/SkPath.cpp ('K') | « src/gpu/GrAADistanceFieldPathRenderer.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698