OLD | NEW |
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 "SkFloatBits.h" | 9 #include "SkFloatBits.h" |
10 #include "SkRandom.h" | 10 #include "SkRandom.h" |
11 #include "SkRect.h" | 11 #include "SkRect.h" |
12 #include "SkString.h" | 12 #include "SkString.h" |
13 | 13 |
14 class ScalarBench : public SkBenchmark { | 14 class ScalarBench : public SkBenchmark { |
15 SkString fName; | 15 SkString fName; |
16 public: | 16 public: |
17 ScalarBench(void* param, const char name[]) : INHERITED(param) { | 17 ScalarBench(const char name[]) { |
18 fName.printf("scalar_%s", name); | 18 fName.printf("scalar_%s", name); |
19 fIsRendering = false; | 19 fIsRendering = false; |
20 } | 20 } |
21 | 21 |
22 virtual void performTest() = 0; | 22 virtual void performTest() = 0; |
23 | 23 |
24 protected: | 24 protected: |
25 virtual int mulLoopCount() const { return 1; } | 25 virtual int mulLoopCount() const { return 1; } |
26 | 26 |
27 virtual const char* onGetName() SK_OVERRIDE { | 27 virtual const char* onGetName() SK_OVERRIDE { |
(...skipping 27 matching lines...) Expand all Loading... |
55 // reasonable values in our arrays. | 55 // reasonable values in our arrays. |
56 template <typename T> void init9(T array[9]) { | 56 template <typename T> void init9(T array[9]) { |
57 SkRandom rand; | 57 SkRandom rand; |
58 for (int i = 0; i < 9; i++) { | 58 for (int i = 0; i < 9; i++) { |
59 array[i] = rand.nextSScalar1(); | 59 array[i] = rand.nextSScalar1(); |
60 } | 60 } |
61 } | 61 } |
62 | 62 |
63 class FloatComparisonBench : public ScalarBench { | 63 class FloatComparisonBench : public ScalarBench { |
64 public: | 64 public: |
65 FloatComparisonBench(void* param) : INHERITED(param, "compare_float") { | 65 FloatComparisonBench() : INHERITED("compare_float") { |
66 init9(fArray); | 66 init9(fArray); |
67 } | 67 } |
68 protected: | 68 protected: |
69 virtual int mulLoopCount() const { return 4; } | 69 virtual int mulLoopCount() const { return 4; } |
70 virtual void performTest() { | 70 virtual void performTest() { |
71 always_do(fArray[6] != 0.0f || fArray[7] != 0.0f || fArray[8] != 1.0f); | 71 always_do(fArray[6] != 0.0f || fArray[7] != 0.0f || fArray[8] != 1.0f); |
72 always_do(fArray[2] != 0.0f || fArray[5] != 0.0f); | 72 always_do(fArray[2] != 0.0f || fArray[5] != 0.0f); |
73 } | 73 } |
74 private: | 74 private: |
75 float fArray[9]; | 75 float fArray[9]; |
76 typedef ScalarBench INHERITED; | 76 typedef ScalarBench INHERITED; |
77 }; | 77 }; |
78 | 78 |
79 class ForcedIntComparisonBench : public ScalarBench { | 79 class ForcedIntComparisonBench : public ScalarBench { |
80 public: | 80 public: |
81 ForcedIntComparisonBench(void* param) | 81 ForcedIntComparisonBench() |
82 : INHERITED(param, "compare_forced_int") { | 82 : INHERITED("compare_forced_int") { |
83 init9(fArray); | 83 init9(fArray); |
84 } | 84 } |
85 protected: | 85 protected: |
86 virtual int mulLoopCount() const { return 4; } | 86 virtual int mulLoopCount() const { return 4; } |
87 virtual void performTest() { | 87 virtual void performTest() { |
88 always_do(SkScalarAs2sCompliment(fArray[6]) | | 88 always_do(SkScalarAs2sCompliment(fArray[6]) | |
89 SkScalarAs2sCompliment(fArray[7]) | | 89 SkScalarAs2sCompliment(fArray[7]) | |
90 (SkScalarAs2sCompliment(fArray[8]) - kPersp1Int)); | 90 (SkScalarAs2sCompliment(fArray[8]) - kPersp1Int)); |
91 always_do(SkScalarAs2sCompliment(fArray[2]) | | 91 always_do(SkScalarAs2sCompliment(fArray[2]) | |
92 SkScalarAs2sCompliment(fArray[5])); | 92 SkScalarAs2sCompliment(fArray[5])); |
93 } | 93 } |
94 private: | 94 private: |
95 static const int32_t kPersp1Int = 0x3f800000; | 95 static const int32_t kPersp1Int = 0x3f800000; |
96 SkScalar fArray[9]; | 96 SkScalar fArray[9]; |
97 typedef ScalarBench INHERITED; | 97 typedef ScalarBench INHERITED; |
98 }; | 98 }; |
99 | 99 |
100 class IsFiniteScalarBench : public ScalarBench { | 100 class IsFiniteScalarBench : public ScalarBench { |
101 public: | 101 public: |
102 IsFiniteScalarBench(void* param) : INHERITED(param, "isfinite") { | 102 IsFiniteScalarBench() : INHERITED("isfinite") { |
103 SkRandom rand; | 103 SkRandom rand; |
104 for (size_t i = 0; i < ARRAY_N; ++i) { | 104 for (size_t i = 0; i < ARRAY_N; ++i) { |
105 fArray[i] = rand.nextSScalar1(); | 105 fArray[i] = rand.nextSScalar1(); |
106 } | 106 } |
107 } | 107 } |
108 protected: | 108 protected: |
109 virtual int mulLoopCount() const { return 1; } | 109 virtual int mulLoopCount() const { return 1; } |
110 virtual void performTest() SK_OVERRIDE { | 110 virtual void performTest() SK_OVERRIDE { |
111 int sum = 0; | 111 int sum = 0; |
112 for (size_t i = 0; i < ARRAY_N; ++i) { | 112 for (size_t i = 0; i < ARRAY_N; ++i) { |
(...skipping 17 matching lines...) Expand all Loading... |
130 | 130 |
131 /////////////////////////////////////////////////////////////////////////////// | 131 /////////////////////////////////////////////////////////////////////////////// |
132 | 132 |
133 class RectBoundsBench : public SkBenchmark { | 133 class RectBoundsBench : public SkBenchmark { |
134 enum { | 134 enum { |
135 PTS = 100, | 135 PTS = 100, |
136 }; | 136 }; |
137 SkPoint fPts[PTS]; | 137 SkPoint fPts[PTS]; |
138 | 138 |
139 public: | 139 public: |
140 RectBoundsBench(void* param) : INHERITED(param) { | 140 RectBoundsBench() { |
141 SkRandom rand; | 141 SkRandom rand; |
142 for (int i = 0; i < PTS; ++i) { | 142 for (int i = 0; i < PTS; ++i) { |
143 fPts[i].fX = rand.nextSScalar1(); | 143 fPts[i].fX = rand.nextSScalar1(); |
144 fPts[i].fY = rand.nextSScalar1(); | 144 fPts[i].fY = rand.nextSScalar1(); |
145 } | 145 } |
146 fIsRendering = false; | 146 fIsRendering = false; |
147 } | 147 } |
148 | 148 |
149 protected: | 149 protected: |
150 virtual const char* onGetName() SK_OVERRIDE { | 150 virtual const char* onGetName() SK_OVERRIDE { |
151 return "rect_bounds"; | 151 return "rect_bounds"; |
152 } | 152 } |
153 | 153 |
154 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { | 154 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { |
155 SkRect r; | 155 SkRect r; |
156 for (int i = 0; i < this->getLoops(); ++i) { | 156 for (int i = 0; i < this->getLoops(); ++i) { |
157 r.set(fPts, PTS); | 157 r.set(fPts, PTS); |
158 } | 158 } |
159 } | 159 } |
160 | 160 |
161 private: | 161 private: |
162 typedef SkBenchmark INHERITED; | 162 typedef SkBenchmark INHERITED; |
163 }; | 163 }; |
164 | 164 |
165 /////////////////////////////////////////////////////////////////////////////// | 165 /////////////////////////////////////////////////////////////////////////////// |
166 | 166 |
167 static SkBenchmark* S0(void* p) { return new FloatComparisonBench(p); } | 167 DEF_BENCH( return new FloatComparisonBench(); ) |
168 static SkBenchmark* S1(void* p) { return new ForcedIntComparisonBench(p); } | 168 DEF_BENCH( return new ForcedIntComparisonBench(); ) |
169 static SkBenchmark* S2(void* p) { return new RectBoundsBench(p); } | 169 DEF_BENCH( return new RectBoundsBench(); ) |
170 static SkBenchmark* S3(void* p) { return new IsFiniteScalarBench(p); } | 170 DEF_BENCH( return new IsFiniteScalarBench(); ) |
171 | |
172 static BenchRegistry gReg0(S0); | |
173 static BenchRegistry gReg1(S1); | |
174 static BenchRegistry gReg2(S2); | |
175 static BenchRegistry gReg3(S3); | |
OLD | NEW |