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

Unified Diff: gm/blurroundrect.cpp

Issue 59983004: Fixes for blurroundrect gm/bench. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Add scale Created 7 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« bench/BlurRoundRectBench.cpp ('K') | « bench/BlurRoundRectBench.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gm/blurroundrect.cpp
diff --git a/gm/blurroundrect.cpp b/gm/blurroundrect.cpp
index 5a2fa01db785d73e17175d7616063282627c8de2..575606c4cbcac7af890d83b1753ce13f8f5be22b 100644
--- a/gm/blurroundrect.cpp
+++ b/gm/blurroundrect.cpp
@@ -19,36 +19,27 @@
#include "SkString.h"
#include "SkXfermode.h"
+// This GM mimics a blurred RR seen in the wild.
class BlurRoundRectGM : public skiagm::GM {
public:
- BlurRoundRectGM(int width, int height,
- // X and Y radii for the upper left corner
- int ulX, int ulY,
- // X and Y radii for the upper right corner
- int urX, int urY,
- // X and Y radii for the lower right corner
- int lrX, int lrY,
- // X and Y radii for the lower left corner
- int llX, int llY,
- int scaleX, int scaleY)
+ BlurRoundRectGM(int width, int height, int radius)
: fName("blurroundrect")
- , fWidth(width)
- , fHeight(height)
- , fScaleX(SkIntToScalar(scaleX))
- , fScaleY(SkIntToScalar(scaleY)) {
- fName.appendf("-WH[%ix%i]-UL[%ix%i]-UR[%ix%i]-LR[%ix%i]-LL[%ix%i]-scale[%ix%i]",
- width, height,
- ulX, ulY,
- urX, urY,
- lrX, lrY,
- llX, llY,
- scaleX, scaleY);
+ {
+ SkRect r = SkRect::MakeWH(SkIntToScalar(width), SkIntToScalar(height));
+ fRRect.setRectXY(r, SkIntToScalar(radius), SkIntToScalar(radius));
+ fName.appendf("-WH[%ix%i]-corner[%i]", width, height, radius);
+ }
+
+ BlurRoundRectGM(int width, int height)
+ : fName("blurroundrect") {
+ fName.appendf("-WH[%ix%i]-unevenCorners",
+ width, height);
SkVector radii[4];
- radii[0].set(SkIntToScalar(ulX), SkIntToScalar(ulY));
- radii[1].set(SkIntToScalar(urX), SkIntToScalar(urY));
- radii[2].set(SkIntToScalar(lrX), SkIntToScalar(lrY));
- radii[3].set(SkIntToScalar(llX), SkIntToScalar(llY));
- SkRect r = SkRect::MakeWH(SkIntToScalar(fWidth), SkIntToScalar(fHeight));
+ radii[0].set(SkIntToScalar(30), SkIntToScalar(30));
+ radii[1].set(SkIntToScalar(10), SkIntToScalar(10));
+ radii[2].set(SkIntToScalar(30), SkIntToScalar(30));
+ radii[3].set(SkIntToScalar(10), SkIntToScalar(10));
+ SkRect r = SkRect::MakeWH(SkIntToScalar(width), SkIntToScalar(height));
fRRect.setRectRadii(r, radii);
}
@@ -57,63 +48,17 @@ public:
}
virtual SkISize onISize() SK_OVERRIDE {
- SkISize size = this->getUnscaledSize();
- return SkISize::Make(SkScalarCeilToInt(SkScalarMul(size.fWidth, fScaleX)),
- SkScalarCeilToInt(SkScalarMul(size.fHeight, fScaleY)));
- }
-
- virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
- canvas->scale(fScaleX, fScaleY);
- }
-
- const SkRRect& getRRect() const {
- return fRRect;
- }
-
- // The subclass will implement this to inform us how big they
- // draw before scaling.
- virtual SkISize getUnscaledSize() const = 0;
-
- // So subclasses can modify the name.
- SkString* getName() {
- return &fName;
- }
-
-private:
- SkString fName;
- const int fWidth;
- const int fHeight;
- const SkScalar fScaleX;
- const SkScalar fScaleY;
- SkRRect fRRect;
- typedef skiagm::GM INHERITED;
-};
-
-class SKPBlurRoundRectGM : public BlurRoundRectGM {
-public:
- SKPBlurRoundRectGM(int width, int height,
- int ulX, int ulY,
- int urX, int urY,
- int lrX, int lrY,
- int llX, int llY,
- int scaleX, int scaleY)
- : INHERITED(width, height, ulX, ulY, urX, urY, lrX, lrY, llX, llY, scaleX, scaleY) {
- this->getName()->prepend("skp-");
- }
-
-protected:
- virtual SkISize getUnscaledSize() const SK_OVERRIDE {
- return SkISize::Make(SkScalarCeilToInt(this->getRRect().rect().width()),
- SkScalarCeilToInt(this->getRRect().rect().height()));
+ return SkISize::Make(SkScalarCeilToInt(fRRect.rect().width()),
+ SkScalarCeilToInt(fRRect.rect().height()));
}
virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
- this->INHERITED::onDraw(canvas);
SkLayerDrawLooper* looper = new SkLayerDrawLooper;
{
SkLayerDrawLooper::LayerInfo info;
info.fFlagsMask = 0;
- info.fPaintBits = 40;
+ info.fPaintBits = SkLayerDrawLooper::kMaskFilter_Bit
+ | SkLayerDrawLooper::kColorFilter_Bit;
info.fColorMode = SkXfermode::kSrc_Mode;
info.fOffset = SkPoint::Make(SkIntToScalar(-1), SkIntToScalar(0));
info.fPostTranslate = false;
@@ -132,80 +77,72 @@ protected:
looper->addLayerOnTop(info);
}
SkPaint paint;
- canvas->drawRect(this->getRRect().rect(), paint);
+ canvas->drawRect(fRRect.rect(), paint);
paint.setLooper(looper)->unref();
paint.setColor(SK_ColorCYAN);
paint.setAntiAlias(true);
- canvas->drawRRect(this->getRRect(), paint);
+ canvas->drawRRect(fRRect, paint);
}
private:
- typedef BlurRoundRectGM INHERITED;
+ SkString fName;
+ SkRRect fRRect;
+
+ typedef skiagm::GM INHERITED;
};
-class SimpleBlurRoundRectGM : public BlurRoundRectGM {
+// Simpler blurred RR test cases where all the radii are the same.
+class SimpleBlurRoundRectGM : public skiagm::GM {
public:
- SimpleBlurRoundRectGM(int width, int height,
- int blurRadius, int cornerRadius,
- int scaleX = 1, int scaleY = 1)
- : INHERITED(width, height, cornerRadius, cornerRadius,
- cornerRadius, cornerRadius, cornerRadius,
- cornerRadius, cornerRadius, cornerRadius, scaleX, scaleY)
- , fBlurRadius(blurRadius) {
- // For now at least, change the name to reflect only the
- // variables that are changing.
- this->getName()->printf("blurround-blur[%i]-corner[%i]-scale[%ix%i]", fBlurRadius, cornerRadius, scaleX, scaleY);
+ SimpleBlurRoundRectGM()
+ : fName("simpleblurroundrect") {
}
protected:
- virtual SkISize getUnscaledSize() const SK_OVERRIDE {
- return SkISize::Make(SkScalarCeilToInt(this->getRRect().rect().width() + 20),
- SkScalarCeilToInt(this->getRRect().rect().height() + 20));
+ virtual SkString onShortName() SK_OVERRIDE {
+ return fName;
+ }
+
+ virtual SkISize onISize() SK_OVERRIDE {
+ return SkISize::Make(SkIntToScalar(750), SkIntToScalar(750));
}
virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
- // Handle the scaling.
- this->INHERITED::onDraw(canvas);
- canvas->translate(SkIntToScalar(10), SkIntToScalar(10));
- SkMaskFilter* filter = SkBlurMaskFilter::Create(SkIntToScalar(fBlurRadius),
- SkBlurMaskFilter::kNormal_BlurStyle);
- SkPaint paint;
- paint.setColor(SK_ColorBLUE);
- paint.setMaskFilter(filter)->unref();
- canvas->drawRRect(this->getRRect(), paint);
+ canvas->scale(SkFloatToScalar(1.5f), SkFloatToScalar(1.5f));
+
+ const int blurRadii[] = { 1, 3, 6, 10 };
+ const int cornerRadii[] = { 1, 3, 6, 10 };
+ const SkRect r = SkRect::MakeWH(SkIntToScalar(100), SkIntToScalar(100));
+ for (size_t i = 0; i < SK_ARRAY_COUNT(blurRadii); ++i) {
+ SkAutoCanvasRestore autoRestore(canvas, true);
+ canvas->translate(0, (r.height() + SkIntToScalar(20)) * i);
+ for (size_t j = 0; j < SK_ARRAY_COUNT(cornerRadii); ++j) {
+ SkMaskFilter* filter = SkBlurMaskFilter::Create(SkIntToScalar(blurRadii[i]),
+ SkBlurMaskFilter::kNormal_BlurStyle);
+ SkPaint paint;
+ paint.setColor(SK_ColorBLUE);
+ paint.setMaskFilter(filter)->unref();
+
+ SkRRect rrect;
+ rrect.setRectXY(r, SkIntToScalar(cornerRadii[j]), SkIntToScalar(cornerRadii[j]));
+ canvas->drawRRect(rrect, paint);
+ canvas->translate(r.width() + SkIntToScalar(10), 0);
+ }
+ }
}
private:
- const int fBlurRadius;
+ const SkString fName;
- typedef BlurRoundRectGM INHERITED;
+ typedef skiagm::GM INHERITED;
};
// Create one with dimensions/rounded corners based on the skp
-DEF_GM(return new SKPBlurRoundRectGM(600, 5514, 6, 6, 6, 6, 6, 6, 6, 6, 1, 1);)
-// Same radii, much smaller rectangle
-DEF_GM(return new SKPBlurRoundRectGM(100, 100, 6, 6, 6, 6, 6, 6, 6, 6, 2, 2);)
+DEF_GM(return new BlurRoundRectGM(600, 5514, 6);)
// Rounded rect with two opposite corners with large radii, the other two
// small.
-DEF_GM(return new SKPBlurRoundRectGM(100, 100, 30, 30, 10, 10, 30, 30, 10, 10, 3, 4);)
-DEF_GM(return new SKPBlurRoundRectGM(100, 100, 90, 90, 90, 90, 90, 90, 90, 90, 2, 3);)
-
-// Try a few blur values with a small corner radius
-DEF_GM(return new SimpleBlurRoundRectGM(100, 100, 1, 1));
-DEF_GM(return new SimpleBlurRoundRectGM(100, 100, 3, 1, 2, 2));
-DEF_GM(return new SimpleBlurRoundRectGM(100, 100, 6, 1));
-DEF_GM(return new SimpleBlurRoundRectGM(100, 100, 10, 1, 3, 3));
-
-// Now a few blur values with a larger corner radius
-DEF_GM(return new SimpleBlurRoundRectGM(100, 100, 1, 3, 2, 2));
-DEF_GM(return new SimpleBlurRoundRectGM(100, 100, 3, 3));
-DEF_GM(return new SimpleBlurRoundRectGM(100, 100, 6, 3, 3, 3));
-DEF_GM(return new SimpleBlurRoundRectGM(100, 100, 10, 3));
-
-// Even larger corner radius
-DEF_GM(return new SimpleBlurRoundRectGM(100, 100, 1, 6, 2, 4));
-DEF_GM(return new SimpleBlurRoundRectGM(100, 100, 3, 6));
-DEF_GM(return new SimpleBlurRoundRectGM(100, 100, 6, 6));
-DEF_GM(return new SimpleBlurRoundRectGM(100, 100, 10, 6, 1, 3));
+DEF_GM(return new BlurRoundRectGM(100, 100);)
+
+DEF_GM(return new SimpleBlurRoundRectGM();)
« bench/BlurRoundRectBench.cpp ('K') | « bench/BlurRoundRectBench.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698