105d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com/* 205d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com * Copyright 2011 Google Inc. 305d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com * 405d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com * Use of this source code is governed by a BSD-style license that can be 505d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com * found in the LICENSE file. 605d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com */ 705d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com 8f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "Benchmark.h" 905d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com#include "SkCanvas.h" 1005d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com#include "SkPaint.h" 1105d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com#include "SkRandom.h" 1205d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com#include "SkShader.h" 13f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "SkString.h" 1405d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com 1505d63aef00402977d0c88f661a6ff65ebb989da7reed@google.comenum VertFlags { 1605d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com kColors_VertFlag, 1705d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com kTexture_VertFlag, 1805d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com}; 1905d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com 20f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass VertBench : public Benchmark { 2105d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com SkString fName; 2205d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com enum { 2305d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com W = 640, 2405d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com H = 480, 2505d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com ROW = 20, 2605d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com COL = 20, 2705d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com PTS = (ROW + 1) * (COL + 1), 2805d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com IDX = ROW * COL * 6, 2905d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com }; 3005d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com 3105d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com SkPoint fPts[PTS]; 3205d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com SkColor fColors[PTS]; 3305d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com uint16_t fIdx[IDX]; 3405d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com 3505d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com static void load_2_tris(uint16_t idx[], int x, int y, int rb) { 3605d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com int n = y * rb + x; 3705d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com idx[0] = n; idx[1] = n + 1; idx[2] = rb + n + 1; 3805d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com idx[3] = n; idx[4] = rb + n + 1; idx[5] = n + rb; 3905d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com } 40fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 4105d63aef00402977d0c88f661a6ff65ebb989da7reed@google.compublic: 42410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com VertBench() { 4305d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com const SkScalar dx = SkIntToScalar(W) / COL; 4405d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com const SkScalar dy = SkIntToScalar(H) / COL; 4505d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com 4605d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com SkPoint* pts = fPts; 4705d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com uint16_t* idx = fIdx; 4805d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com 4905d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com SkScalar yy = 0; 5005d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com for (int y = 0; y <= ROW; y++) { 5105d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com SkScalar xx = 0; 5205d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com for (int x = 0; x <= COL; ++x) { 5305d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com pts->set(xx, yy); 5405d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com pts += 1; 5505d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com xx += dx; 56fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 5705d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com if (x < COL && y < ROW) { 5805d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com load_2_tris(idx, x, y, COL + 1); 5905d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com for (int i = 0; i < 6; i++) { 6005d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com SkASSERT(idx[i] < PTS); 6105d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com } 6205d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com idx += 6; 6305d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com } 6405d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com } 6505d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com yy += dy; 6605d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com } 6705d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com SkASSERT(PTS == pts - fPts); 6805d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com SkASSERT(IDX == idx - fIdx); 6905d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com 70e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkRandom rand; 7105d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com for (int i = 0; i < PTS; ++i) { 7205d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com fColors[i] = rand.nextU() | (0xFF << 24); 7305d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com } 7405d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com 7505d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com fName.set("verts"); 7605d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com } 7705d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com 7805d63aef00402977d0c88f661a6ff65ebb989da7reed@google.comprotected: 7905d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com virtual const char* onGetName() { return fName.c_str(); } 803361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org virtual void onDraw(const int loops, SkCanvas* canvas) { 8105d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com SkPaint paint; 8205d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com this->setupPaint(&paint); 834a018bb20bf969a38ec11d9506843f06366dfa7cbsalomon@google.com 843361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 8505d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com canvas->drawVertices(SkCanvas::kTriangles_VertexMode, PTS, 8605d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com fPts, NULL, fColors, NULL, fIdx, IDX, paint); 8705d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com } 8805d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com } 8905d63aef00402977d0c88f661a6ff65ebb989da7reed@google.comprivate: 90f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina typedef Benchmark INHERITED; 9105d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com}; 9205d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com 9305d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com/////////////////////////////////////////////////////////////////////////////// 9405d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com 95410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return SkNEW_ARGS(VertBench, ()); ) 96