downsamplebitmap.cpp revision bfefc7c95fc0e8ebd5000c68f6d16e1a3ea0e71e
19c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com/*
29c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com * Copyright 2013 Google Inc.
39c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com *
49c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com * Use of this source code is governed by a BSD-style license that can be
59c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com * found in the LICENSE file.
69c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com */
79c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
89c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com#include "gm.h"
99c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com#include "SkGradientShader.h"
109c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
119c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com#include "SkTypeface.h"
129c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com#include "SkImageDecoder.h"
139c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com#include "SkStream.h"
14af42a03051e6a588cda01a988c31eb6493d7d299humper@google.com#include "SkPaint.h"
159c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
169c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.comstatic void setTypeface(SkPaint* paint, const char name[], SkTypeface::Style style) {
179c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com    SkSafeUnref(paint->setTypeface(SkTypeface::CreateFromName(name, style)));
189c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com}
199c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
209c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.comclass DownsampleBitmapGM : public skiagm::GM {
219c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
229c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.compublic:
239c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com    SkBitmap    fBM;
249c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com    SkString    fName;
259c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com    bool        fBitmapMade;
26af42a03051e6a588cda01a988c31eb6493d7d299humper@google.com    SkPaint::FilterLevel fFilterLevel;
279c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
28af42a03051e6a588cda01a988c31eb6493d7d299humper@google.com    DownsampleBitmapGM(SkPaint::FilterLevel filterLevel)
29af42a03051e6a588cda01a988c31eb6493d7d299humper@google.com        : fFilterLevel(filterLevel)
309c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com    {
319c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com        this->setBGColor(0xFFDDDDDD);
329c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com        fBitmapMade = false;
339c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com    }
349c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
35e2cf805e9ae57f259307ab0834dd23dfe468c316humper@google.com    const char* filterLevelToString() {
36e2cf805e9ae57f259307ab0834dd23dfe468c316humper@google.com        static const char *filterLevelNames[] = {
37e2cf805e9ae57f259307ab0834dd23dfe468c316humper@google.com            "none", "low", "medium", "high"
38e2cf805e9ae57f259307ab0834dd23dfe468c316humper@google.com        };
39e2cf805e9ae57f259307ab0834dd23dfe468c316humper@google.com        return filterLevelNames[fFilterLevel];
40af42a03051e6a588cda01a988c31eb6493d7d299humper@google.com    }
419c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
429c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.comprotected:
43a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org    virtual uint32_t onGetFlags() const SK_OVERRIDE {
44a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org        if (SkPaint::kHigh_FilterLevel != fFilterLevel) {
45a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org            return kSkipTiled_Flag;
46a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org        }
47a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org        return 0;
48a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org    }
49a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org
509c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com    virtual SkString onShortName() SK_OVERRIDE {
519c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com        return fName;
529c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com    }
539c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
549c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com    virtual SkISize onISize() SK_OVERRIDE {
559c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com        make_bitmap_wrapper();
569c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com        return SkISize::Make(4 * fBM.width(), fBM.height());
579c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com    }
589c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
599c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com    void make_bitmap_wrapper() {
609c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com        if (!fBitmapMade) {
619c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com            fBitmapMade = true;
629c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com            make_bitmap();
639c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com        }
649c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com    }
659c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
669c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com    virtual void make_bitmap() = 0;
679c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
689c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
699c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com        make_bitmap_wrapper();
709c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
719c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com        int curX = 0;
729c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com        int curWidth;
739c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com        float curScale = 1;
749c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com        do {
759c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
769c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com            SkMatrix matrix;
779c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com            matrix.setScale( curScale, curScale );
789c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
799c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com            SkPaint paint;
80af42a03051e6a588cda01a988c31eb6493d7d299humper@google.com            paint.setFilterLevel(fFilterLevel);
819c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
829c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com            canvas->save();
839c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com            canvas->translate( (SkScalar) curX, 0.f );
849c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com            canvas->drawBitmapMatrix( fBM, matrix, &paint );
859c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com            canvas->restore();
869c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
879c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com            curWidth = (int) (fBM.width() * curScale + 2);
889c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com            curX += curWidth;
899c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com            curScale *= 0.75f;
90138ebc3e4061cf533ea2f7f3717239670fdc6e43humper@google.com        } while (curWidth >= 2 && curX < 4*fBM.width());
919c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com    }
929c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
939c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.comprivate:
949c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com    typedef skiagm::GM INHERITED;
959c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com};
969c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
979c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.comclass DownsampleBitmapTextGM: public DownsampleBitmapGM {
989c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com  public:
99af42a03051e6a588cda01a988c31eb6493d7d299humper@google.com      DownsampleBitmapTextGM(float textSize, SkPaint::FilterLevel filterLevel)
100af42a03051e6a588cda01a988c31eb6493d7d299humper@google.com      : INHERITED(filterLevel), fTextSize(textSize)
1019c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com        {
102e2cf805e9ae57f259307ab0834dd23dfe468c316humper@google.com            fName.printf("downsamplebitmap_text_%s_%.2fpt", this->filterLevelToString(), fTextSize);
1039c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com        }
1049c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
1059c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com  protected:
1069c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com      float fTextSize;
1079c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
1089c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com      virtual void make_bitmap() SK_OVERRIDE {
109eb9a46cbbb475e862a084aa2224ec18d4ac5e95breed@google.com          fBM.allocN32Pixels(int(fTextSize * 8), int(fTextSize * 6));
1109c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com          SkCanvas canvas(fBM);
1119c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com          canvas.drawColor(SK_ColorWHITE);
1129c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
1139c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com          SkPaint paint;
1149c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com          paint.setAntiAlias(true);
1159c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com          paint.setSubpixelText(true);
1169c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com          paint.setTextSize(fTextSize);
1179c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
1189c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com          setTypeface(&paint, "Times", SkTypeface::kNormal);
1199c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com          canvas.drawText("Hamburgefons", 12, fTextSize/2, 1.2f*fTextSize, paint);
1209c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com          setTypeface(&paint, "Times", SkTypeface::kBold);
1219c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com          canvas.drawText("Hamburgefons", 12, fTextSize/2, 2.4f*fTextSize, paint);
1229c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com          setTypeface(&paint, "Times", SkTypeface::kItalic);
1239c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com          canvas.drawText("Hamburgefons", 12, fTextSize/2, 3.6f*fTextSize, paint);
1249c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com          setTypeface(&paint, "Times", SkTypeface::kBoldItalic);
1259c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com          canvas.drawText("Hamburgefons", 12, fTextSize/2, 4.8f*fTextSize, paint);
1269c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com      }
1279c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com  private:
1289c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com      typedef DownsampleBitmapGM INHERITED;
1299c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com};
1309c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
1319c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.comclass DownsampleBitmapCheckerboardGM: public DownsampleBitmapGM {
1329c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com  public:
133af42a03051e6a588cda01a988c31eb6493d7d299humper@google.com      DownsampleBitmapCheckerboardGM(int size, int numChecks, SkPaint::FilterLevel filterLevel)
134af42a03051e6a588cda01a988c31eb6493d7d299humper@google.com      : INHERITED(filterLevel), fSize(size), fNumChecks(numChecks)
1359c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com        {
136e2cf805e9ae57f259307ab0834dd23dfe468c316humper@google.com            fName.printf("downsamplebitmap_checkerboard_%s_%d_%d", this->filterLevelToString(), fSize, fNumChecks);
1379c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com        }
1389c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
1399c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com  protected:
1409c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com      int fSize;
1419c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com      int fNumChecks;
1429c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
1439c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com      virtual void make_bitmap() SK_OVERRIDE {
144eb9a46cbbb475e862a084aa2224ec18d4ac5e95breed@google.com          fBM.allocN32Pixels(fSize, fSize);
1459c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com          for (int y = 0; y < fSize; ++y) {
1469c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com              for (int x = 0; x < fSize; ++x) {
1479c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com                  SkPMColor* s = fBM.getAddr32(x, y);
1489c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com                  int cx = (x * fNumChecks) / fSize;
1499c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com                  int cy = (y * fNumChecks) / fSize;
1509c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com                  if ((cx+cy)%2) {
1519c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com                      *s = 0xFFFFFFFF;
1529c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com                  } else {
1539c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com                      *s = 0xFF000000;
1549c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com                  }
1559c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com              }
1569c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com          }
1579c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com      }
1589c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com  private:
1599c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com      typedef DownsampleBitmapGM INHERITED;
1609c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com};
1619c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
1629c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.comclass DownsampleBitmapImageGM: public DownsampleBitmapGM {
1639c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com  public:
164af42a03051e6a588cda01a988c31eb6493d7d299humper@google.com      DownsampleBitmapImageGM(const char filename[], SkPaint::FilterLevel filterLevel)
165af42a03051e6a588cda01a988c31eb6493d7d299humper@google.com      : INHERITED(filterLevel), fFilename(filename)
1669c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com        {
167e2cf805e9ae57f259307ab0834dd23dfe468c316humper@google.com            fName.printf("downsamplebitmap_image_%s_%s", this->filterLevelToString(), filename);
1689c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com        }
1699c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
1709c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com  protected:
1719c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com      SkString fFilename;
1729c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com      int fSize;
1739c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
1749c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com      virtual void make_bitmap() SK_OVERRIDE {
1759c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com          SkString path(skiagm::GM::gResourcePath);
1769c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com          path.append("/");
1779c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com          path.append(fFilename);
1789c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
1799c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com          SkImageDecoder *codec = NULL;
1809c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com          SkFILEStream stream(path.c_str());
1819c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com          if (stream.isValid()) {
1829c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com              codec = SkImageDecoder::Factory(&stream);
1839c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com          }
1849c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com          if (codec) {
1859c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com              stream.rewind();
186bfefc7c95fc0e8ebd5000c68f6d16e1a3ea0e71ereed              codec->decode(&stream, &fBM, kN32_SkColorType, SkImageDecoder::kDecodePixels_Mode);
1879c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com              SkDELETE(codec);
1889c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com          } else {
189eb9a46cbbb475e862a084aa2224ec18d4ac5e95breed@google.com              fBM.allocN32Pixels(1, 1);
1909c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com              *(fBM.getAddr32(0,0)) = 0xFF0000FF; // red == bad
1919c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com          }
1929c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com          fSize = fBM.height();
1939c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com      }
1949c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com  private:
1959c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com      typedef DownsampleBitmapGM INHERITED;
1969c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com};
1979c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
1989c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com//////////////////////////////////////////////////////////////////////////////
1999c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
200af42a03051e6a588cda01a988c31eb6493d7d299humper@google.comDEF_GM( return new DownsampleBitmapTextGM(72, SkPaint::kHigh_FilterLevel); )
201af42a03051e6a588cda01a988c31eb6493d7d299humper@google.comDEF_GM( return new DownsampleBitmapCheckerboardGM(512,256, SkPaint::kHigh_FilterLevel); )
202af42a03051e6a588cda01a988c31eb6493d7d299humper@google.comDEF_GM( return new DownsampleBitmapImageGM("mandrill_512.png", SkPaint::kHigh_FilterLevel); )
203af42a03051e6a588cda01a988c31eb6493d7d299humper@google.com
204af42a03051e6a588cda01a988c31eb6493d7d299humper@google.comDEF_GM( return new DownsampleBitmapTextGM(72, SkPaint::kMedium_FilterLevel); )
205af42a03051e6a588cda01a988c31eb6493d7d299humper@google.comDEF_GM( return new DownsampleBitmapCheckerboardGM(512,256, SkPaint::kMedium_FilterLevel); )
206af42a03051e6a588cda01a988c31eb6493d7d299humper@google.comDEF_GM( return new DownsampleBitmapImageGM("mandrill_512.png", SkPaint::kMedium_FilterLevel); )
207af42a03051e6a588cda01a988c31eb6493d7d299humper@google.com
208af42a03051e6a588cda01a988c31eb6493d7d299humper@google.comDEF_GM( return new DownsampleBitmapTextGM(72, SkPaint::kLow_FilterLevel); )
209af42a03051e6a588cda01a988c31eb6493d7d299humper@google.comDEF_GM( return new DownsampleBitmapCheckerboardGM(512,256, SkPaint::kLow_FilterLevel); )
210af42a03051e6a588cda01a988c31eb6493d7d299humper@google.comDEF_GM( return new DownsampleBitmapImageGM("mandrill_512.png", SkPaint::kLow_FilterLevel); )
211af42a03051e6a588cda01a988c31eb6493d7d299humper@google.com
212af42a03051e6a588cda01a988c31eb6493d7d299humper@google.comDEF_GM( return new DownsampleBitmapTextGM(72, SkPaint::kNone_FilterLevel); )
213af42a03051e6a588cda01a988c31eb6493d7d299humper@google.comDEF_GM( return new DownsampleBitmapCheckerboardGM(512,256, SkPaint::kNone_FilterLevel); )
214af42a03051e6a588cda01a988c31eb6493d7d299humper@google.comDEF_GM( return new DownsampleBitmapImageGM("mandrill_512.png", SkPaint::kNone_FilterLevel); )
215