| 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 "Test.h" | 8 #include "Test.h" |
| 9 #if SK_SUPPORT_GPU | 9 #if SK_SUPPORT_GPU |
| 10 #include "GrReducedClip.h" | 10 #include "GrReducedClip.h" |
| (...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 264 | 264 |
| 265 if (useRects) { | 265 if (useRects) { |
| 266 stack.clipDevRect(rectA, SkRegion::kIntersect_Op, false); | 266 stack.clipDevRect(rectA, SkRegion::kIntersect_Op, false); |
| 267 stack.clipDevRect(rectB, gOps[op], false); | 267 stack.clipDevRect(rectB, gOps[op], false); |
| 268 } else { | 268 } else { |
| 269 stack.clipDevPath(clipA, SkRegion::kIntersect_Op, false); | 269 stack.clipDevPath(clipA, SkRegion::kIntersect_Op, false); |
| 270 stack.clipDevPath(clipB, gOps[op], false); | 270 stack.clipDevPath(clipB, gOps[op], false); |
| 271 } | 271 } |
| 272 | 272 |
| 273 REPORTER_ASSERT(reporter, !stack.isWideOpen()); | 273 REPORTER_ASSERT(reporter, !stack.isWideOpen()); |
| 274 REPORTER_ASSERT(reporter, SkClipStack::kWideOpenGenID != stack.getTo
pmostGenID()); | |
| 275 | 274 |
| 276 stack.getConservativeBounds(0, 0, 100, 100, &devClipBound, | 275 stack.getConservativeBounds(0, 0, 100, 100, &devClipBound, |
| 277 &isIntersectionOfRects); | 276 &isIntersectionOfRects); |
| 278 | 277 |
| 279 if (useRects) { | 278 if (useRects) { |
| 280 REPORTER_ASSERT(reporter, isIntersectionOfRects == | 279 REPORTER_ASSERT(reporter, isIntersectionOfRects == |
| 281 (gOps[op] == SkRegion::kIntersect_Op)); | 280 (gOps[op] == SkRegion::kIntersect_Op)); |
| 282 } else { | 281 } else { |
| 283 REPORTER_ASSERT(reporter, !isIntersectionOfRects); | 282 REPORTER_ASSERT(reporter, !isIntersectionOfRects); |
| 284 } | 283 } |
| 285 | 284 |
| 286 SkASSERT(testCase < gNumCases); | 285 SkASSERT(testCase < gNumCases); |
| 287 REPORTER_ASSERT(reporter, devClipBound == gAnswerRectsBW[testCase]); | 286 REPORTER_ASSERT(reporter, devClipBound == gAnswerRectsBW[testCase]); |
| 288 ++testCase; | 287 ++testCase; |
| 289 | 288 |
| 290 stack.restore(); | 289 stack.restore(); |
| 291 } | 290 } |
| 292 } | 291 } |
| 293 } | 292 } |
| 294 | 293 |
| 295 // Test out 'isWideOpen' entry point | 294 // Test out 'isWideOpen' entry point |
| 296 static void test_isWideOpen(skiatest::Reporter* reporter) { | 295 static void test_isWideOpen(skiatest::Reporter* reporter) { |
| 297 { | |
| 298 // Empty stack is wide open. Wide open stack means that gen id is wide o
pen. | |
| 299 SkClipStack stack; | |
| 300 REPORTER_ASSERT(reporter, stack.isWideOpen()); | |
| 301 REPORTER_ASSERT(reporter, SkClipStack::kWideOpenGenID == stack.getTopmos
tGenID()); | |
| 302 } | |
| 303 | 296 |
| 304 SkRect rectA, rectB; | 297 SkRect rectA, rectB; |
| 305 | 298 |
| 306 rectA.iset(10, 10, 40, 40); | 299 rectA.iset(10, 10, 40, 40); |
| 307 rectB.iset(50, 50, 80, 80); | 300 rectB.iset(50, 50, 80, 80); |
| 308 | 301 |
| 309 // Stack should initially be wide open | 302 // Stack should initially be wide open |
| 310 { | 303 { |
| 311 SkClipStack stack; | 304 SkClipStack stack; |
| 312 | 305 |
| 313 REPORTER_ASSERT(reporter, stack.isWideOpen()); | 306 REPORTER_ASSERT(reporter, stack.isWideOpen()); |
| 314 REPORTER_ASSERT(reporter, SkClipStack::kWideOpenGenID == stack.getTopmos
tGenID()); | |
| 315 } | 307 } |
| 316 | 308 |
| 317 // Test out case where the user specifies a union that includes everything | 309 // Test out case where the user specifies a union that includes everything |
| 318 { | 310 { |
| 319 SkClipStack stack; | 311 SkClipStack stack; |
| 320 | 312 |
| 321 SkPath clipA, clipB; | 313 SkPath clipA, clipB; |
| 322 | 314 |
| 323 clipA.addRoundRect(rectA, SkIntToScalar(5), SkIntToScalar(5)); | 315 clipA.addRoundRect(rectA, SkIntToScalar(5), SkIntToScalar(5)); |
| 324 clipA.setFillType(SkPath::kInverseEvenOdd_FillType); | 316 clipA.setFillType(SkPath::kInverseEvenOdd_FillType); |
| 325 | 317 |
| 326 clipB.addRoundRect(rectB, SkIntToScalar(5), SkIntToScalar(5)); | 318 clipB.addRoundRect(rectB, SkIntToScalar(5), SkIntToScalar(5)); |
| 327 clipB.setFillType(SkPath::kInverseEvenOdd_FillType); | 319 clipB.setFillType(SkPath::kInverseEvenOdd_FillType); |
| 328 | 320 |
| 329 stack.clipDevPath(clipA, SkRegion::kReplace_Op, false); | 321 stack.clipDevPath(clipA, SkRegion::kReplace_Op, false); |
| 330 stack.clipDevPath(clipB, SkRegion::kUnion_Op, false); | 322 stack.clipDevPath(clipB, SkRegion::kUnion_Op, false); |
| 331 | 323 |
| 332 REPORTER_ASSERT(reporter, stack.isWideOpen()); | 324 REPORTER_ASSERT(reporter, stack.isWideOpen()); |
| 333 REPORTER_ASSERT(reporter, SkClipStack::kWideOpenGenID == stack.getTopmos
tGenID()); | |
| 334 } | 325 } |
| 335 | 326 |
| 336 // Test out union w/ a wide open clip | 327 // Test out union w/ a wide open clip |
| 337 { | 328 { |
| 338 SkClipStack stack; | 329 SkClipStack stack; |
| 339 | 330 |
| 340 stack.clipDevRect(rectA, SkRegion::kUnion_Op, false); | 331 stack.clipDevRect(rectA, SkRegion::kUnion_Op, false); |
| 341 | 332 |
| 342 REPORTER_ASSERT(reporter, stack.isWideOpen()); | 333 REPORTER_ASSERT(reporter, stack.isWideOpen()); |
| 343 REPORTER_ASSERT(reporter, SkClipStack::kWideOpenGenID == stack.getTopmos
tGenID()); | |
| 344 } | 334 } |
| 345 | 335 |
| 346 // Test out empty difference from a wide open clip | 336 // Test out empty difference from a wide open clip |
| 347 { | 337 { |
| 348 SkClipStack stack; | 338 SkClipStack stack; |
| 349 | 339 |
| 350 SkRect emptyRect; | 340 SkRect emptyRect; |
| 351 emptyRect.setEmpty(); | 341 emptyRect.setEmpty(); |
| 352 | 342 |
| 353 stack.clipDevRect(emptyRect, SkRegion::kDifference_Op, false); | 343 stack.clipDevRect(emptyRect, SkRegion::kDifference_Op, false); |
| 354 | 344 |
| 355 REPORTER_ASSERT(reporter, stack.isWideOpen()); | 345 REPORTER_ASSERT(reporter, stack.isWideOpen()); |
| 356 REPORTER_ASSERT(reporter, SkClipStack::kWideOpenGenID == stack.getTopmos
tGenID()); | |
| 357 } | 346 } |
| 358 | 347 |
| 359 // Test out return to wide open | 348 // Test out return to wide open |
| 360 { | 349 { |
| 361 SkClipStack stack; | 350 SkClipStack stack; |
| 362 | 351 |
| 363 stack.save(); | 352 stack.save(); |
| 364 | 353 |
| 365 stack.clipDevRect(rectA, SkRegion::kReplace_Op, false); | 354 stack.clipDevRect(rectA, SkRegion::kReplace_Op, false); |
| 366 | 355 |
| 367 REPORTER_ASSERT(reporter, !stack.isWideOpen()); | 356 REPORTER_ASSERT(reporter, !stack.isWideOpen()); |
| 368 REPORTER_ASSERT(reporter, SkClipStack::kWideOpenGenID != stack.getTopmos
tGenID()); | |
| 369 | 357 |
| 370 stack.restore(); | 358 stack.restore(); |
| 371 | 359 |
| 372 REPORTER_ASSERT(reporter, stack.isWideOpen()); | 360 REPORTER_ASSERT(reporter, stack.isWideOpen()); |
| 373 REPORTER_ASSERT(reporter, SkClipStack::kWideOpenGenID == stack.getTopmos
tGenID()); | |
| 374 } | 361 } |
| 375 } | 362 } |
| 376 | 363 |
| 377 static int count(const SkClipStack& stack) { | 364 static int count(const SkClipStack& stack) { |
| 378 | 365 |
| 379 SkClipStack::Iter iter(stack, SkClipStack::Iter::kTop_IterStart); | 366 SkClipStack::Iter iter(stack, SkClipStack::Iter::kTop_IterStart); |
| 380 | 367 |
| 381 const SkClipStack::Element* element = NULL; | 368 const SkClipStack::Element* element = NULL; |
| 382 int count = 0; | 369 int count = 0; |
| 383 | 370 |
| (...skipping 562 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 946 } | 933 } |
| 947 | 934 |
| 948 SkRect inflatedBounds = kBounds; | 935 SkRect inflatedBounds = kBounds; |
| 949 inflatedBounds.outset(kBounds.width() / 2, kBounds.height() / 2); | 936 inflatedBounds.outset(kBounds.width() / 2, kBounds.height() / 2); |
| 950 SkIRect inflatedIBounds; | 937 SkIRect inflatedIBounds; |
| 951 inflatedBounds.roundOut(&inflatedIBounds); | 938 inflatedBounds.roundOut(&inflatedIBounds); |
| 952 | 939 |
| 953 typedef GrReducedClip::ElementList ElementList; | 940 typedef GrReducedClip::ElementList ElementList; |
| 954 // Get the reduced version of the stack. | 941 // Get the reduced version of the stack. |
| 955 ElementList reducedClips; | 942 ElementList reducedClips; |
| 956 int32_t reducedGenID; | 943 |
| 957 GrReducedClip::InitialState initial; | 944 GrReducedClip::InitialState initial; |
| 958 SkIRect tBounds(inflatedIBounds); | 945 SkIRect tBounds(inflatedIBounds); |
| 959 SkIRect* tightBounds = r.nextBool() ? &tBounds : NULL; | 946 SkIRect* tightBounds = r.nextBool() ? &tBounds : NULL; |
| 960 GrReducedClip::ReduceClipStack(stack, | 947 GrReducedClip::ReduceClipStack(stack, |
| 961 inflatedIBounds, | 948 inflatedIBounds, |
| 962 &reducedClips, | 949 &reducedClips, |
| 963 &reducedGenID, | |
| 964 &initial, | 950 &initial, |
| 965 tightBounds); | 951 tightBounds); |
| 966 | 952 |
| 967 REPORTER_ASSERT(reporter, SkClipStack::kInvalidGenID != reducedGenID); | |
| 968 | |
| 969 // Build a new clip stack based on the reduced clip elements | 953 // Build a new clip stack based on the reduced clip elements |
| 970 SkClipStack reducedStack; | 954 SkClipStack reducedStack; |
| 971 if (GrReducedClip::kAllOut_InitialState == initial) { | 955 if (GrReducedClip::kAllOut_InitialState == initial) { |
| 972 // whether the result is bounded or not, the whole plane should star
t outside the clip. | 956 // whether the result is bounded or not, the whole plane should star
t outside the clip. |
| 973 reducedStack.clipEmpty(); | 957 reducedStack.clipEmpty(); |
| 974 } | 958 } |
| 975 for (ElementList::Iter iter = reducedClips.headIter(); NULL != iter.get(
); iter.next()) { | 959 for (ElementList::Iter iter = reducedClips.headIter(); NULL != iter.get(
); iter.next()) { |
| 976 add_elem_to_stack(*iter.get(), &reducedStack); | 960 add_elem_to_stack(*iter.get(), &reducedStack); |
| 977 } | 961 } |
| 978 | 962 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 995 reducedRegion.setRect(inflatedIBounds); | 979 reducedRegion.setRect(inflatedIBounds); |
| 996 iter.reset(reducedStack, SkClipStack::Iter::kBottom_IterStart); | 980 iter.reset(reducedStack, SkClipStack::Iter::kBottom_IterStart); |
| 997 while ((element = iter.next())) { | 981 while ((element = iter.next())) { |
| 998 add_elem_to_region(*element, inflatedIBounds, &reducedRegion); | 982 add_elem_to_region(*element, inflatedIBounds, &reducedRegion); |
| 999 } | 983 } |
| 1000 | 984 |
| 1001 REPORTER_ASSERT(reporter, region == reducedRegion); | 985 REPORTER_ASSERT(reporter, region == reducedRegion); |
| 1002 } | 986 } |
| 1003 } | 987 } |
| 1004 | 988 |
| 1005 static void test_reduced_clip_stack_genid(skiatest::Reporter* reporter) { | |
| 1006 { | |
| 1007 SkClipStack stack; | |
| 1008 stack.clipDevRect(SkRect::MakeXYWH(0, 0, 100, 100), SkRegion::kReplace_O
p, true); | |
| 1009 stack.clipDevRect(SkRect::MakeXYWH(0, 0, 50.3f, 50.3f), SkRegion::kRepla
ce_Op, true); | |
| 1010 SkIRect inflatedIBounds = SkIRect::MakeXYWH(0, 0, 100, 100); | |
| 1011 | |
| 1012 GrReducedClip::ElementList reducedClips; | |
| 1013 int32_t reducedGenID; | |
| 1014 GrReducedClip::InitialState initial; | |
| 1015 SkIRect tightBounds; | |
| 1016 | |
| 1017 GrReducedClip::ReduceClipStack(stack, | |
| 1018 inflatedIBounds, | |
| 1019 &reducedClips, | |
| 1020 &reducedGenID, | |
| 1021 &initial, | |
| 1022 &tightBounds); | |
| 1023 | |
| 1024 REPORTER_ASSERT(reporter, reducedClips.count() == 1); | |
| 1025 // Clips will be cached based on the generation id. Make sure the gen id
is valid. | |
| 1026 REPORTER_ASSERT(reporter, SkClipStack::kInvalidGenID != reducedGenID); | |
| 1027 } | |
| 1028 { | |
| 1029 SkClipStack stack; | |
| 1030 | |
| 1031 // Create a clip with following 25.3, 25.3 boxes which are 25 apart: | |
| 1032 // A B | |
| 1033 // C D | |
| 1034 | |
| 1035 stack.clipDevRect(SkRect::MakeXYWH(0, 0, 25.3f, 25.3f), SkRegion::kRepla
ce_Op, true); | |
| 1036 int32_t genIDA = stack.getTopmostGenID(); | |
| 1037 stack.clipDevRect(SkRect::MakeXYWH(50, 0, 25.3f, 25.3f), SkRegion::kUnio
n_Op, true); | |
| 1038 int32_t genIDB = stack.getTopmostGenID(); | |
| 1039 stack.clipDevRect(SkRect::MakeXYWH(0, 50, 25.3f, 25.3f), SkRegion::kUnio
n_Op, true); | |
| 1040 int32_t genIDC = stack.getTopmostGenID(); | |
| 1041 stack.clipDevRect(SkRect::MakeXYWH(50, 50, 25.3f, 25.3f), SkRegion::kUni
on_Op, true); | |
| 1042 int32_t genIDD = stack.getTopmostGenID(); | |
| 1043 | |
| 1044 #define XYWH SkIRect::MakeXYWH | |
| 1045 | |
| 1046 SkIRect unused; | |
| 1047 unused.setEmpty(); | |
| 1048 SkIRect stackBounds = XYWH(0, 0, 76, 76); | |
| 1049 | |
| 1050 // The base test is to test each rect in two ways: | |
| 1051 // 1) The box dimensions. (Should reduce to "all in", no elements). | |
| 1052 // 2) A bit over the box dimensions. | |
| 1053 // In the case 2, test that the generation id is what is expected. | |
| 1054 // The rects are of fractional size so that case 2 never gets optimized
to an empty element | |
| 1055 // list. | |
| 1056 | |
| 1057 // Not passing in tighter bounds is tested for consistency. | |
| 1058 struct { | |
| 1059 SkIRect testBounds; | |
| 1060 int reducedClipCount; | |
| 1061 int32_t reducedGenID; | |
| 1062 GrReducedClip::InitialState initialState; | |
| 1063 SkIRect tighterBounds; // If this is empty, the query will not pass
tighter bounds | |
| 1064 // parameter. | |
| 1065 } testCases[] = { | |
| 1066 // Rect A. | |
| 1067 { XYWH(0, 0, 25, 25), 0, SkClipStack::kWideOpenGenID, GrReducedClip:
:kAllIn_InitialState, XYWH(0, 0, 25, 25) }, | |
| 1068 { XYWH(0, 0, 25, 25), 0, SkClipStack::kWideOpenGenID, GrReducedClip:
:kAllIn_InitialState, unused }, | |
| 1069 { XYWH(0, 0, 27, 27), 1, genIDA, GrReducedClip::kAllOut_InitialState
, XYWH(0, 0, 27, 27)}, | |
| 1070 { XYWH(0, 0, 27, 27), 1, genIDA, GrReducedClip::kAllOut_InitialState
, unused }, | |
| 1071 | |
| 1072 // Rect B. | |
| 1073 { XYWH(50, 0, 25, 25), 0, SkClipStack::kWideOpenGenID, GrReducedClip
::kAllIn_InitialState, XYWH(50, 0, 25, 25) }, | |
| 1074 { XYWH(50, 0, 25, 25), 0, SkClipStack::kWideOpenGenID, GrReducedClip
::kAllIn_InitialState, unused }, | |
| 1075 { XYWH(50, 0, 27, 27), 1, genIDB, GrReducedClip::kAllOut_InitialStat
e, XYWH(50, 0, 26, 27) }, | |
| 1076 { XYWH(50, 0, 27, 27), 1, genIDB, GrReducedClip::kAllOut_InitialStat
e, unused }, | |
| 1077 | |
| 1078 // Rect C. | |
| 1079 { XYWH(0, 50, 25, 25), 0, SkClipStack::kWideOpenGenID, GrReducedClip
::kAllIn_InitialState, XYWH(0, 50, 25, 25) }, | |
| 1080 { XYWH(0, 50, 25, 25), 0, SkClipStack::kWideOpenGenID, GrReducedClip
::kAllIn_InitialState, unused }, | |
| 1081 { XYWH(0, 50, 27, 27), 1, genIDC, GrReducedClip::kAllOut_InitialStat
e, XYWH(0, 50, 27, 26) }, | |
| 1082 { XYWH(0, 50, 27, 27), 1, genIDC, GrReducedClip::kAllOut_InitialStat
e, unused }, | |
| 1083 | |
| 1084 // Rect D. | |
| 1085 { XYWH(50, 50, 25, 25), 0, SkClipStack::kWideOpenGenID, GrReducedCli
p::kAllIn_InitialState, unused }, | |
| 1086 { XYWH(50, 50, 25, 25), 0, SkClipStack::kWideOpenGenID, GrReducedCli
p::kAllIn_InitialState, XYWH(50, 50, 25, 25)}, | |
| 1087 { XYWH(50, 50, 27, 27), 1, genIDD, GrReducedClip::kAllOut_InitialSta
te, unused }, | |
| 1088 { XYWH(50, 50, 27, 27), 1, genIDD, GrReducedClip::kAllOut_InitialSta
te, XYWH(50, 50, 26, 26)}, | |
| 1089 | |
| 1090 // Other tests: | |
| 1091 { XYWH(0, 0, 100, 100), 4, genIDD, GrReducedClip::kAllOut_InitialSta
te, unused }, | |
| 1092 { XYWH(0, 0, 100, 100), 4, genIDD, GrReducedClip::kAllOut_InitialSta
te, stackBounds }, | |
| 1093 | |
| 1094 // Rect in the middle, touches none. | |
| 1095 { XYWH(26, 26, 24, 24), 0, SkClipStack::kEmptyGenID, GrReducedClip::
kAllOut_InitialState, unused }, | |
| 1096 { XYWH(26, 26, 24, 24), 0, SkClipStack::kEmptyGenID, GrReducedClip::
kAllOut_InitialState, XYWH(26, 26, 24, 24) }, | |
| 1097 | |
| 1098 // Rect in the middle, touches all the rects. GenID is the last rect
. | |
| 1099 { XYWH(24, 24, 27, 27), 4, genIDD, GrReducedClip::kAllOut_InitialSta
te, unused }, | |
| 1100 { XYWH(24, 24, 27, 27), 4, genIDD, GrReducedClip::kAllOut_InitialSta
te, XYWH(24, 24, 27, 27) }, | |
| 1101 }; | |
| 1102 | |
| 1103 #undef XYWH | |
| 1104 | |
| 1105 for (size_t i = 0; i < SK_ARRAY_COUNT(testCases); ++i) { | |
| 1106 GrReducedClip::ElementList reducedClips; | |
| 1107 int32_t reducedGenID; | |
| 1108 GrReducedClip::InitialState initial; | |
| 1109 SkIRect tightBounds; | |
| 1110 | |
| 1111 GrReducedClip::ReduceClipStack(stack, | |
| 1112 testCases[i].testBounds, | |
| 1113 &reducedClips, | |
| 1114 &reducedGenID, | |
| 1115 &initial, | |
| 1116 testCases[i].tighterBounds.isEmpty()
? NULL : &tightBounds); | |
| 1117 | |
| 1118 REPORTER_ASSERT(reporter, reducedClips.count() == testCases[i].reduc
edClipCount); | |
| 1119 SkASSERT(reducedClips.count() == testCases[i].reducedClipCount); | |
| 1120 REPORTER_ASSERT(reporter, reducedGenID == testCases[i].reducedGenID)
; | |
| 1121 SkASSERT(reducedGenID == testCases[i].reducedGenID); | |
| 1122 REPORTER_ASSERT(reporter, initial == testCases[i].initialState); | |
| 1123 SkASSERT(initial == testCases[i].initialState); | |
| 1124 if (!testCases[i].tighterBounds.isEmpty()) { | |
| 1125 REPORTER_ASSERT(reporter, tightBounds == testCases[i].tighterBou
nds); | |
| 1126 SkASSERT(tightBounds == testCases[i].tighterBounds); | |
| 1127 } | |
| 1128 } | |
| 1129 } | |
| 1130 } | |
| 1131 | |
| 1132 static void test_reduced_clip_stack_no_aa_crash(skiatest::Reporter* reporter) { | |
| 1133 SkClipStack stack; | |
| 1134 stack.clipDevRect(SkIRect::MakeXYWH(0, 0, 100, 100), SkRegion::kReplace_Op); | |
| 1135 stack.clipDevRect(SkIRect::MakeXYWH(0, 0, 50, 50), SkRegion::kReplace_Op); | |
| 1136 SkIRect inflatedIBounds = SkIRect::MakeXYWH(0, 0, 100, 100); | |
| 1137 | |
| 1138 GrReducedClip::ElementList reducedClips; | |
| 1139 int32_t reducedGenID; | |
| 1140 GrReducedClip::InitialState initial; | |
| 1141 SkIRect tightBounds; | |
| 1142 | |
| 1143 // At the time, this would crash. | |
| 1144 GrReducedClip::ReduceClipStack(stack, | |
| 1145 inflatedIBounds, | |
| 1146 &reducedClips, | |
| 1147 &reducedGenID, | |
| 1148 &initial, | |
| 1149 &tightBounds); | |
| 1150 | |
| 1151 REPORTER_ASSERT(reporter, 0 == reducedClips.count()); | |
| 1152 } | |
| 1153 | |
| 1154 #endif | 989 #endif |
| 1155 ////////////////////////////////////////////////////////////////////////////////
/////////////////// | 990 ////////////////////////////////////////////////////////////////////////////////
/////////////////// |
| 1156 | 991 |
| 1157 static void TestClipStack(skiatest::Reporter* reporter) { | 992 static void TestClipStack(skiatest::Reporter* reporter) { |
| 1158 SkClipStack stack; | 993 SkClipStack stack; |
| 1159 | 994 |
| 1160 REPORTER_ASSERT(reporter, 0 == stack.getSaveCount()); | 995 REPORTER_ASSERT(reporter, 0 == stack.getSaveCount()); |
| 1161 assert_count(reporter, stack, 0); | 996 assert_count(reporter, stack, 0); |
| 1162 | 997 |
| 1163 static const SkIRect gRects[] = { | 998 static const SkIRect gRects[] = { |
| (...skipping 28 matching lines...) Expand all Loading... |
| 1192 test_bounds(reporter, true); // once with rects | 1027 test_bounds(reporter, true); // once with rects |
| 1193 test_bounds(reporter, false); // once with paths | 1028 test_bounds(reporter, false); // once with paths |
| 1194 test_isWideOpen(reporter); | 1029 test_isWideOpen(reporter); |
| 1195 test_rect_merging(reporter); | 1030 test_rect_merging(reporter); |
| 1196 test_rect_replace(reporter); | 1031 test_rect_replace(reporter); |
| 1197 test_rect_inverse_fill(reporter); | 1032 test_rect_inverse_fill(reporter); |
| 1198 test_path_replace(reporter); | 1033 test_path_replace(reporter); |
| 1199 test_quickContains(reporter); | 1034 test_quickContains(reporter); |
| 1200 #if SK_SUPPORT_GPU | 1035 #if SK_SUPPORT_GPU |
| 1201 test_reduced_clip_stack(reporter); | 1036 test_reduced_clip_stack(reporter); |
| 1202 test_reduced_clip_stack_genid(reporter); | |
| 1203 test_reduced_clip_stack_no_aa_crash(reporter); | |
| 1204 #endif | 1037 #endif |
| 1205 } | 1038 } |
| 1206 | 1039 |
| 1207 #include "TestClassDef.h" | 1040 #include "TestClassDef.h" |
| 1208 DEFINE_TESTCLASS("ClipStack", TestClipStackClass, TestClipStack) | 1041 DEFINE_TESTCLASS("ClipStack", TestClipStackClass, TestClipStack) |
| OLD | NEW |