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

Side by Side Diff: tests/ClipStackTest.cpp

Issue 2130903002: Make all parameters reqiured to GrReducedClip::ReduceClipStack (Closed) Base URL: https://chromium.googlesource.com/skia.git@hidebounds
Patch Set: restore whitespace Created 4 years, 5 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/GrReducedClip.cpp ('K') | « src/gpu/GrReducedClip.cpp ('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
1 /* 1 /*
2 * Copyright 2011 Google Inc. 2 * Copyright 2011 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
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 945 matching lines...) Expand 10 before | Expand all | Expand 10 after
956 SkRect inflatedBounds = kBounds; 956 SkRect inflatedBounds = kBounds;
957 inflatedBounds.outset(kBounds.width() / 2, kBounds.height() / 2); 957 inflatedBounds.outset(kBounds.width() / 2, kBounds.height() / 2);
958 SkIRect inflatedIBounds; 958 SkIRect inflatedIBounds;
959 inflatedBounds.roundOut(&inflatedIBounds); 959 inflatedBounds.roundOut(&inflatedIBounds);
960 960
961 typedef GrReducedClip::ElementList ElementList; 961 typedef GrReducedClip::ElementList ElementList;
962 // Get the reduced version of the stack. 962 // Get the reduced version of the stack.
963 ElementList reducedClips; 963 ElementList reducedClips;
964 int32_t reducedGenID; 964 int32_t reducedGenID;
965 GrReducedClip::InitialState initial; 965 GrReducedClip::InitialState initial;
966 SkIRect tBounds(inflatedIBounds); 966 SkIRect tighterBounds;
967 SkIRect* tightBounds = r.nextBool() ? &tBounds : nullptr; 967 bool requiresAA;
968 GrReducedClip::ReduceClipStack(stack, 968 GrReducedClip::ReduceClipStack(stack,
969 inflatedIBounds, 969 inflatedIBounds,
970 &reducedClips, 970 &reducedClips,
971 &reducedGenID, 971 &reducedGenID,
972 &initial, 972 &initial,
973 tightBounds); 973 &tighterBounds,
974 &requiresAA);
974 975
975 REPORTER_ASSERT(reporter, SkClipStack::kInvalidGenID != reducedGenID); 976 REPORTER_ASSERT(reporter, SkClipStack::kInvalidGenID != reducedGenID);
976 977
977 // Build a new clip stack based on the reduced clip elements 978 // Build a new clip stack based on the reduced clip elements
978 SkClipStack reducedStack; 979 SkClipStack reducedStack;
979 if (GrReducedClip::kAllOut_InitialState == initial) { 980 if (GrReducedClip::kAllOut_InitialState == initial) {
980 // whether the result is bounded or not, the whole plane should star t outside the clip. 981 // whether the result is bounded or not, the whole plane should star t outside the clip.
981 reducedStack.clipEmpty(); 982 reducedStack.clipEmpty();
982 } 983 }
983 for (ElementList::Iter iter = reducedClips.headIter(); iter.get(); iter. next()) { 984 for (ElementList::Iter iter = reducedClips.headIter(); iter.get(); iter. next()) {
984 add_elem_to_stack(*iter.get(), &reducedStack); 985 add_elem_to_stack(*iter.get(), &reducedStack);
985 } 986 }
986 987
987 // GrReducedClipStack assumes that the final result is clipped to the re turned bounds 988 // GrReducedClipStack assumes that the final result is clipped to the re turned bounds
988 if (tightBounds) { 989 reducedStack.clipDevRect(tighterBounds, SkRegion::kIntersect_Op);
989 reducedStack.clipDevRect(*tightBounds, SkRegion::kIntersect_Op); 990 stack.clipDevRect(tighterBounds, SkRegion::kIntersect_Op);
990 }
991 991
992 // convert both the original stack and reduced stack to SkRegions and se e if they're equal 992 // convert both the original stack and reduced stack to SkRegions and se e if they're equal
993 SkRegion region; 993 SkRegion region;
994 SkRegion reducedRegion; 994 SkRegion reducedRegion;
995 995
996 region.setRect(inflatedIBounds); 996 region.setRect(inflatedIBounds);
997 const SkClipStack::Element* element; 997 const SkClipStack::Element* element;
998 SkClipStack::Iter iter(stack, SkClipStack::Iter::kBottom_IterStart); 998 SkClipStack::Iter iter(stack, SkClipStack::Iter::kBottom_IterStart);
999 while ((element = iter.next())) { 999 while ((element = iter.next())) {
1000 add_elem_to_region(*element, inflatedIBounds, &region); 1000 add_elem_to_region(*element, inflatedIBounds, &region);
(...skipping 20 matching lines...) Expand all
1021 { 1021 {
1022 SkClipStack stack; 1022 SkClipStack stack;
1023 stack.clipDevRect(SkRect::MakeXYWH(0, 0, 100, 100), SkRegion::kReplace_O p, true); 1023 stack.clipDevRect(SkRect::MakeXYWH(0, 0, 100, 100), SkRegion::kReplace_O p, true);
1024 stack.clipDevRect(SkRect::MakeXYWH(0, 0, SkScalar(50.3), SkScalar(50.3)) , SkRegion::kReplace_Op, true); 1024 stack.clipDevRect(SkRect::MakeXYWH(0, 0, SkScalar(50.3), SkScalar(50.3)) , SkRegion::kReplace_Op, true);
1025 SkIRect inflatedIBounds = SkIRect::MakeXYWH(0, 0, 100, 100); 1025 SkIRect inflatedIBounds = SkIRect::MakeXYWH(0, 0, 100, 100);
1026 1026
1027 GrReducedClip::ElementList reducedClips; 1027 GrReducedClip::ElementList reducedClips;
1028 int32_t reducedGenID; 1028 int32_t reducedGenID;
1029 GrReducedClip::InitialState initial; 1029 GrReducedClip::InitialState initial;
1030 SkIRect tightBounds; 1030 SkIRect tightBounds;
1031 bool requiresAA;
1031 1032
1032 GrReducedClip::ReduceClipStack(stack, 1033 GrReducedClip::ReduceClipStack(stack,
1033 inflatedIBounds, 1034 inflatedIBounds,
1034 &reducedClips, 1035 &reducedClips,
1035 &reducedGenID, 1036 &reducedGenID,
1036 &initial, 1037 &initial,
1037 &tightBounds); 1038 &tightBounds,
1039 &requiresAA);
1038 1040
1039 REPORTER_ASSERT(reporter, reducedClips.count() == 1); 1041 REPORTER_ASSERT(reporter, reducedClips.count() == 1);
1040 // Clips will be cached based on the generation id. Make sure the gen id is valid. 1042 // Clips will be cached based on the generation id. Make sure the gen id is valid.
1041 REPORTER_ASSERT(reporter, SkClipStack::kInvalidGenID != reducedGenID); 1043 REPORTER_ASSERT(reporter, SkClipStack::kInvalidGenID != reducedGenID);
1042 } 1044 }
1043 { 1045 {
1044 SkClipStack stack; 1046 SkClipStack stack;
1045 1047
1046 // Create a clip with following 25.3, 25.3 boxes which are 25 apart: 1048 // Create a clip with following 25.3, 25.3 boxes which are 25 apart:
1047 // A B 1049 // A B
1048 // C D 1050 // C D
1049 1051
1050 stack.clipDevRect(SkRect::MakeXYWH(0, 0, SkScalar(25.3), SkScalar(25.3)) , SkRegion::kReplace_Op, true); 1052 stack.clipDevRect(SkRect::MakeXYWH(0, 0, SkScalar(25.3), SkScalar(25.3)) , SkRegion::kReplace_Op, true);
1051 int32_t genIDA = stack.getTopmostGenID(); 1053 int32_t genIDA = stack.getTopmostGenID();
1052 stack.clipDevRect(SkRect::MakeXYWH(50, 0, SkScalar(25.3), SkScalar(25.3) ), SkRegion::kUnion_Op, true); 1054 stack.clipDevRect(SkRect::MakeXYWH(50, 0, SkScalar(25.3), SkScalar(25.3) ), SkRegion::kUnion_Op, true);
1053 int32_t genIDB = stack.getTopmostGenID(); 1055 int32_t genIDB = stack.getTopmostGenID();
1054 stack.clipDevRect(SkRect::MakeXYWH(0, 50, SkScalar(25.3), SkScalar(25.3) ), SkRegion::kUnion_Op, true); 1056 stack.clipDevRect(SkRect::MakeXYWH(0, 50, SkScalar(25.3), SkScalar(25.3) ), SkRegion::kUnion_Op, true);
1055 int32_t genIDC = stack.getTopmostGenID(); 1057 int32_t genIDC = stack.getTopmostGenID();
1056 stack.clipDevRect(SkRect::MakeXYWH(50, 50, SkScalar(25.3), SkScalar(25.3 )), SkRegion::kUnion_Op, true); 1058 stack.clipDevRect(SkRect::MakeXYWH(50, 50, SkScalar(25.3), SkScalar(25.3 )), SkRegion::kUnion_Op, true);
1057 int32_t genIDD = stack.getTopmostGenID(); 1059 int32_t genIDD = stack.getTopmostGenID();
1058 1060
1059 1061
1060 #define XYWH SkIRect::MakeXYWH 1062 #define XYWH SkIRect::MakeXYWH
1061 1063
1062 SkIRect unused;
1063 unused.setEmpty();
1064 SkIRect stackBounds = XYWH(0, 0, 76, 76); 1064 SkIRect stackBounds = XYWH(0, 0, 76, 76);
1065 1065
1066 // The base test is to test each rect in two ways: 1066 // The base test is to test each rect in two ways:
1067 // 1) The box dimensions. (Should reduce to "all in", no elements). 1067 // 1) The box dimensions. (Should reduce to "all in", no elements).
1068 // 2) A bit over the box dimensions. 1068 // 2) A bit over the box dimensions.
1069 // In the case 2, test that the generation id is what is expected. 1069 // In the case 2, test that the generation id is what is expected.
1070 // The rects are of fractional size so that case 2 never gets optimized to an empty element 1070 // The rects are of fractional size so that case 2 never gets optimized to an empty element
1071 // list. 1071 // list.
1072 1072
1073 // Not passing in tighter bounds is tested for consistency. 1073 // Not passing in tighter bounds is tested for consistency.
1074 static const struct SUPPRESS_VISIBILITY_WARNING { 1074 static const struct SUPPRESS_VISIBILITY_WARNING {
1075 SkIRect testBounds; 1075 SkIRect testBounds;
1076 int reducedClipCount; 1076 int reducedClipCount;
1077 int32_t reducedGenID; 1077 int32_t reducedGenID;
1078 GrReducedClip::InitialState initialState; 1078 GrReducedClip::InitialState initialState;
1079 SkIRect tighterBounds; // If this is empty, the query will not pass tighter bounds 1079 SkIRect tighterBounds; // If this is empty, the query will not pass tighter bounds
1080 // parameter. 1080 // parameter.
1081 } testCases[] = { 1081 } testCases[] = {
1082 // Rect A. 1082 // Rect A.
1083 { XYWH(0, 0, 25, 25), 0, SkClipStack::kWideOpenGenID, GrReducedClip: :kAllIn_InitialState, XYWH(0, 0, 25, 25) }, 1083 { XYWH(0, 0, 25, 25), 0, SkClipStack::kWideOpenGenID, GrReducedClip: :kAllIn_InitialState, XYWH(0, 0, 25, 25) },
1084 { XYWH(0, 0, 25, 25), 0, SkClipStack::kWideOpenGenID, GrReducedClip: :kAllIn_InitialState, unused },
1085 { XYWH(0, 0, 27, 27), 1, genIDA, GrReducedClip::kAllOut_InitialState , XYWH(0, 0, 27, 27)}, 1084 { XYWH(0, 0, 27, 27), 1, genIDA, GrReducedClip::kAllOut_InitialState , XYWH(0, 0, 27, 27)},
1086 { XYWH(0, 0, 27, 27), 1, genIDA, GrReducedClip::kAllOut_InitialState , unused },
1087 1085
1088 // Rect B. 1086 // Rect B.
1089 { XYWH(50, 0, 25, 25), 0, SkClipStack::kWideOpenGenID, GrReducedClip ::kAllIn_InitialState, XYWH(50, 0, 25, 25) }, 1087 { XYWH(50, 0, 25, 25), 0, SkClipStack::kWideOpenGenID, GrReducedClip ::kAllIn_InitialState, XYWH(50, 0, 25, 25) },
1090 { XYWH(50, 0, 25, 25), 0, SkClipStack::kWideOpenGenID, GrReducedClip ::kAllIn_InitialState, unused },
1091 { XYWH(50, 0, 27, 27), 1, genIDB, GrReducedClip::kAllOut_InitialStat e, XYWH(50, 0, 26, 27) }, 1088 { XYWH(50, 0, 27, 27), 1, genIDB, GrReducedClip::kAllOut_InitialStat e, XYWH(50, 0, 26, 27) },
1092 { XYWH(50, 0, 27, 27), 1, genIDB, GrReducedClip::kAllOut_InitialStat e, unused },
1093 1089
1094 // Rect C. 1090 // Rect C.
1095 { XYWH(0, 50, 25, 25), 0, SkClipStack::kWideOpenGenID, GrReducedClip ::kAllIn_InitialState, XYWH(0, 50, 25, 25) }, 1091 { XYWH(0, 50, 25, 25), 0, SkClipStack::kWideOpenGenID, GrReducedClip ::kAllIn_InitialState, XYWH(0, 50, 25, 25) },
1096 { XYWH(0, 50, 25, 25), 0, SkClipStack::kWideOpenGenID, GrReducedClip ::kAllIn_InitialState, unused },
1097 { XYWH(0, 50, 27, 27), 1, genIDC, GrReducedClip::kAllOut_InitialStat e, XYWH(0, 50, 27, 26) }, 1092 { XYWH(0, 50, 27, 27), 1, genIDC, GrReducedClip::kAllOut_InitialStat e, XYWH(0, 50, 27, 26) },
1098 { XYWH(0, 50, 27, 27), 1, genIDC, GrReducedClip::kAllOut_InitialStat e, unused },
1099 1093
1100 // Rect D. 1094 // Rect D.
1101 { XYWH(50, 50, 25, 25), 0, SkClipStack::kWideOpenGenID, GrReducedCli p::kAllIn_InitialState, unused },
1102 { XYWH(50, 50, 25, 25), 0, SkClipStack::kWideOpenGenID, GrReducedCli p::kAllIn_InitialState, XYWH(50, 50, 25, 25)}, 1095 { XYWH(50, 50, 25, 25), 0, SkClipStack::kWideOpenGenID, GrReducedCli p::kAllIn_InitialState, XYWH(50, 50, 25, 25)},
1103 { XYWH(50, 50, 27, 27), 1, genIDD, GrReducedClip::kAllOut_InitialSta te, unused },
1104 { XYWH(50, 50, 27, 27), 1, genIDD, GrReducedClip::kAllOut_InitialSta te, XYWH(50, 50, 26, 26)}, 1096 { XYWH(50, 50, 27, 27), 1, genIDD, GrReducedClip::kAllOut_InitialSta te, XYWH(50, 50, 26, 26)},
1105 1097
1106 // Other tests: 1098 // Other tests:
1107 { XYWH(0, 0, 100, 100), 4, genIDD, GrReducedClip::kAllOut_InitialSta te, unused },
1108 { XYWH(0, 0, 100, 100), 4, genIDD, GrReducedClip::kAllOut_InitialSta te, stackBounds }, 1099 { XYWH(0, 0, 100, 100), 4, genIDD, GrReducedClip::kAllOut_InitialSta te, stackBounds },
1109 1100
1110 // Rect in the middle, touches none. 1101 // Rect in the middle, touches none.
1111 { XYWH(26, 26, 24, 24), 0, SkClipStack::kEmptyGenID, GrReducedClip:: kAllOut_InitialState, unused },
1112 { XYWH(26, 26, 24, 24), 0, SkClipStack::kEmptyGenID, GrReducedClip:: kAllOut_InitialState, XYWH(26, 26, 24, 24) }, 1102 { XYWH(26, 26, 24, 24), 0, SkClipStack::kEmptyGenID, GrReducedClip:: kAllOut_InitialState, XYWH(26, 26, 24, 24) },
1113 1103
1114 // Rect in the middle, touches all the rects. GenID is the last rect . 1104 // Rect in the middle, touches all the rects. GenID is the last rect .
1115 { XYWH(24, 24, 27, 27), 4, genIDD, GrReducedClip::kAllOut_InitialSta te, unused },
1116 { XYWH(24, 24, 27, 27), 4, genIDD, GrReducedClip::kAllOut_InitialSta te, XYWH(24, 24, 27, 27) }, 1105 { XYWH(24, 24, 27, 27), 4, genIDD, GrReducedClip::kAllOut_InitialSta te, XYWH(24, 24, 27, 27) },
1117 }; 1106 };
1118 1107
1119 #undef XYWH 1108 #undef XYWH
1120 1109
1121 for (size_t i = 0; i < SK_ARRAY_COUNT(testCases); ++i) { 1110 for (size_t i = 0; i < SK_ARRAY_COUNT(testCases); ++i) {
1122 GrReducedClip::ElementList reducedClips; 1111 GrReducedClip::ElementList reducedClips;
1123 int32_t reducedGenID; 1112 int32_t reducedGenID;
1124 GrReducedClip::InitialState initial; 1113 GrReducedClip::InitialState initial;
1125 SkIRect tightBounds; 1114 SkIRect tightBounds;
1115 bool requiresAA;
1126 1116
1127 GrReducedClip::ReduceClipStack(stack, 1117 GrReducedClip::ReduceClipStack(stack,
1128 testCases[i].testBounds, 1118 testCases[i].testBounds,
1129 &reducedClips, 1119 &reducedClips,
1130 &reducedGenID, 1120 &reducedGenID,
1131 &initial, 1121 &initial,
1132 testCases[i].tighterBounds.isEmpty() ? nullptr : &tightBounds); 1122 &tightBounds,
1123 &requiresAA);
1133 1124
1134 REPORTER_ASSERT(reporter, reducedClips.count() == testCases[i].reduc edClipCount); 1125 REPORTER_ASSERT(reporter, reducedClips.count() == testCases[i].reduc edClipCount);
1135 SkASSERT(reducedClips.count() == testCases[i].reducedClipCount); 1126 SkASSERT(reducedClips.count() == testCases[i].reducedClipCount);
1136 REPORTER_ASSERT(reporter, reducedGenID == testCases[i].reducedGenID) ; 1127 REPORTER_ASSERT(reporter, reducedGenID == testCases[i].reducedGenID) ;
1137 SkASSERT(reducedGenID == testCases[i].reducedGenID); 1128 SkASSERT(reducedGenID == testCases[i].reducedGenID);
1138 REPORTER_ASSERT(reporter, initial == testCases[i].initialState); 1129 REPORTER_ASSERT(reporter, initial == testCases[i].initialState);
1139 SkASSERT(initial == testCases[i].initialState); 1130 SkASSERT(initial == testCases[i].initialState);
1140 if (!testCases[i].tighterBounds.isEmpty()) { 1131 REPORTER_ASSERT(reporter, tightBounds == testCases[i].tighterBounds) ;
1141 REPORTER_ASSERT(reporter, tightBounds == testCases[i].tighterBou nds); 1132 SkASSERT(tightBounds == testCases[i].tighterBounds);
1142 SkASSERT(tightBounds == testCases[i].tighterBounds);
1143 }
1144 } 1133 }
1145 } 1134 }
1146 } 1135 }
1147 1136
1148 static void test_reduced_clip_stack_no_aa_crash(skiatest::Reporter* reporter) { 1137 static void test_reduced_clip_stack_no_aa_crash(skiatest::Reporter* reporter) {
1149 SkClipStack stack; 1138 SkClipStack stack;
1150 stack.clipDevRect(SkIRect::MakeXYWH(0, 0, 100, 100), SkRegion::kReplace_Op); 1139 stack.clipDevRect(SkIRect::MakeXYWH(0, 0, 100, 100), SkRegion::kReplace_Op);
1151 stack.clipDevRect(SkIRect::MakeXYWH(0, 0, 50, 50), SkRegion::kReplace_Op); 1140 stack.clipDevRect(SkIRect::MakeXYWH(0, 0, 50, 50), SkRegion::kReplace_Op);
1152 SkIRect inflatedIBounds = SkIRect::MakeXYWH(0, 0, 100, 100); 1141 SkIRect inflatedIBounds = SkIRect::MakeXYWH(0, 0, 100, 100);
1153 1142
1154 GrReducedClip::ElementList reducedClips; 1143 GrReducedClip::ElementList reducedClips;
1155 int32_t reducedGenID; 1144 int32_t reducedGenID;
1156 GrReducedClip::InitialState initial; 1145 GrReducedClip::InitialState initial;
1157 SkIRect tightBounds; 1146 SkIRect tightBounds;
1147 bool requiresAA;
1158 1148
1159 // At the time, this would crash. 1149 // At the time, this would crash.
1160 GrReducedClip::ReduceClipStack(stack, 1150 GrReducedClip::ReduceClipStack(stack,
1161 inflatedIBounds, 1151 inflatedIBounds,
1162 &reducedClips, 1152 &reducedClips,
1163 &reducedGenID, 1153 &reducedGenID,
1164 &initial, 1154 &initial,
1165 &tightBounds); 1155 &tightBounds,
1156 &requiresAA);
1166 1157
1167 REPORTER_ASSERT(reporter, 0 == reducedClips.count()); 1158 REPORTER_ASSERT(reporter, 0 == reducedClips.count());
1168 } 1159 }
1169 1160
1170 #endif 1161 #endif
1171 1162
1172 DEF_TEST(ClipStack, reporter) { 1163 DEF_TEST(ClipStack, reporter) {
1173 SkClipStack stack; 1164 SkClipStack stack;
1174 1165
1175 REPORTER_ASSERT(reporter, 0 == stack.getSaveCount()); 1166 REPORTER_ASSERT(reporter, 0 == stack.getSaveCount());
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1212 test_rect_replace(reporter); 1203 test_rect_replace(reporter);
1213 test_rect_inverse_fill(reporter); 1204 test_rect_inverse_fill(reporter);
1214 test_path_replace(reporter); 1205 test_path_replace(reporter);
1215 test_quickContains(reporter); 1206 test_quickContains(reporter);
1216 #if SK_SUPPORT_GPU 1207 #if SK_SUPPORT_GPU
1217 test_reduced_clip_stack(reporter); 1208 test_reduced_clip_stack(reporter);
1218 test_reduced_clip_stack_genid(reporter); 1209 test_reduced_clip_stack_genid(reporter);
1219 test_reduced_clip_stack_no_aa_crash(reporter); 1210 test_reduced_clip_stack_no_aa_crash(reporter);
1220 #endif 1211 #endif
1221 } 1212 }
OLDNEW
« src/gpu/GrReducedClip.cpp ('K') | « src/gpu/GrReducedClip.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698