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

Side by Side Diff: tests/TBaseListTest.cpp

Issue 628453002: Create a single command buffer for GrInOrderDrawBuffer (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 2 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
« src/gpu/GrInOrderDrawBuffer.cpp ('K') | « src/gpu/GrTBaseList.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 * Copyright 2014 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8 #if SK_SUPPORT_GPU
9
10 #include "SkMatrix.h"
11 #include "SkString.h"
12 #include "GrTBaseList.h"
13 #include "Test.h"
14
15 ////////////////////////////////////////////////////////////////////////////////
16
17 static int activeListItems = 0;
18
19 static void test_empty_back(skiatest::Reporter* reporter) {
20 GrTBaseList<int, int> list(0);
21
22 REPORTER_ASSERT(reporter, list.empty());
23
24 for (int i = 0; i < 100; ++i) {
25 REPORTER_ASSERT(reporter, i == *GrNEW_APPEND_TO_TBASELIST(list, int, (i) ));
26 REPORTER_ASSERT(reporter, !list.empty());
27 REPORTER_ASSERT(reporter, i == list.back());
28 }
29
30 REPORTER_ASSERT(reporter, !list.empty());
31
32 list.reset();
33
34 REPORTER_ASSERT(reporter, list.empty());
35 }
36
37 struct ExtraData {
38 ExtraData(int i) : fData(i) {
39 for (int j = 0; j < i; j++) {
40 fExtraData[j] = i;
41 }
42 ++activeListItems;
43 }
44 ~ExtraData() {
45 --activeListItems;
46 }
47 int fData;
48 int fExtraData[0];
49 };
50
51 static void test_extra_data(skiatest::Reporter* reporter) {
52 GrTBaseList<ExtraData, int> list(0);
53 for (int i = 0; i < 100; ++i) {
54 GrNEW_APPEND_WITH_DATA_TO_TBASELIST(list, ExtraData, (i), i * sizeof(int ));
55 }
56 REPORTER_ASSERT(reporter, 100 == activeListItems);
57
58 GrTBaseList<ExtraData, int>::Iter iter(list);
59 for (int i = 0; i < 100; ++i) {
60 REPORTER_ASSERT(reporter, iter.next());
61 REPORTER_ASSERT(reporter, i == iter->fData);
62 for (int j = 0; j < i; j++) {
63 REPORTER_ASSERT(reporter, i == iter->fExtraData[j]);
64 }
65 }
66 REPORTER_ASSERT(reporter, !iter.next());
67
68 list.reset();
69 REPORTER_ASSERT(reporter, 0 == activeListItems);
70 }
71
72 enum ClassType {
73 kBase_ClassType,
74 kSubclass_ClassType,
75 kSubSubclass_ClassType,
76 kSubclassExtraData_ClassType,
77 kSubclassEmpty_ClassType,
78
79 kNumClassTypes
80 };
81
82 class Base {
83 public:
84 Base() {
85 fMatrix.reset();
86 ++activeListItems;
87 }
88
89 virtual ~Base() { --activeListItems; }
90
91 virtual ClassType getType() { return kBase_ClassType; }
92
93 virtual void validate(skiatest::Reporter* reporter) {
94 REPORTER_ASSERT(reporter, fMatrix.isIdentity());
95 }
96
97 private:
98 SkMatrix fMatrix;
99 };
100
101 class Subclass : public Base {
102 public:
103 Subclass() : fString("Lorem ipsum dolor sit amet") {}
104
105 virtual ClassType getType() { return kSubclass_ClassType; }
106
107 virtual void validate(skiatest::Reporter* reporter) {
108 Base::validate(reporter);
109 REPORTER_ASSERT(reporter, !strcmp("Lorem ipsum dolor sit amet", fString. c_str()));
110 }
111
112 private:
113 SkString fString;
114 };
115
116 class SubSubclass : public Subclass {
117 public:
118 SubSubclass() : fInt(1234), fFloat(1.234f) {}
119
120 virtual ClassType getType() { return kSubSubclass_ClassType; }
121
122 virtual void validate(skiatest::Reporter* reporter) {
123 Subclass::validate(reporter);
124 REPORTER_ASSERT(reporter, 1234 == fInt);
125 REPORTER_ASSERT(reporter, 1.234f == fFloat);
126 }
127
128 private:
129 int fInt;
130 float fFloat;
131 };
132
133 class SubclassExtraData : public Base {
134 public:
135 SubclassExtraData(int length) : fLength(length) {
136 for (int i = 0; i < fLength; ++i) {
137 fArray[i] = 123456789 + 987654321 * i;
138 }
139 }
140
141 virtual ClassType getType() { return kSubclassExtraData_ClassType; }
142
143 virtual void validate(skiatest::Reporter* reporter) {
144 Base::validate(reporter);
145 for (int i = 0; i < fLength; ++i) {
146 REPORTER_ASSERT(reporter, 123456789 + 987654321 * i == fArray[i]);
147 }
148 }
149
150 private:
151 int fLength;
152 int fArray[0];
153 };
154
155 class SubclassEmpty : public Base {
156 public:
157 virtual ClassType getType() { return kSubclassEmpty_ClassType; }
158 };
159
160 static void test_subclasses(skiatest::Reporter* reporter) {
161 class Order {
162 public:
163 Order() { this->reset(); }
164 void reset() { fCurrent = 0; }
165 ClassType next() {
166 fCurrent = 1664525 * fCurrent + 1013904223;
167 return static_cast<ClassType>(fCurrent % kNumClassTypes);
168 }
169 private:
170 uint32_t fCurrent;
171 };
172
173 GrTBaseList<Base, void*> list(1024);
174
175 Order order;
176 for (int i = 0; i < 1000; i++) {
177 switch (order.next()) {
178 case kBase_ClassType:
179 GrNEW_APPEND_TO_TBASELIST(list, Base, ());
180 break;
181
182 case kSubclass_ClassType:
183 GrNEW_APPEND_TO_TBASELIST(list, Subclass, ());
184 break;
185
186 case kSubSubclass_ClassType:
187 GrNEW_APPEND_TO_TBASELIST(list, SubSubclass, ());
188 break;
189
190 case kSubclassExtraData_ClassType:
191 GrNEW_APPEND_WITH_DATA_TO_TBASELIST(list, SubclassExtraData, (i) , sizeof(int) * i);
192 break;
193
194 case kSubclassEmpty_ClassType:
195 GrNEW_APPEND_TO_TBASELIST(list, SubclassEmpty, ());
196 break;
197
198 default:
199 reporter->reportFailed(SkString("Invalid class type"));
200 break;
201 }
202 }
203 REPORTER_ASSERT(reporter, 1000 == activeListItems);
204
205 order.reset();
206 GrTBaseList<Base, void*>::Iter iter(list);
207 for (int i = 0; i < 1000; ++i) {
208 REPORTER_ASSERT(reporter, iter.next());
209 REPORTER_ASSERT(reporter, order.next() == iter->getType());
210 iter->validate(reporter);
211 }
212 REPORTER_ASSERT(reporter, !iter.next());
213
214 // Don't reset the list. It should automatically destruct all its items.
215 }
216
217 DEF_GPUTEST(TBaseList, reporter, factory) {
218 test_empty_back(reporter);
219
220 test_extra_data(reporter);
221 REPORTER_ASSERT(reporter, 0 == activeListItems); // test_extra_data should c all reset().
222
223 test_subclasses(reporter);
224 REPORTER_ASSERT(reporter, 0 == activeListItems); // Ensure ~GrTBaseList invo kes dtors.
225 }
226
227 #endif
OLDNEW
« src/gpu/GrInOrderDrawBuffer.cpp ('K') | « src/gpu/GrTBaseList.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698