Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2803)

Unified Diff: bench/GameBench.cpp

Issue 21168006: added drawVertices path to GameBench (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | include/core/SkCanvas.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: bench/GameBench.cpp
===================================================================
--- bench/GameBench.cpp (revision 10440)
+++ bench/GameBench.cpp (working copy)
@@ -9,6 +9,7 @@
#include "SkCanvas.h"
#include "SkPaint.h"
#include "SkRandom.h"
+#include "SkShader.h"
#include "SkString.h"
// This bench simulates the calls Skia sees from various HTML5 canvas
@@ -27,12 +28,14 @@
};
GameBench(void* param, Type type, Clear clear,
- bool aligned = false, bool useAtlas = false)
+ bool aligned = false, bool useAtlas = false,
+ bool useDrawVertices = false)
: INHERITED(param)
, fType(type)
, fClear(clear)
, fAligned(aligned)
, fUseAtlas(useAtlas)
+ , fUseDrawVertices(useDrawVertices)
, fName("game")
, fNumSaved(0)
, fInitialized(false) {
@@ -63,6 +66,10 @@
fName.append("_atlas");
}
+ if (useDrawVertices) {
+ fName.append("_drawVerts");
+ }
+
// It's HTML 5 canvas, so always AA
fName.append("_aa");
}
@@ -81,9 +88,9 @@
}
virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
- static SkMWCRandom scaleRand;
- static SkMWCRandom transRand;
- static SkMWCRandom rotRand;
+ SkMWCRandom scaleRand;
+ SkMWCRandom transRand;
+ SkMWCRandom rotRand;
int width, height;
if (fUseAtlas) {
@@ -116,14 +123,27 @@
}
SkMatrix mat;
- SkIRect src = { 0, 0, width, height };
SkRect dst = { 0, 0, SkIntToScalar(width), SkIntToScalar(height) };
SkRect clearRect = { -1.0f, -1.0f, width+1.0f, height+1.0f };
+ SkPoint verts[4] = { // for drawVertices path
+ { 0, 0 },
+ { 0, SkIntToScalar(height) },
+ { SkIntToScalar(width), SkIntToScalar(height) },
+ { SkIntToScalar(width), 0 }
+ };
+ uint16_t indices[6] = { 0, 1, 2, 0, 2, 3 };
SkPaint p;
p.setColor(0xFF000000);
p.setFilterBitmap(true);
+ SkPaint p2; // for drawVertices path
+ p2.setColor(0xFF000000);
+ p2.setFilterBitmap(true);
+ p2.setShader(SkShader::CreateBitmapShader(fAtlas,
+ SkShader::kClamp_TileMode,
+ SkShader::kClamp_TileMode))->unref();
+
for (int i = 0; i < kNumRects; ++i, ++fNumSaved) {
if (0 == i % kNumBeforeClear) {
@@ -173,11 +193,24 @@
canvas->concat(mat);
if (fUseAtlas) {
static int curCell = 0;
- src = fAtlasRects[curCell % (kNumAtlasedX)][curCell / (kNumAtlasedX)];
+ SkIRect src = fAtlasRects[curCell % (kNumAtlasedX)][curCell / (kNumAtlasedX)];
curCell = (curCell + 1) % (kNumAtlasedX*kNumAtlasedY);
- canvas->drawBitmapRect(fAtlas, &src, dst, &p);
+
+ if (fUseDrawVertices) {
+ SkPoint uvs[4] = {
+ { SkIntToScalar(src.fLeft), SkIntToScalar(src.fBottom) },
+ { SkIntToScalar(src.fLeft), SkIntToScalar(src.fTop) },
+ { SkIntToScalar(src.fRight), SkIntToScalar(src.fTop) },
+ { SkIntToScalar(src.fRight), SkIntToScalar(src.fBottom) },
+ };
+ canvas->drawVertices(SkCanvas::kTriangles_VertexMode,
+ 4, verts, uvs, NULL, NULL,
+ indices, 6, p2);
+ } else {
+ canvas->drawBitmapRect(fAtlas, &src, dst, &p);
+ }
} else {
- canvas->drawBitmapRect(fCheckerboard, &src, dst, &p);
+ canvas->drawBitmapRect(fCheckerboard, NULL, dst, &p);
}
}
}
@@ -209,6 +242,7 @@
Clear fClear;
bool fAligned;
bool fUseAtlas;
+ bool fUseDrawVertices;
SkString fName;
int fNumSaved; // num draws stored in 'fSaved'
bool fInitialized;
@@ -259,7 +293,6 @@
}
}
-
fAtlas.setConfig(SkBitmap::kARGB_8888_Config, kTotAtlasWidth, kTotAtlasHeight);
fAtlas.allocPixels();
SkAutoLockPixels lock(fAtlas);
@@ -310,3 +343,5 @@
// Atlased
DEF_BENCH( return SkNEW_ARGS(GameBench, (p, GameBench::kTranslate_Type,
GameBench::kFull_Clear, false, true)); )
+DEF_BENCH( return SkNEW_ARGS(GameBench, (p, GameBench::kTranslate_Type,
+ GameBench::kFull_Clear, false, true, true)); )
« no previous file with comments | « no previous file | include/core/SkCanvas.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698