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

Side by Side Diff: bench/BitmapRectBench.cpp

Issue 20997003: move intensive computing/rendering from bench constructor to onPreDraw. (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 7 years, 4 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | bench/RTreeBench.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2011 Google Inc. 3 * Copyright 2011 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 #include "SkBenchmark.h" 8 #include "SkBenchmark.h"
9 #include "SkBitmap.h" 9 #include "SkBitmap.h"
10 #include "SkPaint.h" 10 #include "SkPaint.h"
11 #include "SkCanvas.h" 11 #include "SkCanvas.h"
12 #include "SkColorPriv.h" 12 #include "SkColorPriv.h"
13 #include "SkRandom.h" 13 #include "SkRandom.h"
14 #include "SkString.h" 14 #include "SkString.h"
15 15
16 static void drawIntoBitmap(const SkBitmap& bm) { 16 static void draw_into_bitmap(const SkBitmap& bm) {
17 const int w = bm.width(); 17 const int w = bm.width();
18 const int h = bm.height(); 18 const int h = bm.height();
19 19
20 SkCanvas canvas(bm); 20 SkCanvas canvas(bm);
21 SkPaint p; 21 SkPaint p;
22 p.setAntiAlias(true); 22 p.setAntiAlias(true);
23 p.setColor(SK_ColorRED); 23 p.setColor(SK_ColorRED);
24 canvas.drawCircle(SkIntToScalar(w)/2, SkIntToScalar(h)/2, 24 canvas.drawCircle(SkIntToScalar(w)/2, SkIntToScalar(h)/2,
25 SkIntToScalar(SkMin32(w, h))*3/8, p); 25 SkIntToScalar(SkMin32(w, h))*3/8, p);
26 26
(...skipping 11 matching lines...) Expand all
38 paint : filter-p 38 paint : filter-p
39 */ 39 */
40 40
41 class BitmapRectBench : public SkBenchmark { 41 class BitmapRectBench : public SkBenchmark {
42 SkBitmap fBitmap; 42 SkBitmap fBitmap;
43 bool fDoFilter; 43 bool fDoFilter;
44 bool fSlightMatrix; 44 bool fSlightMatrix;
45 uint8_t fAlpha; 45 uint8_t fAlpha;
46 SkString fName; 46 SkString fName;
47 SkRect fSrcR, fDstR; 47 SkRect fSrcR, fDstR;
48 static const int kWidth = 128;
49 static const int kHeight = 128;
48 enum { N = SkBENCHLOOP(300) }; 50 enum { N = SkBENCHLOOP(300) };
49 public: 51 public:
50 BitmapRectBench(void* param, U8CPU alpha, bool doFilter, bool slightMatrix) : INHERITED(param) { 52 BitmapRectBench(void* param, U8CPU alpha, bool doFilter, bool slightMatrix) : INHERITED(param) {
51 fAlpha = SkToU8(alpha); 53 fAlpha = SkToU8(alpha);
52 fDoFilter = doFilter; 54 fDoFilter = doFilter;
53 fSlightMatrix = slightMatrix; 55 fSlightMatrix = slightMatrix;
54 56
55 const int w = 128; 57 fBitmap.setConfig(SkBitmap::kARGB_8888_Config, kWidth, kHeight);
56 const int h = 128;
57
58 fBitmap.setConfig(SkBitmap::kARGB_8888_Config, w, h);
59 fBitmap.allocPixels();
60 fBitmap.setIsOpaque(true);
61 fBitmap.eraseColor(SK_ColorBLACK);
62 drawIntoBitmap(fBitmap);
63
64 fSrcR.iset(0, 0, w, h);
65 fDstR.iset(0, 0, w, h);
66
67 if (slightMatrix) {
68 // want fractional translate
69 fDstR.offset(SK_Scalar1 / 3, SK_Scalar1 * 5 / 7);
70 // want enough to create a scale matrix, but not enough to scare
71 // off our sniffer which tries to see if the matrix is "effectively"
72 // translate-only.
73 fDstR.fRight += SK_Scalar1 / (w * 60);
74 }
75 } 58 }
76 59
77 protected: 60 protected:
78 virtual const char* onGetName() { 61 virtual const char* onGetName() SK_OVERRIDE {
79 fName.printf("bitmaprect_%02X_%sfilter_%s", 62 fName.printf("bitmaprect_%02X_%sfilter_%s",
80 fAlpha, fDoFilter ? "" : "no", 63 fAlpha, fDoFilter ? "" : "no",
81 fSlightMatrix ? "trans" : "identity"); 64 fSlightMatrix ? "trans" : "identity");
82 return fName.c_str(); 65 return fName.c_str();
83 } 66 }
84 67
85 virtual void onDraw(SkCanvas* canvas) { 68 virtual void onPreDraw() SK_OVERRIDE {
69 fBitmap.allocPixels();
70 fBitmap.setIsOpaque(true);
71 fBitmap.eraseColor(SK_ColorBLACK);
72 draw_into_bitmap(fBitmap);
73
74 fSrcR.iset(0, 0, kWidth, kHeight);
75 fDstR.iset(0, 0, kWidth, kHeight);
76
77 if (fSlightMatrix) {
78 // want fractional translate
79 fDstR.offset(SK_Scalar1 / 3, SK_Scalar1 * 5 / 7);
80 // want enough to create a scale matrix, but not enough to scare
81 // off our sniffer which tries to see if the matrix is "effectively"
82 // translate-only.
83 fDstR.fRight += SK_Scalar1 / (kWidth * 60);
84 }
85 }
86
87
88 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
86 SkRandom rand; 89 SkRandom rand;
87 90
88 SkPaint paint; 91 SkPaint paint;
89 this->setupPaint(&paint); 92 this->setupPaint(&paint);
90 paint.setFilterBitmap(fDoFilter); 93 paint.setFilterBitmap(fDoFilter);
91 paint.setAlpha(fAlpha); 94 paint.setAlpha(fAlpha);
92 95
93 for (int i = 0; i < N; i++) { 96 for (int i = 0; i < N; i++) {
94 canvas->drawBitmapRectToRect(fBitmap, &fSrcR, fDstR, &paint); 97 canvas->drawBitmapRectToRect(fBitmap, &fSrcR, fDstR, &paint);
95 } 98 }
96 } 99 }
97 100
98 private: 101 private:
99 typedef SkBenchmark INHERITED; 102 typedef SkBenchmark INHERITED;
100 }; 103 };
101 104
102 DEF_BENCH(return new BitmapRectBench(p, 0xFF, false, false)) 105 DEF_BENCH(return new BitmapRectBench(p, 0xFF, false, false))
103 DEF_BENCH(return new BitmapRectBench(p, 0x80, false, false)) 106 DEF_BENCH(return new BitmapRectBench(p, 0x80, false, false))
104 DEF_BENCH(return new BitmapRectBench(p, 0xFF, true, false)) 107 DEF_BENCH(return new BitmapRectBench(p, 0xFF, true, false))
105 DEF_BENCH(return new BitmapRectBench(p, 0x80, true, false)) 108 DEF_BENCH(return new BitmapRectBench(p, 0x80, true, false))
106 109
107 DEF_BENCH(return new BitmapRectBench(p, 0xFF, false, true)) 110 DEF_BENCH(return new BitmapRectBench(p, 0xFF, false, true))
108 DEF_BENCH(return new BitmapRectBench(p, 0xFF, true, true)) 111 DEF_BENCH(return new BitmapRectBench(p, 0xFF, true, true))
OLDNEW
« no previous file with comments | « no previous file | bench/RTreeBench.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698