aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench/VertBench.cpp
diff options
context:
space:
mode:
authorGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-10-28 18:57:32 +0000
committerGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-10-28 18:57:32 +0000
commit05d63aef00402977d0c88f661a6ff65ebb989da7 (patch)
tree6b19347131294e3622ea38d11af53c5e29a50cd7 /bench/VertBench.cpp
parentca529d303e50072aa25405c651b16f96b5b3fa4b (diff)
add initial bench for drawVertices
git-svn-id: http://skia.googlecode.com/svn/trunk@2553 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'bench/VertBench.cpp')
-rw-r--r--bench/VertBench.cpp99
1 files changed, 99 insertions, 0 deletions
diff --git a/bench/VertBench.cpp b/bench/VertBench.cpp
new file mode 100644
index 0000000000..98df44929e
--- /dev/null
+++ b/bench/VertBench.cpp
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2011 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "SkBenchmark.h"
+#include "SkCanvas.h"
+#include "SkPaint.h"
+#include "SkRandom.h"
+#include "SkString.h"
+#include "SkShader.h"
+
+enum VertFlags {
+ kColors_VertFlag,
+ kTexture_VertFlag,
+};
+
+class VertBench : public SkBenchmark {
+ SkString fName;
+ enum {
+ W = 640,
+ H = 480,
+ ROW = 20,
+ COL = 20,
+ PTS = (ROW + 1) * (COL + 1),
+ IDX = ROW * COL * 6,
+ N = SkBENCHLOOP(10)
+ };
+
+ SkPoint fPts[PTS];
+ SkColor fColors[PTS];
+ SkPoint fTex[PTS];
+ uint16_t fIdx[IDX];
+
+ static void load_2_tris(uint16_t idx[], int x, int y, int rb) {
+ int n = y * rb + x;
+ idx[0] = n; idx[1] = n + 1; idx[2] = rb + n + 1;
+ idx[3] = n; idx[4] = rb + n + 1; idx[5] = n + rb;
+ }
+
+public:
+ VertBench(void* param) : INHERITED(param) {
+ const SkScalar dx = SkIntToScalar(W) / COL;
+ const SkScalar dy = SkIntToScalar(H) / COL;
+
+ SkPoint* pts = fPts;
+ uint16_t* idx = fIdx;
+
+ SkScalar yy = 0;
+ for (int y = 0; y <= ROW; y++) {
+ SkScalar xx = 0;
+ for (int x = 0; x <= COL; ++x) {
+ pts->set(xx, yy);
+ pts += 1;
+ xx += dx;
+
+ if (x < COL && y < ROW) {
+ load_2_tris(idx, x, y, COL + 1);
+ for (int i = 0; i < 6; i++) {
+ SkASSERT(idx[i] < PTS);
+ }
+ idx += 6;
+ }
+ }
+ yy += dy;
+ }
+ SkASSERT(PTS == pts - fPts);
+ SkASSERT(IDX == idx - fIdx);
+
+ SkRandom rand;
+ for (int i = 0; i < PTS; ++i) {
+ fColors[i] = rand.nextU() | (0xFF << 24);
+ }
+
+ fName.set("verts");
+ }
+
+protected:
+ virtual const char* onGetName() { return fName.c_str(); }
+ virtual void onDraw(SkCanvas* canvas) {
+ SkPaint paint;
+ this->setupPaint(&paint);
+
+ for (int i = 0; i < N; i++) {
+ canvas->drawVertices(SkCanvas::kTriangles_VertexMode, PTS,
+ fPts, NULL, fColors, NULL, fIdx, IDX, paint);
+ }
+ }
+private:
+ typedef SkBenchmark INHERITED;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+
+static SkBenchmark* Fact(void* p) { return SkNEW_ARGS(VertBench, (p)); }
+
+static BenchRegistry gReg(Fact);