Non-substantive changes
These changes are pulled out of:
https://skia-review.googlesource.com/c/skia/+/208227 (Implement alternate method for determining recycle-ability of allocated GrSurfaces)
Change-Id: I1126f0e0c149d07f5febb352c4e86a676960409f
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/209103
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
diff --git a/gm/tileimagefilter.cpp b/gm/tileimagefilter.cpp
index dd53151..c61b655 100644
--- a/gm/tileimagefilter.cpp
+++ b/gm/tileimagefilter.cpp
@@ -52,72 +52,80 @@
blue.setStyle(SkPaint::kStroke_Style);
int x = 0, y = 0;
- for (size_t i = 0; i < 4; i++) {
- sk_sp<SkImage> image = (i & 0x01) ? fCheckerboard : fBitmap;
- SkRect srcRect = SkRect::MakeXYWH(SkIntToScalar(image->width()/4),
- SkIntToScalar(image->height()/4),
- SkIntToScalar(image->width()/(i+1)),
- SkIntToScalar(image->height()/(i+1)));
- SkRect dstRect = SkRect::MakeXYWH(SkIntToScalar(i * 8),
- SkIntToScalar(i * 4),
- SkIntToScalar(image->width() - i * 12),
- SkIntToScalar(image->height()) - i * 12);
- sk_sp<SkImageFilter> tileInput(SkImageSource::Make(image));
- sk_sp<SkImageFilter> filter(SkTileImageFilter::Make(srcRect,
- dstRect,
- std::move(tileInput)));
- canvas->save();
- canvas->translate(SkIntToScalar(x), SkIntToScalar(y));
- SkPaint paint;
- paint.setImageFilter(std::move(filter));
- canvas->drawImage(fBitmap.get(), 0, 0, &paint);
- canvas->drawRect(srcRect, red);
- canvas->drawRect(dstRect, blue);
- canvas->restore();
- x += image->width() + MARGIN;
- if (x + image->width() > WIDTH) {
- x = 0;
- y += image->height() + MARGIN;
+
+ {
+ for (size_t i = 0; i < 4; i++) {
+ sk_sp<SkImage> image = (i & 0x01) ? fCheckerboard : fBitmap;
+ SkRect srcRect = SkRect::MakeXYWH(SkIntToScalar(image->width()/4),
+ SkIntToScalar(image->height()/4),
+ SkIntToScalar(image->width()/(i+1)),
+ SkIntToScalar(image->height()/(i+1)));
+ SkRect dstRect = SkRect::MakeXYWH(SkIntToScalar(i * 8),
+ SkIntToScalar(i * 4),
+ SkIntToScalar(image->width() - i * 12),
+ SkIntToScalar(image->height()) - i * 12);
+ sk_sp<SkImageFilter> tileInput(SkImageSource::Make(image));
+ sk_sp<SkImageFilter> filter(SkTileImageFilter::Make(srcRect,
+ dstRect,
+ std::move(tileInput)));
+ canvas->save();
+ canvas->translate(SkIntToScalar(x), SkIntToScalar(y));
+ SkPaint paint;
+ paint.setImageFilter(std::move(filter));
+ canvas->drawImage(fBitmap.get(), 0, 0, &paint);
+ canvas->drawRect(srcRect, red);
+ canvas->drawRect(dstRect, blue);
+ canvas->restore();
+ x += image->width() + MARGIN;
+ if (x + image->width() > WIDTH) {
+ x = 0;
+ y += image->height() + MARGIN;
+ }
}
}
- SkScalar matrix[20] = { SK_Scalar1, 0, 0, 0, 0,
- 0, SK_Scalar1, 0, 0, 0,
- 0, 0, SK_Scalar1, 0, 0,
- 0, 0, 0, SK_Scalar1, 0 };
+ {
+ SkScalar matrix[20] = { SK_Scalar1, 0, 0, 0, 0,
+ 0, SK_Scalar1, 0, 0, 0,
+ 0, 0, SK_Scalar1, 0, 0,
+ 0, 0, 0, SK_Scalar1, 0 };
- SkRect srcRect = SkRect::MakeWH(SkIntToScalar(fBitmap->width()),
- SkIntToScalar(fBitmap->height()));
- SkRect dstRect = SkRect::MakeWH(SkIntToScalar(fBitmap->width() * 2),
- SkIntToScalar(fBitmap->height() * 2));
- sk_sp<SkImageFilter> tile(SkTileImageFilter::Make(srcRect, dstRect, nullptr));
- sk_sp<SkColorFilter> cf(SkColorFilters::MatrixRowMajor255(matrix));
+ SkRect srcRect = SkRect::MakeWH(SkIntToScalar(fBitmap->width()),
+ SkIntToScalar(fBitmap->height()));
+ SkRect dstRect = SkRect::MakeWH(SkIntToScalar(fBitmap->width() * 2),
+ SkIntToScalar(fBitmap->height() * 2));
+ sk_sp<SkImageFilter> tile(SkTileImageFilter::Make(srcRect, dstRect, nullptr));
+ sk_sp<SkColorFilter> cf(SkColorFilters::MatrixRowMajor255(matrix));
- SkPaint paint;
- paint.setImageFilter(SkColorFilterImageFilter::Make(std::move(cf), std::move(tile)));
- canvas->save();
- canvas->translate(SkIntToScalar(x), SkIntToScalar(y));
- canvas->clipRect(dstRect);
- canvas->saveLayer(&dstRect, &paint);
- canvas->drawImage(fBitmap.get(), 0, 0);
- canvas->restore();
- canvas->drawRect(srcRect, red);
- canvas->drawRect(dstRect, blue);
- canvas->restore();
+ SkPaint paint;
+ paint.setImageFilter(SkColorFilterImageFilter::Make(std::move(cf), std::move(tile)));
+ canvas->save();
+ canvas->translate(SkIntToScalar(x), SkIntToScalar(y));
+ canvas->clipRect(dstRect);
+ canvas->saveLayer(&dstRect, &paint);
+ canvas->drawImage(fBitmap.get(), 0, 0);
+ canvas->restore();
+ canvas->drawRect(srcRect, red);
+ canvas->drawRect(dstRect, blue);
+ canvas->restore();
+ }
- canvas->translate(0, SkIntToScalar(100));
+ // test that the crop rect properly applies to the tile image filter
+ {
+ canvas->translate(0, SkIntToScalar(100));
- srcRect = SkRect::MakeXYWH(0, 0, 50, 50);
- dstRect = SkRect::MakeXYWH(0, 0, 100, 100);
- SkImageFilter::CropRect cropRect(SkRect::MakeXYWH(5, 5, 40, 40));
- sk_sp<SkColorFilter> greenCF = SkColorFilters::Blend(SK_ColorGREEN, SkBlendMode::kSrc);
- sk_sp<SkImageFilter> green(SkColorFilterImageFilter::Make(std::move(greenCF),
- nullptr,
- &cropRect));
- tile = SkTileImageFilter::Make(srcRect, dstRect, std::move(green));
- paint.setColor(SK_ColorRED);
- paint.setImageFilter(std::move(tile));
- canvas->drawRect(dstRect, paint);
+ SkRect srcRect = SkRect::MakeXYWH(0, 0, 50, 50);
+ SkRect dstRect = SkRect::MakeXYWH(0, 0, 100, 100);
+ SkImageFilter::CropRect cropRect(SkRect::MakeXYWH(5, 5, 40, 40));
+ sk_sp<SkColorFilter> greenCF = SkColorFilters::Blend(SK_ColorGREEN, SkBlendMode::kSrc);
+ sk_sp<SkImageFilter> green(SkColorFilterImageFilter::Make(std::move(greenCF),
+ nullptr,
+ &cropRect));
+ SkPaint paint;
+ paint.setColor(SK_ColorRED);
+ paint.setImageFilter(SkTileImageFilter::Make(srcRect, dstRect, std::move(green)));
+ canvas->drawRect(dstRect, paint);
+ }
}
private:
sk_sp<SkImage> fBitmap, fCheckerboard;
diff --git a/src/gpu/GrFragmentProcessor.h b/src/gpu/GrFragmentProcessor.h
index fb8126e..96c578c 100644
--- a/src/gpu/GrFragmentProcessor.h
+++ b/src/gpu/GrFragmentProcessor.h
@@ -285,8 +285,8 @@
}
GrFragmentProcessor(ClassID classID, OptimizationFlags optimizationFlags)
- : INHERITED(classID)
- , fFlags(optimizationFlags) {
+ : INHERITED(classID)
+ , fFlags(optimizationFlags) {
SkASSERT((fFlags & ~kAll_OptimizationFlags) == 0);
}
diff --git a/src/gpu/GrResourceAllocator.cpp b/src/gpu/GrResourceAllocator.cpp
index 2142b06..396372c 100644
--- a/src/gpu/GrResourceAllocator.cpp
+++ b/src/gpu/GrResourceAllocator.cpp
@@ -37,7 +37,6 @@
fProxy->priv().assign(std::move(s));
}
-
void GrResourceAllocator::markEndOfOpList(int opListIndex) {
SkASSERT(!fAssigned); // We shouldn't be adding any opLists after (or during) assignment
@@ -286,7 +285,7 @@
}
// Remove any intervals that end before the current index. Return their GrSurfaces
-// to the free pool.
+// to the free pool if possible.
void GrResourceAllocator::expire(unsigned int curIndex) {
while (!fActiveIntvls.empty() && fActiveIntvls.peekHead()->end() < curIndex) {
Interval* temp = fActiveIntvls.popHead();
diff --git a/src/gpu/GrResourceAllocator.h b/src/gpu/GrResourceAllocator.h
index fabaf00..7958eca 100644
--- a/src/gpu/GrResourceAllocator.h
+++ b/src/gpu/GrResourceAllocator.h
@@ -120,9 +120,10 @@
#endif
}
+ // Used when recycling an interval
void resetTo(GrSurfaceProxy* proxy, unsigned int start, unsigned int end) {
SkASSERT(proxy);
- SkASSERT(!fNext);
+ SkASSERT(!fProxy && !fNext);
fProxy = proxy;
fProxyID = proxy->uniqueID().asUInt();
diff --git a/tests/LazyProxyTest.cpp b/tests/LazyProxyTest.cpp
index 6dcfb2b..cacc6fc 100644
--- a/tests/LazyProxyTest.cpp
+++ b/tests/LazyProxyTest.cpp
@@ -111,7 +111,13 @@
const char* name() const override { return "LazyProxyTest::Op"; }
FixedFunctionFlags fixedFunctionFlags() const override { return FixedFunctionFlags::kNone; }
GrProcessorSet::Analysis finalize(
- const GrCaps&, const GrAppliedClip*, GrFSAAType, GrClampType) override {
+ const GrCaps&, const GrAppliedClip* clip, GrFSAAType, GrClampType) override {
+ if (clip) {
+ for (int i = 0; i < clip->numClipCoverageFragmentProcessors(); ++i) {
+ const GrFragmentProcessor* clipFP = clip->clipCoverageFragmentProcessor(i);
+ clipFP->markPendingExecution();
+ }
+ }
return GrProcessorSet::EmptySetAnalysis();
}
void onPrepare(GrOpFlushState*) override {}