| Index: gm/convexpolyclip.cpp
|
| diff --git a/gm/convexpolyclip.cpp b/gm/convexpolyclip.cpp
|
| index 0822f4c21970362781b223d5cdae6e359b82e818..a8037aaa542a6bd0c29a3efab41d32b5c24ec648 100644
|
| --- a/gm/convexpolyclip.cpp
|
| +++ b/gm/convexpolyclip.cpp
|
| @@ -83,7 +83,12 @@ protected:
|
| }
|
|
|
| virtual SkISize onISize() SK_OVERRIDE {
|
| - return make_isize(435, 540);
|
| + // When benchmarking the saveLayer set of draws is skipped.
|
| + int w = 435;
|
| + if (kBench_Mode != this->getMode()) {
|
| + w *= 2;
|
| + }
|
| + return make_isize(w, 540);
|
| }
|
|
|
| virtual void onOnceBeforeDraw() SK_OVERRIDE {
|
| @@ -140,47 +145,70 @@ protected:
|
| SkIntToScalar(size.fHeight));
|
| canvas->drawBitmapRectToRect(fBmp, NULL, dstRect, &bgPaint);
|
|
|
| - for (SkTLList<Clip>::Iter iter(fClips, SkTLList<Clip>::Iter::kHead_IterStart);
|
| - NULL != iter.get();
|
| - iter.next()) {
|
| - const Clip* clip = iter.get();
|
| - SkScalar x = 0;
|
| - for (int aa = 0; aa < 2; ++aa) {
|
| - canvas->save();
|
| - canvas->translate(x, y);
|
| - clip->setOnCanvas(canvas, SkRegion::kIntersect_Op, SkToBool(aa));
|
| - canvas->drawBitmap(fBmp, 0, 0);
|
| - canvas->restore();
|
| - x += fBmp.width() + kMargin;
|
| - }
|
| - for (int aa = 0; aa < 2; ++aa) {
|
| - static const char kTxt[] = "Clip Me!";
|
| - SkPaint txtPaint;
|
| - txtPaint.setTextSize(23.f);
|
| - txtPaint.setAntiAlias(true);
|
| - txtPaint.setColor(SK_ColorDKGRAY);
|
| -
|
| - SkPaint clipOutlinePaint;
|
| - clipOutlinePaint.setAntiAlias(true);
|
| - clipOutlinePaint.setColor(0x50505050);
|
| - clipOutlinePaint.setStyle(SkPaint::kStroke_Style);
|
| - clipOutlinePaint.setStrokeWidth(0);
|
| -
|
| - canvas->save();
|
| - canvas->translate(x, y);
|
| - SkPath closedClipPath;
|
| - clip->asClosedPath(&closedClipPath);
|
| - canvas->drawPath(closedClipPath, clipOutlinePaint);
|
| - clip->setOnCanvas(canvas, SkRegion::kIntersect_Op, SkToBool(aa));
|
| - canvas->scale(1.f, 1.8f);
|
| - canvas->drawText(kTxt, SK_ARRAY_COUNT(kTxt)-1,
|
| - 0, 1.5f * txtPaint.getTextSize(),
|
| - txtPaint);
|
| - canvas->restore();
|
| - x += fBmp.width() + kMargin;
|
| + static const char kTxt[] = "Clip Me!";
|
| + SkPaint txtPaint;
|
| + txtPaint.setTextSize(23.f);
|
| + txtPaint.setAntiAlias(true);
|
| + txtPaint.setColor(SK_ColorDKGRAY);
|
| + SkScalar textW = txtPaint.measureText(kTxt, SK_ARRAY_COUNT(kTxt)-1);
|
| +
|
| + SkScalar startX = 0;
|
| + int testLayers = kBench_Mode != this->getMode();
|
| + for (int doLayer = 0; doLayer <= testLayers; ++doLayer) {
|
| + for (SkTLList<Clip>::Iter iter(fClips, SkTLList<Clip>::Iter::kHead_IterStart);
|
| + NULL != iter.get();
|
| + iter.next()) {
|
| + const Clip* clip = iter.get();
|
| + SkScalar x = startX;
|
| + for (int aa = 0; aa < 2; ++aa) {
|
| + if (doLayer) {
|
| + SkRect bounds;
|
| + clip->getBounds(&bounds);
|
| + bounds.outset(2, 2);
|
| + bounds.offset(x, y);
|
| + canvas->saveLayer(&bounds, NULL);
|
| + } else {
|
| + canvas->save();
|
| + }
|
| + canvas->translate(x, y);
|
| + clip->setOnCanvas(canvas, SkRegion::kIntersect_Op, SkToBool(aa));
|
| + canvas->drawBitmap(fBmp, 0, 0);
|
| + canvas->restore();
|
| + x += fBmp.width() + kMargin;
|
| + }
|
| + for (int aa = 0; aa < 2; ++aa) {
|
| +
|
| + SkPaint clipOutlinePaint;
|
| + clipOutlinePaint.setAntiAlias(true);
|
| + clipOutlinePaint.setColor(0x50505050);
|
| + clipOutlinePaint.setStyle(SkPaint::kStroke_Style);
|
| + clipOutlinePaint.setStrokeWidth(0);
|
| +
|
| + if (doLayer) {
|
| + SkRect bounds;
|
| + clip->getBounds(&bounds);
|
| + bounds.outset(2, 2);
|
| + bounds.offset(x, y);
|
| + canvas->saveLayer(&bounds, NULL);
|
| + } else {
|
| + canvas->save();
|
| + }
|
| + canvas->translate(x, y);
|
| + SkPath closedClipPath;
|
| + clip->asClosedPath(&closedClipPath);
|
| + canvas->drawPath(closedClipPath, clipOutlinePaint);
|
| + clip->setOnCanvas(canvas, SkRegion::kIntersect_Op, SkToBool(aa));
|
| + canvas->scale(1.f, 1.8f);
|
| + canvas->drawText(kTxt, SK_ARRAY_COUNT(kTxt)-1,
|
| + 0, 1.5f * txtPaint.getTextSize(),
|
| + txtPaint);
|
| + canvas->restore();
|
| + x += textW + 2 * kMargin;
|
| + }
|
| + y += fBmp.height() + kMargin;
|
| }
|
| -
|
| - y += fBmp.height() + kMargin;
|
| + y = 0;
|
| + startX += 2 * fBmp.width() + SkScalarCeilToInt(2 * textW) + 6 * kMargin;
|
| }
|
| }
|
|
|
| @@ -242,6 +270,20 @@ private:
|
|
|
| ClipType getType() const { return fClipType; }
|
|
|
| + void getBounds(SkRect* bounds) const {
|
| + switch (fClipType) {
|
| + case kPath_ClipType:
|
| + *bounds = fPath.getBounds();
|
| + break;
|
| + case kRect_ClipType:
|
| + *bounds = fRect;
|
| + break;
|
| + case kNone_ClipType:
|
| + SkDEBUGFAIL("Uninitialized Clip.");
|
| + break;
|
| + }
|
| + }
|
| +
|
| private:
|
| ClipType fClipType;
|
| SkPath fPath;
|
|
|