1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */ 8f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "Benchmark.h" 984e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com#include "SkBitmap.h" 1084e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com#include "SkCanvas.h" 1184e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com#include "SkColorPriv.h" 1284e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com#include "SkGradientShader.h" 1384e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com#include "SkPaint.h" 1484e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com#include "SkShader.h" 1584e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com#include "SkString.h" 1684e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com 1784e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.comstruct GradData { 1884e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com int fCount; 1984e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com const SkColor* fColors; 2084e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com const SkScalar* fPos; 215396a048d2f9f32fd3977d44f580c86028f4b1b9commit-bot@chromium.org const char* fName; 2284e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com}; 2384e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com 2484e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.comstatic const SkColor gColors[] = { 25b686539ab5270c66ab4994b4d6a8740143dec73acommit-bot@chromium.org SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK, 265396a048d2f9f32fd3977d44f580c86028f4b1b9commit-bot@chromium.org SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK, 275396a048d2f9f32fd3977d44f580c86028f4b1b9commit-bot@chromium.org SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK, 285396a048d2f9f32fd3977d44f580c86028f4b1b9commit-bot@chromium.org SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK, 295396a048d2f9f32fd3977d44f580c86028f4b1b9commit-bot@chromium.org SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK, 305396a048d2f9f32fd3977d44f580c86028f4b1b9commit-bot@chromium.org SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK, 315396a048d2f9f32fd3977d44f580c86028f4b1b9commit-bot@chromium.org SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK, 325396a048d2f9f32fd3977d44f580c86028f4b1b9commit-bot@chromium.org SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK, 335396a048d2f9f32fd3977d44f580c86028f4b1b9commit-bot@chromium.org SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK, 345396a048d2f9f32fd3977d44f580c86028f4b1b9commit-bot@chromium.org SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK, // 10 lines, 50 colors 3584e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com}; 3684e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com 37f461a8fdf642ba713dcdfb217534652df1eac278krajcevskistatic const SkColor gShallowColors[] = { 0xFF555555, 0xFF444444 }; 38f461a8fdf642ba713dcdfb217534652df1eac278krajcevski 393400f4b00aaf9159713d9a7bb0a4f828fd6899c3commit-bot@chromium.org// We have several special-cases depending on the number (and spacing) of colors, so 403400f4b00aaf9159713d9a7bb0a4f828fd6899c3commit-bot@chromium.org// try to exercise those here. 4184e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.comstatic const GradData gGradData[] = { 425396a048d2f9f32fd3977d44f580c86028f4b1b9commit-bot@chromium.org { 2, gColors, NULL, "" }, 435396a048d2f9f32fd3977d44f580c86028f4b1b9commit-bot@chromium.org { 50, gColors, NULL, "_hicolor" }, // many color gradient 443400f4b00aaf9159713d9a7bb0a4f828fd6899c3commit-bot@chromium.org { 3, gColors, NULL, "_3color" }, 45f461a8fdf642ba713dcdfb217534652df1eac278krajcevski { 2, gShallowColors, NULL, "_shallow" }, 4684e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com}; 4784e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com 485ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com/// Ignores scale 4984e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.comstatic SkShader* MakeLinear(const SkPoint pts[2], const GradData& data, 5083f23d87f1d67e6e73873e1ef7cda621c43703a0commit-bot@chromium.org SkShader::TileMode tm, float scale) { 5183f23d87f1d67e6e73873e1ef7cda621c43703a0commit-bot@chromium.org return SkGradientShader::CreateLinear(pts, data.fColors, data.fPos, data.fCount, tm); 5284e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com} 5384e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com 5484e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.comstatic SkShader* MakeRadial(const SkPoint pts[2], const GradData& data, 5583f23d87f1d67e6e73873e1ef7cda621c43703a0commit-bot@chromium.org SkShader::TileMode tm, float scale) { 5684e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com SkPoint center; 5784e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com center.set(SkScalarAve(pts[0].fX, pts[1].fX), 5884e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com SkScalarAve(pts[0].fY, pts[1].fY)); 595ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com return SkGradientShader::CreateRadial(center, center.fX * scale, 605ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com data.fColors, 6183f23d87f1d67e6e73873e1ef7cda621c43703a0commit-bot@chromium.org data.fPos, data.fCount, tm); 6284e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com} 6384e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com 645ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com/// Ignores scale 6584e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.comstatic SkShader* MakeSweep(const SkPoint pts[2], const GradData& data, 6683f23d87f1d67e6e73873e1ef7cda621c43703a0commit-bot@chromium.org SkShader::TileMode tm, float scale) { 6784e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com SkPoint center; 6884e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com center.set(SkScalarAve(pts[0].fX, pts[1].fX), 6984e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com SkScalarAve(pts[0].fY, pts[1].fY)); 7084e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com return SkGradientShader::CreateSweep(center.fX, center.fY, data.fColors, 7183f23d87f1d67e6e73873e1ef7cda621c43703a0commit-bot@chromium.org data.fPos, data.fCount); 7284e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com} 7384e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com 745ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com/// Ignores scale 7584e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.comstatic SkShader* Make2Radial(const SkPoint pts[2], const GradData& data, 7683f23d87f1d67e6e73873e1ef7cda621c43703a0commit-bot@chromium.org SkShader::TileMode tm, float scale) { 7784e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com SkPoint center0, center1; 7884e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com center0.set(SkScalarAve(pts[0].fX, pts[1].fX), 7984e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com SkScalarAve(pts[0].fY, pts[1].fY)); 8084e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), 8184e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); 8284e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com return SkGradientShader::CreateTwoPointRadial( 83258e0bf00cbb6fcc9c1b0db1a6b7dbd90b1b83f6reed@google.com center1, (pts[1].fX - pts[0].fX) / 7, 84258e0bf00cbb6fcc9c1b0db1a6b7dbd90b1b83f6reed@google.com center0, (pts[1].fX - pts[0].fX) / 2, 8583f23d87f1d67e6e73873e1ef7cda621c43703a0commit-bot@chromium.org data.fColors, data.fPos, data.fCount, tm); 86258e0bf00cbb6fcc9c1b0db1a6b7dbd90b1b83f6reed@google.com} 87258e0bf00cbb6fcc9c1b0db1a6b7dbd90b1b83f6reed@google.com 88258e0bf00cbb6fcc9c1b0db1a6b7dbd90b1b83f6reed@google.com/// Ignores scale 89258e0bf00cbb6fcc9c1b0db1a6b7dbd90b1b83f6reed@google.comstatic SkShader* MakeConical(const SkPoint pts[2], const GradData& data, 9083f23d87f1d67e6e73873e1ef7cda621c43703a0commit-bot@chromium.org SkShader::TileMode tm, float scale) { 91258e0bf00cbb6fcc9c1b0db1a6b7dbd90b1b83f6reed@google.com SkPoint center0, center1; 92258e0bf00cbb6fcc9c1b0db1a6b7dbd90b1b83f6reed@google.com center0.set(SkScalarAve(pts[0].fX, pts[1].fX), 93258e0bf00cbb6fcc9c1b0db1a6b7dbd90b1b83f6reed@google.com SkScalarAve(pts[0].fY, pts[1].fY)); 94258e0bf00cbb6fcc9c1b0db1a6b7dbd90b1b83f6reed@google.com center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), 95258e0bf00cbb6fcc9c1b0db1a6b7dbd90b1b83f6reed@google.com SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); 96258e0bf00cbb6fcc9c1b0db1a6b7dbd90b1b83f6reed@google.com return SkGradientShader::CreateTwoPointConical(center1, (pts[1].fX - pts[0].fX) / 7, 97258e0bf00cbb6fcc9c1b0db1a6b7dbd90b1b83f6reed@google.com center0, (pts[1].fX - pts[0].fX) / 2, 9883f23d87f1d67e6e73873e1ef7cda621c43703a0commit-bot@chromium.org data.fColors, data.fPos, data.fCount, tm); 9984e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com} 10084e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com 10195f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org/// Ignores scale 10295f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.orgstatic SkShader* MakeConicalZeroRad(const SkPoint pts[2], const GradData& data, 10383f23d87f1d67e6e73873e1ef7cda621c43703a0commit-bot@chromium.org SkShader::TileMode tm, float scale) { 10495f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org SkPoint center0, center1; 10595f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org center0.set(SkScalarAve(pts[0].fX, pts[1].fX), 10695f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org SkScalarAve(pts[0].fY, pts[1].fY)); 10795f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), 10895f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); 10995f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org return SkGradientShader::CreateTwoPointConical(center1, 0.0, 11095f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org center0, (pts[1].fX - pts[0].fX) / 2, 11183f23d87f1d67e6e73873e1ef7cda621c43703a0commit-bot@chromium.org data.fColors, data.fPos, data.fCount, tm); 11295f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org} 11395f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org 11495f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org/// Ignores scale 11595f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.orgstatic SkShader* MakeConicalOutside(const SkPoint pts[2], const GradData& data, 11683f23d87f1d67e6e73873e1ef7cda621c43703a0commit-bot@chromium.org SkShader::TileMode tm, float scale) { 11795f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org SkPoint center0, center1; 11895f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org SkScalar radius0 = SkScalarDiv(pts[1].fX - pts[0].fX, 10); 11995f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3); 12095f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org center0.set(pts[0].fX + radius0, pts[0].fY + radius0); 12195f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org center1.set(pts[1].fX - radius1, pts[1].fY - radius1); 12295f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org return SkGradientShader::CreateTwoPointConical(center0, radius0, 12395f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org center1, radius1, 12495f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org data.fColors, data.fPos, 12583f23d87f1d67e6e73873e1ef7cda621c43703a0commit-bot@chromium.org data.fCount, tm); 12695f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org} 12795f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org 12895f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org/// Ignores scale 12995f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.orgstatic SkShader* MakeConicalOutsideZeroRad(const SkPoint pts[2], const GradData& data, 13083f23d87f1d67e6e73873e1ef7cda621c43703a0commit-bot@chromium.org SkShader::TileMode tm, float scale) { 13195f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org SkPoint center0, center1; 13295f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org SkScalar radius0 = SkScalarDiv(pts[1].fX - pts[0].fX, 10); 13395f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3); 13495f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org center0.set(pts[0].fX + radius0, pts[0].fY + radius0); 13595f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org center1.set(pts[1].fX - radius1, pts[1].fY - radius1); 13695f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org return SkGradientShader::CreateTwoPointConical(center0, 0.0, 13795f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org center1, radius1, 13895f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org data.fColors, data.fPos, 13983f23d87f1d67e6e73873e1ef7cda621c43703a0commit-bot@chromium.org data.fCount, tm); 14095f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org} 14195f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org 14284e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.comtypedef SkShader* (*GradMaker)(const SkPoint pts[2], const GradData& data, 14383f23d87f1d67e6e73873e1ef7cda621c43703a0commit-bot@chromium.org SkShader::TileMode tm, float scale); 14484e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com 14584e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.comstatic const struct { 14684e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com GradMaker fMaker; 14784e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com const char* fName; 14884e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com} gGrads[] = { 14995f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org { MakeLinear, "linear" }, 15095f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org { MakeRadial, "radial1" }, 15195f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org { MakeSweep, "sweep" }, 15295f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org { Make2Radial, "radial2" }, 15395f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org { MakeConical, "conical" }, 15495f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org { MakeConicalZeroRad, "conicalZero" }, 15595f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org { MakeConicalOutside, "conicalOut" }, 15695f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org { MakeConicalOutsideZeroRad, "conicalOutZero" }, 15784e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com}; 15884e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com 15984e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.comenum GradType { // these must match the order in gGrads 16084e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com kLinear_GradType, 16184e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com kRadial_GradType, 16284e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com kSweep_GradType, 163258e0bf00cbb6fcc9c1b0db1a6b7dbd90b1b83f6reed@google.com kRadial2_GradType, 16495f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org kConical_GradType, 16595f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org kConicalZero_GradType, 16695f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org kConicalOut_GradType, 16795f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.org kConicalOutZero_GradType 16884e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com}; 16984e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com 1705ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.comenum GeomType { 1715ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com kRect_GeomType, 1725ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com kOval_GeomType 1735ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com}; 1745ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com 17572415161dde26f6aa2b206a8eaa0abaff2f782dereed@google.comstatic const char* tilemodename(SkShader::TileMode tm) { 17672415161dde26f6aa2b206a8eaa0abaff2f782dereed@google.com switch (tm) { 17772415161dde26f6aa2b206a8eaa0abaff2f782dereed@google.com case SkShader::kClamp_TileMode: 17872415161dde26f6aa2b206a8eaa0abaff2f782dereed@google.com return "clamp"; 17972415161dde26f6aa2b206a8eaa0abaff2f782dereed@google.com case SkShader::kRepeat_TileMode: 18072415161dde26f6aa2b206a8eaa0abaff2f782dereed@google.com return "repeat"; 18172415161dde26f6aa2b206a8eaa0abaff2f782dereed@google.com case SkShader::kMirror_TileMode: 18272415161dde26f6aa2b206a8eaa0abaff2f782dereed@google.com return "mirror"; 18372415161dde26f6aa2b206a8eaa0abaff2f782dereed@google.com default: 184330313a8a8343876ee596da39da06a5d69badd9cmtklein@google.com SkDEBUGFAIL("unknown tilemode"); 18572415161dde26f6aa2b206a8eaa0abaff2f782dereed@google.com return "error"; 18672415161dde26f6aa2b206a8eaa0abaff2f782dereed@google.com } 18772415161dde26f6aa2b206a8eaa0abaff2f782dereed@google.com} 18872415161dde26f6aa2b206a8eaa0abaff2f782dereed@google.com 1895ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.comstatic const char* geomtypename(GeomType gt) { 1905ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com switch (gt) { 1915ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com case kRect_GeomType: 1925ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com return "rectangle"; 1935ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com case kOval_GeomType: 1945ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com return "oval"; 1955ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com default: 196330313a8a8343876ee596da39da06a5d69badd9cmtklein@google.com SkDEBUGFAIL("unknown geometry type"); 1975ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com return "error"; 1985ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com } 1995ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com} 2005ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com 20184e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com/////////////////////////////////////////////////////////////////////////////// 20284e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com 203f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass GradientBench : public Benchmark { 20484e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com SkString fName; 20584e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com SkShader* fShader; 206f461a8fdf642ba713dcdfb217534652df1eac278krajcevski bool fDither; 20784e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com enum { 20884e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com W = 400, 20984e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com H = 400, 210b120bd986ec5e5eeaacdbb8aec04cbe352f98434commit-bot@chromium.org kRepeat = 15, 21184e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com }; 21284e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.compublic: 213f461a8fdf642ba713dcdfb217534652df1eac278krajcevski SkShader* makeShader(GradType gradType, GradData data, SkShader::TileMode tm, float scale) { 214f461a8fdf642ba713dcdfb217534652df1eac278krajcevski const SkPoint pts[2] = { 215f461a8fdf642ba713dcdfb217534652df1eac278krajcevski { 0, 0 }, 216f461a8fdf642ba713dcdfb217534652df1eac278krajcevski { SkIntToScalar(W), SkIntToScalar(H) } 217f461a8fdf642ba713dcdfb217534652df1eac278krajcevski }; 218f461a8fdf642ba713dcdfb217534652df1eac278krajcevski 219f461a8fdf642ba713dcdfb217534652df1eac278krajcevski return gGrads[gradType].fMaker(pts, data, tm, scale); 220f461a8fdf642ba713dcdfb217534652df1eac278krajcevski } 221f461a8fdf642ba713dcdfb217534652df1eac278krajcevski 222410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com GradientBench(GradType gradType, 2235396a048d2f9f32fd3977d44f580c86028f4b1b9commit-bot@chromium.org GradData data = gGradData[0], 2245ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com SkShader::TileMode tm = SkShader::kClamp_TileMode, 2255ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com GeomType geomType = kRect_GeomType, 2263400f4b00aaf9159713d9a7bb0a4f828fd6899c3commit-bot@chromium.org float scale = 1.0f) { 2275ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com fName.printf("gradient_%s_%s", gGrads[gradType].fName, 2285ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com tilemodename(tm)); 2295ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com if (geomType != kRect_GeomType) { 2305ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com fName.append("_"); 2315ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com fName.append(geomtypename(geomType)); 2325ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com } 23384e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com 2343400f4b00aaf9159713d9a7bb0a4f828fd6899c3commit-bot@chromium.org if (scale != 1.f) { 2353400f4b00aaf9159713d9a7bb0a4f828fd6899c3commit-bot@chromium.org fName.appendf("_scale_%g", scale); 2363400f4b00aaf9159713d9a7bb0a4f828fd6899c3commit-bot@chromium.org } 2373400f4b00aaf9159713d9a7bb0a4f828fd6899c3commit-bot@chromium.org 2385396a048d2f9f32fd3977d44f580c86028f4b1b9commit-bot@chromium.org fName.append(data.fName); 2395396a048d2f9f32fd3977d44f580c86028f4b1b9commit-bot@chromium.org 240f461a8fdf642ba713dcdfb217534652df1eac278krajcevski fDither = false; 241f461a8fdf642ba713dcdfb217534652df1eac278krajcevski fShader = this->makeShader(gradType, data, tm, scale); 2425ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com fGeomType = geomType; 24384e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com } 24484e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com 245f461a8fdf642ba713dcdfb217534652df1eac278krajcevski GradientBench(GradType gradType, GradData data, bool dither) { 246f461a8fdf642ba713dcdfb217534652df1eac278krajcevski const char *tmname = tilemodename(SkShader::kClamp_TileMode); 247f461a8fdf642ba713dcdfb217534652df1eac278krajcevski fName.printf("gradient_%s_%s", gGrads[gradType].fName, tmname); 248f461a8fdf642ba713dcdfb217534652df1eac278krajcevski fName.append(data.fName); 249f461a8fdf642ba713dcdfb217534652df1eac278krajcevski 250f461a8fdf642ba713dcdfb217534652df1eac278krajcevski fDither = dither; 251f461a8fdf642ba713dcdfb217534652df1eac278krajcevski if (dither) { 252f461a8fdf642ba713dcdfb217534652df1eac278krajcevski fName.appendf("_dither"); 253f461a8fdf642ba713dcdfb217534652df1eac278krajcevski } 254f461a8fdf642ba713dcdfb217534652df1eac278krajcevski 255f461a8fdf642ba713dcdfb217534652df1eac278krajcevski fShader = this->makeShader(gradType, data, SkShader::kClamp_TileMode, 1.0f); 256f461a8fdf642ba713dcdfb217534652df1eac278krajcevski fGeomType = kRect_GeomType; 257f461a8fdf642ba713dcdfb217534652df1eac278krajcevski } 258f461a8fdf642ba713dcdfb217534652df1eac278krajcevski 25984e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com virtual ~GradientBench() { 26084e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com fShader->unref(); 26184e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com } 26284e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com 26384e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.comprotected: 26484e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com virtual const char* onGetName() { 26584e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com return fName.c_str(); 26684e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com } 26784e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com 2683361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org virtual void onDraw(const int loops, SkCanvas* canvas) { 26984e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com SkPaint paint; 27084e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com this->setupPaint(&paint); 27184e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com 27284e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com paint.setShader(fShader); 273f461a8fdf642ba713dcdfb217534652df1eac278krajcevski if (fDither) { 274f461a8fdf642ba713dcdfb217534652df1eac278krajcevski paint.setDither(true); 275f461a8fdf642ba713dcdfb217534652df1eac278krajcevski } 27684e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com 27784e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com SkRect r = { 0, 0, SkIntToScalar(W), SkIntToScalar(H) }; 2783361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops * kRepeat; i++) { 2795ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com switch (fGeomType) { 2805ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com case kRect_GeomType: 2815ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com canvas->drawRect(r, paint); 2825ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com break; 2835ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com case kOval_GeomType: 2845ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com canvas->drawOval(r, paint); 2855ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com break; 2865ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com } 28784e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com } 28884e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com } 28984e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com 29084e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.comprivate: 291f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina typedef Benchmark INHERITED; 2925ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com 2935ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com GeomType fGeomType; 29484e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com}; 29584e9c0801f9a2da1ca12a38250a95fd393caded1reed@google.com 296b120bd986ec5e5eeaacdbb8aec04cbe352f98434commit-bot@chromium.orgDEF_BENCH( return new GradientBench(kLinear_GradType); ) 297b120bd986ec5e5eeaacdbb8aec04cbe352f98434commit-bot@chromium.orgDEF_BENCH( return new GradientBench(kLinear_GradType, gGradData[1]); ) 298b120bd986ec5e5eeaacdbb8aec04cbe352f98434commit-bot@chromium.orgDEF_BENCH( return new GradientBench(kLinear_GradType, gGradData[2]); ) 299b120bd986ec5e5eeaacdbb8aec04cbe352f98434commit-bot@chromium.orgDEF_BENCH( return new GradientBench(kLinear_GradType, gGradData[0], SkShader::kMirror_TileMode); ) 300b120bd986ec5e5eeaacdbb8aec04cbe352f98434commit-bot@chromium.org 301b120bd986ec5e5eeaacdbb8aec04cbe352f98434commit-bot@chromium.orgDEF_BENCH( return new GradientBench(kRadial_GradType, gGradData[0]); ) 302b120bd986ec5e5eeaacdbb8aec04cbe352f98434commit-bot@chromium.orgDEF_BENCH( return new GradientBench(kRadial_GradType, gGradData[1]); ) 303b120bd986ec5e5eeaacdbb8aec04cbe352f98434commit-bot@chromium.orgDEF_BENCH( return new GradientBench(kRadial_GradType, gGradData[2]); ) 304b120bd986ec5e5eeaacdbb8aec04cbe352f98434commit-bot@chromium.org// Draw a radial gradient of radius 1/2 on a rectangle; half the lines should 305b120bd986ec5e5eeaacdbb8aec04cbe352f98434commit-bot@chromium.org// be completely pinned, the other half should pe partially pinned 306b120bd986ec5e5eeaacdbb8aec04cbe352f98434commit-bot@chromium.orgDEF_BENCH( return new GradientBench(kRadial_GradType, gGradData[0], SkShader::kClamp_TileMode, kRect_GeomType, 0.5f); ) 307b120bd986ec5e5eeaacdbb8aec04cbe352f98434commit-bot@chromium.org 308b120bd986ec5e5eeaacdbb8aec04cbe352f98434commit-bot@chromium.org// Draw a radial gradient on a circle of equal size; all the lines should 309b120bd986ec5e5eeaacdbb8aec04cbe352f98434commit-bot@chromium.org// hit the unpinned fast path (so long as GradientBench.W == H) 310b120bd986ec5e5eeaacdbb8aec04cbe352f98434commit-bot@chromium.orgDEF_BENCH( return new GradientBench(kRadial_GradType, gGradData[0], SkShader::kClamp_TileMode, kOval_GeomType); ) 311b120bd986ec5e5eeaacdbb8aec04cbe352f98434commit-bot@chromium.org 312b120bd986ec5e5eeaacdbb8aec04cbe352f98434commit-bot@chromium.orgDEF_BENCH( return new GradientBench(kRadial_GradType, gGradData[0], SkShader::kMirror_TileMode); ) 31334150b451da7d3c70a2d34e67b0285cb36932d45commit-bot@chromium.orgDEF_BENCH( return new GradientBench(kRadial_GradType, gGradData[0], SkShader::kRepeat_TileMode); ) 314b120bd986ec5e5eeaacdbb8aec04cbe352f98434commit-bot@chromium.orgDEF_BENCH( return new GradientBench(kSweep_GradType); ) 315b120bd986ec5e5eeaacdbb8aec04cbe352f98434commit-bot@chromium.orgDEF_BENCH( return new GradientBench(kSweep_GradType, gGradData[1]); ) 316b120bd986ec5e5eeaacdbb8aec04cbe352f98434commit-bot@chromium.orgDEF_BENCH( return new GradientBench(kSweep_GradType, gGradData[2]); ) 317b120bd986ec5e5eeaacdbb8aec04cbe352f98434commit-bot@chromium.orgDEF_BENCH( return new GradientBench(kRadial2_GradType); ) 318b120bd986ec5e5eeaacdbb8aec04cbe352f98434commit-bot@chromium.orgDEF_BENCH( return new GradientBench(kRadial2_GradType, gGradData[1]); ) 319b120bd986ec5e5eeaacdbb8aec04cbe352f98434commit-bot@chromium.orgDEF_BENCH( return new GradientBench(kRadial2_GradType, gGradData[0], SkShader::kMirror_TileMode); ) 320b120bd986ec5e5eeaacdbb8aec04cbe352f98434commit-bot@chromium.orgDEF_BENCH( return new GradientBench(kConical_GradType); ) 321b120bd986ec5e5eeaacdbb8aec04cbe352f98434commit-bot@chromium.orgDEF_BENCH( return new GradientBench(kConical_GradType, gGradData[1]); ) 322b120bd986ec5e5eeaacdbb8aec04cbe352f98434commit-bot@chromium.orgDEF_BENCH( return new GradientBench(kConical_GradType, gGradData[2]); ) 32395f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.orgDEF_BENCH( return new GradientBench(kConicalZero_GradType); ) 32495f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.orgDEF_BENCH( return new GradientBench(kConicalZero_GradType, gGradData[1]); ) 32595f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.orgDEF_BENCH( return new GradientBench(kConicalZero_GradType, gGradData[2]); ) 32695f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.orgDEF_BENCH( return new GradientBench(kConicalOut_GradType); ) 32795f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.orgDEF_BENCH( return new GradientBench(kConicalOut_GradType, gGradData[1]); ) 32895f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.orgDEF_BENCH( return new GradientBench(kConicalOut_GradType, gGradData[2]); ) 32995f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.orgDEF_BENCH( return new GradientBench(kConicalOutZero_GradType); ) 33095f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.orgDEF_BENCH( return new GradientBench(kConicalOutZero_GradType, gGradData[1]); ) 33195f79261addecd8c3b4e64f2f1469f9e1aa0acb2commit-bot@chromium.orgDEF_BENCH( return new GradientBench(kConicalOutZero_GradType, gGradData[2]); ) 332b120bd986ec5e5eeaacdbb8aec04cbe352f98434commit-bot@chromium.org 333f461a8fdf642ba713dcdfb217534652df1eac278krajcevski// Dithering 334f461a8fdf642ba713dcdfb217534652df1eac278krajcevskiDEF_BENCH( return new GradientBench(kLinear_GradType, gGradData[3], true); ) 335f461a8fdf642ba713dcdfb217534652df1eac278krajcevskiDEF_BENCH( return new GradientBench(kLinear_GradType, gGradData[3], false); ) 336f461a8fdf642ba713dcdfb217534652df1eac278krajcevskiDEF_BENCH( return new GradientBench(kRadial_GradType, gGradData[3], true); ) 337f461a8fdf642ba713dcdfb217534652df1eac278krajcevskiDEF_BENCH( return new GradientBench(kRadial_GradType, gGradData[3], false); ) 338f461a8fdf642ba713dcdfb217534652df1eac278krajcevskiDEF_BENCH( return new GradientBench(kSweep_GradType, gGradData[3], true); ) 339f461a8fdf642ba713dcdfb217534652df1eac278krajcevskiDEF_BENCH( return new GradientBench(kSweep_GradType, gGradData[3], false); ) 340f461a8fdf642ba713dcdfb217534652df1eac278krajcevskiDEF_BENCH( return new GradientBench(kConical_GradType, gGradData[3], true); ) 341f461a8fdf642ba713dcdfb217534652df1eac278krajcevskiDEF_BENCH( return new GradientBench(kConical_GradType, gGradData[3], false); ) 342f461a8fdf642ba713dcdfb217534652df1eac278krajcevski 343b120bd986ec5e5eeaacdbb8aec04cbe352f98434commit-bot@chromium.org/////////////////////////////////////////////////////////////////////////////// 344b120bd986ec5e5eeaacdbb8aec04cbe352f98434commit-bot@chromium.org 345f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass Gradient2Bench : public Benchmark { 34673349aa33277889d79e3e8bd8cef89cdf0310288reed@google.com SkString fName; 34773349aa33277889d79e3e8bd8cef89cdf0310288reed@google.com bool fHasAlpha; 34873349aa33277889d79e3e8bd8cef89cdf0310288reed@google.com 3498ac7a0fcef6c830935905fdaeda97cab87581ce8reed@google.compublic: 350410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com Gradient2Bench(bool hasAlpha) { 35173349aa33277889d79e3e8bd8cef89cdf0310288reed@google.com fName.printf("gradient_create_%s", hasAlpha ? "alpha" : "opaque"); 35273349aa33277889d79e3e8bd8cef89cdf0310288reed@google.com fHasAlpha = hasAlpha; 35373349aa33277889d79e3e8bd8cef89cdf0310288reed@google.com } 354fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 3558ac7a0fcef6c830935905fdaeda97cab87581ce8reed@google.comprotected: 3568ac7a0fcef6c830935905fdaeda97cab87581ce8reed@google.com virtual const char* onGetName() { 35773349aa33277889d79e3e8bd8cef89cdf0310288reed@google.com return fName.c_str(); 3588ac7a0fcef6c830935905fdaeda97cab87581ce8reed@google.com } 359fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 3603361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org virtual void onDraw(const int loops, SkCanvas* canvas) { 3618ac7a0fcef6c830935905fdaeda97cab87581ce8reed@google.com SkPaint paint; 3628ac7a0fcef6c830935905fdaeda97cab87581ce8reed@google.com this->setupPaint(&paint); 363fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 3648ac7a0fcef6c830935905fdaeda97cab87581ce8reed@google.com const SkRect r = { 0, 0, SkIntToScalar(4), SkIntToScalar(4) }; 3651ca4f26039eb1dc08b301b7624cd05ab9b682cb8reed@google.com const SkPoint pts[] = { 3661ca4f26039eb1dc08b301b7624cd05ab9b682cb8reed@google.com { 0, 0 }, 3671ca4f26039eb1dc08b301b7624cd05ab9b682cb8reed@google.com { SkIntToScalar(100), SkIntToScalar(100) }, 3681ca4f26039eb1dc08b301b7624cd05ab9b682cb8reed@google.com }; 3698ac7a0fcef6c830935905fdaeda97cab87581ce8reed@google.com 3703361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 37173349aa33277889d79e3e8bd8cef89cdf0310288reed@google.com const int gray = i % 256; 37273349aa33277889d79e3e8bd8cef89cdf0310288reed@google.com const int alpha = fHasAlpha ? gray : 0xFF; 3735ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com SkColor colors[] = { 3745ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com SK_ColorBLACK, 37573349aa33277889d79e3e8bd8cef89cdf0310288reed@google.com SkColorSetARGB(alpha, gray, gray, gray), 3765ea050f6620fa9e675a1c801f738e946fa993e14tomhudson@google.com SK_ColorWHITE }; 3778ac7a0fcef6c830935905fdaeda97cab87581ce8reed@google.com SkShader* s = SkGradientShader::CreateLinear(pts, colors, NULL, 3788ac7a0fcef6c830935905fdaeda97cab87581ce8reed@google.com SK_ARRAY_COUNT(colors), 3798ac7a0fcef6c830935905fdaeda97cab87581ce8reed@google.com SkShader::kClamp_TileMode); 3808ac7a0fcef6c830935905fdaeda97cab87581ce8reed@google.com paint.setShader(s)->unref(); 3818ac7a0fcef6c830935905fdaeda97cab87581ce8reed@google.com canvas->drawRect(r, paint); 3828ac7a0fcef6c830935905fdaeda97cab87581ce8reed@google.com } 3838ac7a0fcef6c830935905fdaeda97cab87581ce8reed@google.com } 384fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 3858ac7a0fcef6c830935905fdaeda97cab87581ce8reed@google.comprivate: 386f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina typedef Benchmark INHERITED; 3878ac7a0fcef6c830935905fdaeda97cab87581ce8reed@google.com}; 3888ac7a0fcef6c830935905fdaeda97cab87581ce8reed@google.com 389410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new Gradient2Bench(false); ) 390410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new Gradient2Bench(true); ) 391