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