VertBench.cpp revision e0e7cfe44bb9d66d76120a79e5275c294bacaa22
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 805d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com#include "SkBenchmark.h" 905d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com#include "SkCanvas.h" 1005d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com#include "SkPaint.h" 1105d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com#include "SkRandom.h" 1205d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com#include "SkString.h" 1305d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com#include "SkShader.h" 1405d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com 1505d63aef00402977d0c88f661a6ff65ebb989da7reed@google.comenum VertFlags { 1605d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com kColors_VertFlag, 1705d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com kTexture_VertFlag, 1805d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com}; 1905d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com 2005d63aef00402977d0c88f661a6ff65ebb989da7reed@google.comclass VertBench : public SkBenchmark { 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 N = SkBENCHLOOP(10) 3005d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com }; 3105d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com 3205d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com SkPoint fPts[PTS]; 3305d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com SkColor fColors[PTS]; 3405d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com uint16_t fIdx[IDX]; 3505d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com 3605d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com static void load_2_tris(uint16_t idx[], int x, int y, int rb) { 3705d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com int n = y * rb + x; 3805d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com idx[0] = n; idx[1] = n + 1; idx[2] = rb + n + 1; 3905d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com idx[3] = n; idx[4] = rb + n + 1; idx[5] = n + rb; 4005d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com } 41fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 4205d63aef00402977d0c88f661a6ff65ebb989da7reed@google.compublic: 4305d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com VertBench(void* param) : INHERITED(param) { 4405d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com const SkScalar dx = SkIntToScalar(W) / COL; 4505d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com const SkScalar dy = SkIntToScalar(H) / COL; 4605d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com 4705d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com SkPoint* pts = fPts; 4805d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com uint16_t* idx = fIdx; 4905d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com 5005d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com SkScalar yy = 0; 5105d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com for (int y = 0; y <= ROW; y++) { 5205d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com SkScalar xx = 0; 5305d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com for (int x = 0; x <= COL; ++x) { 5405d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com pts->set(xx, yy); 5505d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com pts += 1; 5605d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com xx += dx; 57fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 5805d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com if (x < COL && y < ROW) { 5905d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com load_2_tris(idx, x, y, COL + 1); 6005d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com for (int i = 0; i < 6; i++) { 6105d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com SkASSERT(idx[i] < PTS); 6205d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com } 6305d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com idx += 6; 6405d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com } 6505d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com } 6605d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com yy += dy; 6705d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com } 6805d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com SkASSERT(PTS == pts - fPts); 6905d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com SkASSERT(IDX == idx - fIdx); 7005d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com 71e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkRandom rand; 7205d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com for (int i = 0; i < PTS; ++i) { 7305d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com fColors[i] = rand.nextU() | (0xFF << 24); 7405d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com } 7505d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com 7605d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com fName.set("verts"); 7705d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com } 7805d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com 7905d63aef00402977d0c88f661a6ff65ebb989da7reed@google.comprotected: 8005d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com virtual const char* onGetName() { return fName.c_str(); } 8105d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com virtual void onDraw(SkCanvas* canvas) { 8205d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com SkPaint paint; 8305d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com this->setupPaint(&paint); 844a018bb20bf969a38ec11d9506843f06366dfa7cbsalomon@google.com 8505d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com for (int i = 0; i < N; i++) { 8605d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com canvas->drawVertices(SkCanvas::kTriangles_VertexMode, PTS, 8705d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com fPts, NULL, fColors, NULL, fIdx, IDX, paint); 8805d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com } 8905d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com } 9005d63aef00402977d0c88f661a6ff65ebb989da7reed@google.comprivate: 9105d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com typedef SkBenchmark INHERITED; 9205d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com}; 9305d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com 9405d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com/////////////////////////////////////////////////////////////////////////////// 9505d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com 9605d63aef00402977d0c88f661a6ff65ebb989da7reed@google.comstatic SkBenchmark* Fact(void* p) { return SkNEW_ARGS(VertBench, (p)); } 9705d63aef00402977d0c88f661a6ff65ebb989da7reed@google.com 9805d63aef00402977d0c88f661a6ff65ebb989da7reed@google.comstatic BenchRegistry gReg(Fact); 99