Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

105 lines (89 sloc) 2.954 kb
/*
* Copyright 2013 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "Benchmark.h"
#include "SkCanvas.h"
#include "SkPaint.h"
#include "SkRRect.h"
#include "SkString.h"
struct RRectRec {
SkCanvas* fCanvas;
SkRRect fRRect;
SkPaint fPaint;
};
typedef const char* (*DrawProc)(const RRectRec*, int);
static const char* draw_rect(const RRectRec* rec, int count) {
if (rec) {
const SkRect& r = rec->fRRect.getBounds();
for (int i = 0; i < count; ++i) {
rec->fCanvas->drawRect(r, rec->fPaint);
}
}
return "rect";
}
static const char* draw_rrect(const RRectRec* rec, int count) {
if (rec) {
for (int i = 0; i < count; ++i) {
rec->fCanvas->drawRRect(rec->fRRect, rec->fPaint);
}
}
return "rrect";
}
static const char* draw_oval(const RRectRec* rec, int count) {
if (rec) {
const SkRect& r = rec->fRRect.getBounds();
for (int i = 0; i < count; ++i) {
rec->fCanvas->drawOval(r, rec->fPaint);
}
}
return "oval";
}
// Handles rect, rrect, and oval
//
// Test drawing a small stroked version to see the effect of special-casing
// our stroke code for these convex single-contour shapes.
//
class StrokeRRectBench : public Benchmark {
SkString fName;
SkPaint::Join fJoin;
RRectRec fRec;
DrawProc fProc;
public:
StrokeRRectBench(SkPaint::Join j, DrawProc proc) {
static const char* gJoinName[] = {
"miter", "round", "bevel"
};
fJoin = j;
fProc = proc;
fName.printf("draw_stroke_%s_%s", proc(NULL, 0), gJoinName[j]);
SkRect r = { 20, 20, 40, 40 };
SkScalar rad = 4;
fRec.fRRect.setRectXY(r, rad, rad);
}
protected:
virtual const char* onGetName() {
return fName.c_str();
}
virtual void onDraw(const int loops, SkCanvas* canvas) {
fRec.fCanvas = canvas;
this->setupPaint(&fRec.fPaint);
fRec.fPaint.setStyle(SkPaint::kStroke_Style);
fRec.fPaint.setStrokeJoin(fJoin);
fRec.fPaint.setStrokeWidth(5);
fProc(&fRec, loops);
}
private:
typedef Benchmark INHERITED;
};
DEF_BENCH( return new StrokeRRectBench(SkPaint::kRound_Join, draw_rect); )
DEF_BENCH( return new StrokeRRectBench(SkPaint::kBevel_Join, draw_rect); )
DEF_BENCH( return new StrokeRRectBench(SkPaint::kMiter_Join, draw_rect); )
DEF_BENCH( return new StrokeRRectBench(SkPaint::kRound_Join, draw_rrect); )
DEF_BENCH( return new StrokeRRectBench(SkPaint::kBevel_Join, draw_rrect); )
DEF_BENCH( return new StrokeRRectBench(SkPaint::kMiter_Join, draw_rrect); )
DEF_BENCH( return new StrokeRRectBench(SkPaint::kRound_Join, draw_oval); )
DEF_BENCH( return new StrokeRRectBench(SkPaint::kBevel_Join, draw_oval); )
DEF_BENCH( return new StrokeRRectBench(SkPaint::kMiter_Join, draw_oval); )
Jump to Line
Something went wrong with that request. Please try again.