17e5598a004d0aceb630707053566bee523feea66dandov/*
27e5598a004d0aceb630707053566bee523feea66dandov * Copyright 2014 Google Inc.
37e5598a004d0aceb630707053566bee523feea66dandov *
47e5598a004d0aceb630707053566bee523feea66dandov * Use of this source code is governed by a BSD-style license that can be
57e5598a004d0aceb630707053566bee523feea66dandov * found in the LICENSE file.
67e5598a004d0aceb630707053566bee523feea66dandov */
77e5598a004d0aceb630707053566bee523feea66dandov
87e5598a004d0aceb630707053566bee523feea66dandov#include "Benchmark.h"
97e5598a004d0aceb630707053566bee523feea66dandov#include "SkCanvas.h"
107e5598a004d0aceb630707053566bee523feea66dandov#include "SkGradientShader.h"
117e5598a004d0aceb630707053566bee523feea66dandov#include "SkPaint.h"
127e5598a004d0aceb630707053566bee523feea66dandov#include "SkPatchGrid.h"
137e5598a004d0aceb630707053566bee523feea66dandov#include "SkString.h"
147e5598a004d0aceb630707053566bee523feea66dandov
157e5598a004d0aceb630707053566bee523feea66dandov /**
167e5598a004d0aceb630707053566bee523feea66dandov * This bench measures the rendering time of a gridof patches.
177e5598a004d0aceb630707053566bee523feea66dandov * This bench also tests the different combination of optional parameters for the function
187e5598a004d0aceb630707053566bee523feea66dandov * (passing texture coordinates and colors, only textures coordinates, only colors or none).
197e5598a004d0aceb630707053566bee523feea66dandov * Finally, it also has 3 possible sizes small, medium and big to test if the size of the patches
207e5598a004d0aceb630707053566bee523feea66dandov * in the grid affects time.
217e5598a004d0aceb630707053566bee523feea66dandov */
227e5598a004d0aceb630707053566bee523feea66dandov
237e5598a004d0aceb630707053566bee523feea66dandovclass PatchGridBench : public Benchmark {
247e5598a004d0aceb630707053566bee523feea66dandov
257e5598a004d0aceb630707053566bee523feea66dandovpublic:
267e5598a004d0aceb630707053566bee523feea66dandov
277e5598a004d0aceb630707053566bee523feea66dandov    enum Size {
287e5598a004d0aceb630707053566bee523feea66dandov        kSmall_Size,
297e5598a004d0aceb630707053566bee523feea66dandov        kMedium_Size,
307e5598a004d0aceb630707053566bee523feea66dandov        kBig_Size
317e5598a004d0aceb630707053566bee523feea66dandov    };
327e5598a004d0aceb630707053566bee523feea66dandov
337e5598a004d0aceb630707053566bee523feea66dandov    enum VertexMode {
347e5598a004d0aceb630707053566bee523feea66dandov        kNone_VertexMode,
357e5598a004d0aceb630707053566bee523feea66dandov        kColors_VertexMode,
367e5598a004d0aceb630707053566bee523feea66dandov        kTexCoords_VertexMode,
377e5598a004d0aceb630707053566bee523feea66dandov        kBoth_VertexMode
387e5598a004d0aceb630707053566bee523feea66dandov    };
397e5598a004d0aceb630707053566bee523feea66dandov
407e5598a004d0aceb630707053566bee523feea66dandov    PatchGridBench(Size size, VertexMode vertexMode)
417e5598a004d0aceb630707053566bee523feea66dandov    : fVertexMode(vertexMode)
427e5598a004d0aceb630707053566bee523feea66dandov    , fSize(size) { }
437e5598a004d0aceb630707053566bee523feea66dandov
447e5598a004d0aceb630707053566bee523feea66dandov    void setScale(SkCanvas* canvas){
457e5598a004d0aceb630707053566bee523feea66dandov        switch (fSize) {
467e5598a004d0aceb630707053566bee523feea66dandov            case kSmall_Size:
477e5598a004d0aceb630707053566bee523feea66dandov                canvas->scale(0.1f, 0.1f);
487e5598a004d0aceb630707053566bee523feea66dandov                break;
497e5598a004d0aceb630707053566bee523feea66dandov            case kMedium_Size:
507e5598a004d0aceb630707053566bee523feea66dandov                canvas->scale(1.0f, 1.0f);
517e5598a004d0aceb630707053566bee523feea66dandov                break;
527e5598a004d0aceb630707053566bee523feea66dandov            case kBig_Size:
537e5598a004d0aceb630707053566bee523feea66dandov                canvas->scale(3.0f, 3.0f);
547e5598a004d0aceb630707053566bee523feea66dandov                break;
557e5598a004d0aceb630707053566bee523feea66dandov        }
567e5598a004d0aceb630707053566bee523feea66dandov    }
577e5598a004d0aceb630707053566bee523feea66dandov
587e5598a004d0aceb630707053566bee523feea66dandov    void setGrid() {
597e5598a004d0aceb630707053566bee523feea66dandov        SkPoint vertices[4][5] = {
607e5598a004d0aceb630707053566bee523feea66dandov            {{50,50}, {150,50}, {250,50},{350,50},{450,50}},
617e5598a004d0aceb630707053566bee523feea66dandov            {{50,150}, {120,120}, {250,150},{350,150},{450,150}},
627e5598a004d0aceb630707053566bee523feea66dandov            {{50,250}, {150,250}, {250,250},{350,250},{450,250}},
637e5598a004d0aceb630707053566bee523feea66dandov            {{100,300}, {150,350}, {250,350},{350,350},{450,350}}
647e5598a004d0aceb630707053566bee523feea66dandov        };
657e5598a004d0aceb630707053566bee523feea66dandov
667e5598a004d0aceb630707053566bee523feea66dandov        SkColor cornerColors[4][5] = {
677e5598a004d0aceb630707053566bee523feea66dandov            {SK_ColorBLUE, SK_ColorRED, SK_ColorBLUE, SK_ColorRED, SK_ColorBLUE},
687e5598a004d0aceb630707053566bee523feea66dandov            {SK_ColorRED, SK_ColorBLUE, SK_ColorRED, SK_ColorBLUE, SK_ColorRED},
697e5598a004d0aceb630707053566bee523feea66dandov            {SK_ColorBLUE, SK_ColorRED, SK_ColorBLUE, SK_ColorRED, SK_ColorBLUE},
707e5598a004d0aceb630707053566bee523feea66dandov            {SK_ColorRED, SK_ColorBLUE, SK_ColorRED, SK_ColorBLUE, SK_ColorRED},
717e5598a004d0aceb630707053566bee523feea66dandov        };
727e5598a004d0aceb630707053566bee523feea66dandov
737e5598a004d0aceb630707053566bee523feea66dandov        SkPoint texCoords[4][5] = {
747e5598a004d0aceb630707053566bee523feea66dandov            {{0.0f,0.0f}, {1.0f,0.0f}, {2.0f,0.0f}, {3.0f,0.0f}, {4.0f,0.0f}},
757e5598a004d0aceb630707053566bee523feea66dandov            {{0.0f,1.0f}, {1.0f,1.0f}, {2.0f,1.0f}, {3.0f,1.0f}, {4.0f,1.0f}},
767e5598a004d0aceb630707053566bee523feea66dandov            {{0.0f,2.0f}, {1.0f,2.0f}, {2.0f,2.0f}, {3.0f,2.0f}, {4.0f,2.0f}},
777e5598a004d0aceb630707053566bee523feea66dandov            {{0.0f,3.0f}, {1.0f,3.0f}, {2.0f,3.0f}, {3.0f,3.0f}, {4.0f,3.0f}},
787e5598a004d0aceb630707053566bee523feea66dandov        };
797e5598a004d0aceb630707053566bee523feea66dandov
807e5598a004d0aceb630707053566bee523feea66dandov        SkPoint hrzCtrl[4][8] = {
817e5598a004d0aceb630707053566bee523feea66dandov            {{75,30},{125,45},{175,70},{225,20},{275,50},{325,50},{375,5},{425,90}},
827e5598a004d0aceb630707053566bee523feea66dandov            {{75,150},{125,150},{175,150},{225,150},{275,150},{325,150},{375,150},{425,150}},
837e5598a004d0aceb630707053566bee523feea66dandov            {{75,250},{125,250},{175,250},{225,250},{275,200},{325,150},{375,250},{425,250}},
847e5598a004d0aceb630707053566bee523feea66dandov            {{75,350},{125,350},{175,350},{225,350},{275,350},{325,350},{375,350},{425,350}}
857e5598a004d0aceb630707053566bee523feea66dandov        };
867e5598a004d0aceb630707053566bee523feea66dandov
877e5598a004d0aceb630707053566bee523feea66dandov        SkPoint vrtCtrl[6][5] = {
887e5598a004d0aceb630707053566bee523feea66dandov            {{50,75},{150,75},{250,75},{350,75},{450,75}},
897e5598a004d0aceb630707053566bee523feea66dandov            {{50,125},{150,125},{250,125},{350,125},{450,125}},
907e5598a004d0aceb630707053566bee523feea66dandov            {{50,175},{150,175},{220,225},{350,175},{470,225}},
917e5598a004d0aceb630707053566bee523feea66dandov            {{50,225},{150,225},{220,175},{350,225},{470,155}},
927e5598a004d0aceb630707053566bee523feea66dandov            {{50,275},{150,275},{250,275},{350,275},{400,305}},
937e5598a004d0aceb630707053566bee523feea66dandov            {{50,325},{150,325},{250,325},{350,325},{450,325}}
947e5598a004d0aceb630707053566bee523feea66dandov        };
957e5598a004d0aceb630707053566bee523feea66dandov
967e5598a004d0aceb630707053566bee523feea66dandov        static const int kRows = 3;
977e5598a004d0aceb630707053566bee523feea66dandov        static const int kCols = 4;
987e5598a004d0aceb630707053566bee523feea66dandov
997e5598a004d0aceb630707053566bee523feea66dandov        fGrid.reset(kRows, kCols, SkPatchGrid::kColors_VertexType, NULL);
1007e5598a004d0aceb630707053566bee523feea66dandov        for (int i = 0; i < kRows; i++) {
1017e5598a004d0aceb630707053566bee523feea66dandov            for (int j = 0; j < kCols; j++) {
1027e5598a004d0aceb630707053566bee523feea66dandov                SkPoint points[12];
1037e5598a004d0aceb630707053566bee523feea66dandov
1047e5598a004d0aceb630707053566bee523feea66dandov                //set corners
1057e5598a004d0aceb630707053566bee523feea66dandov                points[SkPatchUtils::kTopP0_CubicCtrlPts] = vertices[i][j];
1067e5598a004d0aceb630707053566bee523feea66dandov                points[SkPatchUtils::kTopP3_CubicCtrlPts] = vertices[i][j + 1];
1077e5598a004d0aceb630707053566bee523feea66dandov                points[SkPatchUtils::kBottomP0_CubicCtrlPts] = vertices[i + 1][j];
1087e5598a004d0aceb630707053566bee523feea66dandov                points[SkPatchUtils::kBottomP3_CubicCtrlPts] = vertices[i + 1][j + 1];
1097e5598a004d0aceb630707053566bee523feea66dandov
1107e5598a004d0aceb630707053566bee523feea66dandov                points[SkPatchUtils::kTopP1_CubicCtrlPts] = hrzCtrl[i][j * 2];
1117e5598a004d0aceb630707053566bee523feea66dandov                points[SkPatchUtils::kTopP2_CubicCtrlPts] = hrzCtrl[i][j * 2 + 1];
1127e5598a004d0aceb630707053566bee523feea66dandov                points[SkPatchUtils::kBottomP1_CubicCtrlPts] = hrzCtrl[i + 1][j * 2];
1137e5598a004d0aceb630707053566bee523feea66dandov                points[SkPatchUtils::kBottomP2_CubicCtrlPts] = hrzCtrl[i + 1][j * 2 + 1];
1147e5598a004d0aceb630707053566bee523feea66dandov
1157e5598a004d0aceb630707053566bee523feea66dandov                points[SkPatchUtils::kLeftP1_CubicCtrlPts] = vrtCtrl[i * 2][j];
1167e5598a004d0aceb630707053566bee523feea66dandov                points[SkPatchUtils::kLeftP2_CubicCtrlPts] = vrtCtrl[i * 2 + 1][j];
1177e5598a004d0aceb630707053566bee523feea66dandov                points[SkPatchUtils::kRightP1_CubicCtrlPts] = vrtCtrl[i * 2][j + 1];
1187e5598a004d0aceb630707053566bee523feea66dandov                points[SkPatchUtils::kRightP2_CubicCtrlPts] = vrtCtrl[i * 2 + 1][j + 1];
1197e5598a004d0aceb630707053566bee523feea66dandov
1207e5598a004d0aceb630707053566bee523feea66dandov                SkColor colors[4];
1217e5598a004d0aceb630707053566bee523feea66dandov                colors[0] = cornerColors[i][j];
1227e5598a004d0aceb630707053566bee523feea66dandov                colors[1] = cornerColors[i][j + 1];
1237e5598a004d0aceb630707053566bee523feea66dandov                colors[3] = cornerColors[i + 1][j];
1247e5598a004d0aceb630707053566bee523feea66dandov                colors[2] = cornerColors[i + 1][j + 1];
1257e5598a004d0aceb630707053566bee523feea66dandov
1267e5598a004d0aceb630707053566bee523feea66dandov                SkPoint texs[4];
1277e5598a004d0aceb630707053566bee523feea66dandov                texs[0] = texCoords[i][j];
1287e5598a004d0aceb630707053566bee523feea66dandov                texs[1] = texCoords[i][j + 1];
1297e5598a004d0aceb630707053566bee523feea66dandov                texs[3] = texCoords[i + 1][j];
1307e5598a004d0aceb630707053566bee523feea66dandov                texs[2] = texCoords[i + 1][j + 1];
1317e5598a004d0aceb630707053566bee523feea66dandov
1327e5598a004d0aceb630707053566bee523feea66dandov                switch (fVertexMode) {
1337e5598a004d0aceb630707053566bee523feea66dandov                    case kNone_VertexMode:
1347e5598a004d0aceb630707053566bee523feea66dandov                        fGrid.setPatch(j, i, points, NULL, NULL);
1357e5598a004d0aceb630707053566bee523feea66dandov                        break;
1367e5598a004d0aceb630707053566bee523feea66dandov                    case kColors_VertexMode:
1377e5598a004d0aceb630707053566bee523feea66dandov                        fGrid.setPatch(j, i, points, colors, NULL);
1387e5598a004d0aceb630707053566bee523feea66dandov                        break;
1397e5598a004d0aceb630707053566bee523feea66dandov                    case kTexCoords_VertexMode:
1407e5598a004d0aceb630707053566bee523feea66dandov                        fGrid.setPatch(j, i, points, NULL, texs);
1417e5598a004d0aceb630707053566bee523feea66dandov                        break;
1427e5598a004d0aceb630707053566bee523feea66dandov                    case kBoth_VertexMode:
1437e5598a004d0aceb630707053566bee523feea66dandov                        fGrid.setPatch(j, i, points, colors, texs);
1447e5598a004d0aceb630707053566bee523feea66dandov                        break;
1457e5598a004d0aceb630707053566bee523feea66dandov                    default:
1467e5598a004d0aceb630707053566bee523feea66dandov                        break;
1477e5598a004d0aceb630707053566bee523feea66dandov                }
1487e5598a004d0aceb630707053566bee523feea66dandov            }
1497e5598a004d0aceb630707053566bee523feea66dandov        }
1507e5598a004d0aceb630707053566bee523feea66dandov    }
1517e5598a004d0aceb630707053566bee523feea66dandov
1527e5598a004d0aceb630707053566bee523feea66dandov    // override this method to change the shader
1537e5598a004d0aceb630707053566bee523feea66dandov    SkShader* createShader() {
1547e5598a004d0aceb630707053566bee523feea66dandov        const SkColor colors[] = {
1557e5598a004d0aceb630707053566bee523feea66dandov            SK_ColorRED, SK_ColorCYAN, SK_ColorGREEN, SK_ColorWHITE,
1567e5598a004d0aceb630707053566bee523feea66dandov            SK_ColorMAGENTA, SK_ColorBLUE, SK_ColorYELLOW,
1577e5598a004d0aceb630707053566bee523feea66dandov        };
1587e5598a004d0aceb630707053566bee523feea66dandov        const SkPoint pts[] = { { 200.f / 4.f, 0.f }, { 3.f * 200.f / 4, 200.f } };
1597e5598a004d0aceb630707053566bee523feea66dandov
1607e5598a004d0aceb630707053566bee523feea66dandov        return SkGradientShader::CreateLinear(pts, colors, NULL,
1617e5598a004d0aceb630707053566bee523feea66dandov                                              SK_ARRAY_COUNT(colors),
1627e5598a004d0aceb630707053566bee523feea66dandov                                              SkShader::kMirror_TileMode);
1637e5598a004d0aceb630707053566bee523feea66dandov    }
1647e5598a004d0aceb630707053566bee523feea66dandov
1657e5598a004d0aceb630707053566bee523feea66dandovprotected:
1667e5598a004d0aceb630707053566bee523feea66dandov    virtual const char* onGetName() SK_OVERRIDE {
1677e5598a004d0aceb630707053566bee523feea66dandov        SkString vertexMode;
1687e5598a004d0aceb630707053566bee523feea66dandov        switch (fVertexMode) {
1697e5598a004d0aceb630707053566bee523feea66dandov            case kNone_VertexMode:
1707e5598a004d0aceb630707053566bee523feea66dandov                vertexMode.set("meshlines");
1717e5598a004d0aceb630707053566bee523feea66dandov                break;
1727e5598a004d0aceb630707053566bee523feea66dandov            case kColors_VertexMode:
1737e5598a004d0aceb630707053566bee523feea66dandov                vertexMode.set("colors");
1747e5598a004d0aceb630707053566bee523feea66dandov                break;
1757e5598a004d0aceb630707053566bee523feea66dandov            case kTexCoords_VertexMode:
1767e5598a004d0aceb630707053566bee523feea66dandov                vertexMode.set("texs");
1777e5598a004d0aceb630707053566bee523feea66dandov                break;
1787e5598a004d0aceb630707053566bee523feea66dandov            case kBoth_VertexMode:
1797e5598a004d0aceb630707053566bee523feea66dandov                vertexMode.set("colors_texs");
1807e5598a004d0aceb630707053566bee523feea66dandov                break;
1817e5598a004d0aceb630707053566bee523feea66dandov            default:
1827e5598a004d0aceb630707053566bee523feea66dandov                break;
1837e5598a004d0aceb630707053566bee523feea66dandov        }
1847e5598a004d0aceb630707053566bee523feea66dandov
1857e5598a004d0aceb630707053566bee523feea66dandov        SkString size;
1867e5598a004d0aceb630707053566bee523feea66dandov        switch (fSize) {
1877e5598a004d0aceb630707053566bee523feea66dandov            case kSmall_Size:
1887e5598a004d0aceb630707053566bee523feea66dandov                size.set("small");
1897e5598a004d0aceb630707053566bee523feea66dandov                break;
1907e5598a004d0aceb630707053566bee523feea66dandov            case kMedium_Size:
1917e5598a004d0aceb630707053566bee523feea66dandov                size.set("medium");
1927e5598a004d0aceb630707053566bee523feea66dandov                break;
1937e5598a004d0aceb630707053566bee523feea66dandov            case kBig_Size:
1947e5598a004d0aceb630707053566bee523feea66dandov                size.set("big");
1957e5598a004d0aceb630707053566bee523feea66dandov                break;
1967e5598a004d0aceb630707053566bee523feea66dandov            default:
1977e5598a004d0aceb630707053566bee523feea66dandov                break;
1987e5598a004d0aceb630707053566bee523feea66dandov        }
1997e5598a004d0aceb630707053566bee523feea66dandov        fName.printf("patch_grid_%s_%s", vertexMode.c_str(), size.c_str());
2007e5598a004d0aceb630707053566bee523feea66dandov        return fName.c_str();
2017e5598a004d0aceb630707053566bee523feea66dandov    }
2027e5598a004d0aceb630707053566bee523feea66dandov
2037e5598a004d0aceb630707053566bee523feea66dandov    virtual void onPreDraw() SK_OVERRIDE {
2047e5598a004d0aceb630707053566bee523feea66dandov        this->setGrid();
2057e5598a004d0aceb630707053566bee523feea66dandov        switch (fVertexMode) {
2067e5598a004d0aceb630707053566bee523feea66dandov            case kTexCoords_VertexMode:
2077e5598a004d0aceb630707053566bee523feea66dandov            case kBoth_VertexMode:
2087e5598a004d0aceb630707053566bee523feea66dandov                fPaint.setShader(createShader())->unref();
2097e5598a004d0aceb630707053566bee523feea66dandov                break;
2107e5598a004d0aceb630707053566bee523feea66dandov            default:
2117e5598a004d0aceb630707053566bee523feea66dandov                fPaint.setShader(NULL);
2127e5598a004d0aceb630707053566bee523feea66dandov                break;
2137e5598a004d0aceb630707053566bee523feea66dandov        }
2147e5598a004d0aceb630707053566bee523feea66dandov        this->setupPaint(&fPaint);
2157e5598a004d0aceb630707053566bee523feea66dandov    }
2167e5598a004d0aceb630707053566bee523feea66dandov
2177e5598a004d0aceb630707053566bee523feea66dandov    virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE {
2187e5598a004d0aceb630707053566bee523feea66dandov        this->setScale(canvas);
2197e5598a004d0aceb630707053566bee523feea66dandov        for (int i = 0; i < loops; i++) {
2207e5598a004d0aceb630707053566bee523feea66dandov            fGrid.draw(canvas, fPaint);
2217e5598a004d0aceb630707053566bee523feea66dandov        }
2227e5598a004d0aceb630707053566bee523feea66dandov    }
2237e5598a004d0aceb630707053566bee523feea66dandov
2247e5598a004d0aceb630707053566bee523feea66dandov    SkPaint     fPaint;
2257e5598a004d0aceb630707053566bee523feea66dandov    SkString    fName;
2267e5598a004d0aceb630707053566bee523feea66dandov    SkPatchGrid fGrid;
2277e5598a004d0aceb630707053566bee523feea66dandov    VertexMode  fVertexMode;
2287e5598a004d0aceb630707053566bee523feea66dandov    Size        fSize;
2297e5598a004d0aceb630707053566bee523feea66dandov
2307e5598a004d0aceb630707053566bee523feea66dandov    typedef Benchmark INHERITED;
2317e5598a004d0aceb630707053566bee523feea66dandov};
2327e5598a004d0aceb630707053566bee523feea66dandov
2337e5598a004d0aceb630707053566bee523feea66dandov
2347e5598a004d0aceb630707053566bee523feea66dandov///////////////////////////////////////////////////////////////////////////////
2357e5598a004d0aceb630707053566bee523feea66dandov
2367e5598a004d0aceb630707053566bee523feea66dandovDEF_BENCH( return new PatchGridBench(PatchGridBench::kSmall_Size,
2377e5598a004d0aceb630707053566bee523feea66dandov                                     PatchGridBench::kNone_VertexMode); )
2387e5598a004d0aceb630707053566bee523feea66dandovDEF_BENCH( return new PatchGridBench(PatchGridBench::kSmall_Size,
2397e5598a004d0aceb630707053566bee523feea66dandov                                     PatchGridBench::kColors_VertexMode); )
2407e5598a004d0aceb630707053566bee523feea66dandovDEF_BENCH( return new PatchGridBench(PatchGridBench::kSmall_Size,
2417e5598a004d0aceb630707053566bee523feea66dandov                                     PatchGridBench::kTexCoords_VertexMode); )
2427e5598a004d0aceb630707053566bee523feea66dandovDEF_BENCH( return new PatchGridBench(PatchGridBench::kSmall_Size,
2437e5598a004d0aceb630707053566bee523feea66dandov                                     PatchGridBench::kBoth_VertexMode); )
2447e5598a004d0aceb630707053566bee523feea66dandovDEF_BENCH( return new PatchGridBench(PatchGridBench::kMedium_Size,
2457e5598a004d0aceb630707053566bee523feea66dandov                                     PatchGridBench::kNone_VertexMode); )
2467e5598a004d0aceb630707053566bee523feea66dandovDEF_BENCH( return new PatchGridBench(PatchGridBench::kMedium_Size,
2477e5598a004d0aceb630707053566bee523feea66dandov                                     PatchGridBench::kColors_VertexMode); )
2487e5598a004d0aceb630707053566bee523feea66dandovDEF_BENCH( return new PatchGridBench(PatchGridBench::kMedium_Size,
2497e5598a004d0aceb630707053566bee523feea66dandov                                     PatchGridBench::kTexCoords_VertexMode); )
2507e5598a004d0aceb630707053566bee523feea66dandovDEF_BENCH( return new PatchGridBench(PatchGridBench::kMedium_Size,
2517e5598a004d0aceb630707053566bee523feea66dandov                                     PatchGridBench::kBoth_VertexMode); )
2527e5598a004d0aceb630707053566bee523feea66dandovDEF_BENCH( return new PatchGridBench(PatchGridBench::kBig_Size,
2537e5598a004d0aceb630707053566bee523feea66dandov                                     PatchGridBench::kNone_VertexMode); )
2547e5598a004d0aceb630707053566bee523feea66dandovDEF_BENCH( return new PatchGridBench(PatchGridBench::kBig_Size,
2557e5598a004d0aceb630707053566bee523feea66dandov                                     PatchGridBench::kColors_VertexMode); )
2567e5598a004d0aceb630707053566bee523feea66dandovDEF_BENCH( return new PatchGridBench(PatchGridBench::kBig_Size,
2577e5598a004d0aceb630707053566bee523feea66dandov                                     PatchGridBench::kTexCoords_VertexMode); )
2587e5598a004d0aceb630707053566bee523feea66dandovDEF_BENCH( return new PatchGridBench(PatchGridBench::kBig_Size,
2597e5598a004d0aceb630707053566bee523feea66dandov                                     PatchGridBench::kBoth_VertexMode); )
260