OLD | NEW |
(Empty) | |
| 1 /* |
| 2 * Copyright 2016 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 #include "PathOpsExtendedTest.h" |
| 8 #include "PathOpsThreadedCommon.h" |
| 9 |
| 10 #define TEST(name) { name, #name } |
| 11 |
| 12 static void chalkboard(skiatest::Reporter* reporter, uint64_t testlines) { |
| 13 SkPath path; |
| 14 path.setFillType((SkPath::FillType) 0); |
| 15 uint64_t i = 0; |
| 16 path.moveTo(SkBits2Float(0x4470eed9), SkBits2Float(0x439c1ac1)); // 963.732f, 3
12.209f |
| 17 if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x4470dde3), SkBits2Float
(0x439c63d8)); // 963.467f, 312.78f |
| 18 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x4470dbd7), SkBits2Floa
t(0x439c3e57), SkBits2Float(0x4470c893), SkBits2Float(0x439c69fd), SkBits2Float(
0x4470cfcf), SkBits2Float(0x439c297a)); // 963.435f, 312.487f, 963.134f, 312.82
8f, 963.247f, 312.324f |
| 19 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x4470c46b), SkBits2Floa
t(0x439c8149), SkBits2Float(0x4470b137), SkBits2Float(0x439c2938), SkBits2Float(
0x4470b5f4), SkBits2Float(0x439ca99b)); // 963.069f, 313.01f, 962.769f, 312.322
f, 962.843f, 313.325f |
| 20 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x4470e842), SkBits2Floa
t(0x439c8335), SkBits2Float(0x447125a2), SkBits2Float(0x439cce78), SkBits2Float(
0x44715a2d), SkBits2Float(0x439c61ed)); // 963.629f, 313.025f, 964.588f, 313.61
3f, 965.409f, 312.765f |
| 21 if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x447150d5), SkBits2Float
(0x439c945c)); // 965.263f, 313.159f |
| 22 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x4471546b), SkBits2Floa
t(0x439c87f2), SkBits2Float(0x4471579e), SkBits2Float(0x439c8085), SkBits2Float(
0x44715a8f), SkBits2Float(0x439c7c4c)); // 965.319f, 313.062f, 965.369f, 313.00
4f, 965.415f, 312.971f |
| 23 if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x44715cbc), SkBits2Float
(0x439c79dd)); // 965.449f, 312.952f |
| 24 if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x44715dd3), SkBits2Float
(0x439c7918)); // 965.466f, 312.946f |
| 25 if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x44715e56), SkBits2Float
(0x439c78d6)); // 965.474f, 312.944f |
| 26 if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x44715e77), SkBits2Float
(0x439c78b5)); // 965.476f, 312.943f |
| 27 if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x44715e77), SkBits2Float
(0x439c78b5)); // 965.476f, 312.943f |
| 28 if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x44715e87), SkBits2Float
(0x439c78b5)); // 965.477f, 312.943f |
| 29 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x4471a50e), SkBits2Floa
t(0x439d05c3), SkBits2Float(0x4470fe77), SkBits2Float(0x439bb894), SkBits2Float(
0x44710f9e), SkBits2Float(0x439bdb03)); // 966.579f, 314.045f, 963.976f, 311.44
2f, 964.244f, 311.711f |
| 30 if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x44710fae), SkBits2Float
(0x439bdb24)); // 964.245f, 311.712f |
| 31 if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x44710fbe), SkBits2Float
(0x439bdba7)); // 964.246f, 311.716f |
| 32 if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x44710fce), SkBits2Float
(0x439be397)); // 964.247f, 311.778f |
| 33 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x44710eb7), SkBits2Floa
t(0x439bedf5), SkBits2Float(0x44710978), SkBits2Float(0x439bf74d), SkBits2Float(
0x447105e2), SkBits2Float(0x439c0064)); // 964.23f, 311.859f, 964.148f, 311.932
f, 964.092f, 312.003f |
| 34 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x4470fe86), SkBits2Floa
t(0x439c1270), SkBits2Float(0x4470fd4f), SkBits2Float(0x439c2250), SkBits2Float(
0x44712fde), SkBits2Float(0x439c33d9)); // 963.977f, 312.144f, 963.958f, 312.26
8f, 964.748f, 312.405f |
| 35 if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x4470fc48), SkBits2Float
(0x439c3271)); // 963.942f, 312.394f |
| 36 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x4470ee13), SkBits2Floa
t(0x439c4c2b), SkBits2Float(0x4471476b), SkBits2Float(0x439c5c0b), SkBits2Float(
0x44711177), SkBits2Float(0x439c7a40)); // 963.72f, 312.595f, 965.116f, 312.719
f, 964.273f, 312.955f |
| 37 if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x44712685), SkBits2Float
(0x439c7648)); // 964.602f, 312.924f |
| 38 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x447126a6), SkBits2Floa
t(0x439c7d31), SkBits2Float(0x44711d2d), SkBits2Float(0x439c8085), SkBits2Float(
0x44711d1d), SkBits2Float(0x439c8790)); // 964.604f, 312.978f, 964.456f, 313.00
4f, 964.455f, 313.059f |
| 39 if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x44712675), SkBits2Float
(0x439c843c)); // 964.601f, 313.033f |
| 40 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x44713bd5), SkBits2Floa
t(0x439c94e0), SkBits2Float(0x44713956), SkBits2Float(0x439ca065), SkBits2Float(
0x44712b63), SkBits2Float(0x439cb357)); // 964.935f, 313.163f, 964.896f, 313.25
3f, 964.678f, 313.401f |
| 41 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x44711af0), SkBits2Floa
t(0x439cb5a5), SkBits2Float(0x44712459), SkBits2Float(0x439cab47), SkBits2Float(
0x44711fad), SkBits2Float(0x439ca607)); // 964.421f, 313.419f, 964.568f, 313.33
8f, 964.495f, 313.297f |
| 42 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x44710f1a), SkBits2Floa
t(0x439caf3e), SkBits2Float(0x4471325d), SkBits2Float(0x439cbb26), SkBits2Float(
0x4471326e), SkBits2Float(0x439cc93a)); // 964.236f, 313.369f, 964.787f, 313.46
2f, 964.788f, 313.572f |
| 43 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x44712428), SkBits2Floa
t(0x439cd501), SkBits2Float(0x44711ad0), SkBits2Float(0x439cca82), SkBits2Float(
0x447113b6), SkBits2Float(0x439cc95b)); // 964.565f, 313.664f, 964.419f, 313.58
2f, 964.308f, 313.573f |
| 44 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x44712b95), SkBits2Floa
t(0x439cf20f), SkBits2Float(0x4470f550), SkBits2Float(0x439d0790), SkBits2Float(
0x4471426e), SkBits2Float(0x439d21ce)); // 964.681f, 313.891f, 963.833f, 314.05
9f, 965.038f, 314.264f |
| 45 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x44715072), SkBits2Floa
t(0x439d241c), SkBits2Float(0x44715c6a), SkBits2Float(0x439d15a5), SkBits2Float(
0x44716364), SkBits2Float(0x439d24c0)); // 965.257f, 314.282f, 965.444f, 314.16
9f, 965.553f, 314.287f |
| 46 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x44717b22), SkBits2Floa
t(0x439d0791), SkBits2Float(0x44715cbc), SkBits2Float(0x439cf231), SkBits2Float(
0x4471475c), SkBits2Float(0x439cda20)); // 965.924f, 314.059f, 965.449f, 313.89
2f, 965.115f, 313.704f |
| 47 if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x4471477d), SkBits2Float
(0x439ce12a)); // 965.117f, 313.759f |
| 48 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x4470fc4a), SkBits2Floa
t(0x439cd14b), SkBits2Float(0x44715810), SkBits2Float(0x439cd0e8), SkBits2Float(
0x4471372b), SkBits2Float(0x439cb272)); // 963.942f, 313.635f, 965.376f, 313.63
2f, 964.862f, 313.394f |
| 49 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x447155b2), SkBits2Floa
t(0x439cb91a), SkBits2Float(0x44715581), SkBits2Float(0x439cc72e), SkBits2Float(
0x447165f4), SkBits2Float(0x439ccbeb)); // 965.339f, 313.446f, 965.336f, 313.55
6f, 965.593f, 313.593f |
| 50 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x44719e77), SkBits2Floa
t(0x439ca2b4), SkBits2Float(0x44713979), SkBits2Float(0x439c993b), SkBits2Float(
0x4471821d), SkBits2Float(0x439c7b47)); // 966.476f, 313.271f, 964.898f, 313.19
7f, 966.033f, 312.963f |
| 51 if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x4471847b), SkBits2Float
(0x439c7dd6)); // 966.07f, 312.983f |
| 52 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x44718b96), SkBits2Floa
t(0x439c77b1), SkBits2Float(0x44717d81), SkBits2Float(0x439c6ebb), SkBits2Float(
0x44717667), SkBits2Float(0x439c66ab)); // 966.181f, 312.935f, 965.961f, 312.86
5f, 965.85f, 312.802f |
| 53 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x44716cff), SkBits2Floa
t(0x439c6a41), SkBits2Float(0x44716842), SkBits2Float(0x439c7315), SkBits2Float(
0x44716159), SkBits2Float(0x439c793a)); // 965.703f, 312.83f, 965.629f, 312.899
f, 965.521f, 312.947f |
| 54 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x44715a0d), SkBits2Floa
t(0x439c712a), SkBits2Float(0x44713938), SkBits2Float(0x439c6f3e), SkBits2Float(
0x44712b34), SkBits2Float(0x439c6d73)); // 965.407f, 312.884f, 964.894f, 312.86
9f, 964.675f, 312.855f |
| 55 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x44714c19), SkBits2Floa
t(0x439c614a), SkBits2Float(0x44711af2), SkBits2Float(0x439c61ee), SkBits2Float(
0x44712b34), SkBits2Float(0x439c518c)); // 965.189f, 312.76f, 964.421f, 312.765
f, 964.675f, 312.637f |
| 56 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x447149ab), SkBits2Floa
t(0x439c499c), SkBits2Float(0x4471474d), SkBits2Float(0x439c5c0b), SkBits2Float(
0x447157d0), SkBits2Float(0x439c6065)); // 965.151f, 312.575f, 965.114f, 312.71
9f, 965.372f, 312.753f |
| 57 if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x447142b1), SkBits2Float
(0x439c4fa0)); // 965.042f, 312.622f |
| 58 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x44714053), SkBits2Floa
t(0x439c3f1d), SkBits2Float(0x44716396), SkBits2Float(0x439c3c6d), SkBits2Float(
0x447173f9), SkBits2Float(0x439c3292)); // 965.005f, 312.493f, 965.556f, 312.47
2f, 965.812f, 312.395f |
| 59 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x44715c7c), SkBits2Floa
t(0x439c2628), SkBits2Float(0x44716397), SkBits2Float(0x439c3c4c), SkBits2Float(
0x447142b1), SkBits2Float(0x439c3398)); // 965.445f, 312.298f, 965.556f, 312.47
1f, 965.042f, 312.403f |
| 60 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x44715572), SkBits2Floa
t(0x439c2919), SkBits2Float(0x44715bd8), SkBits2Float(0x439c10a6), SkBits2Float(
0x447159bb), SkBits2Float(0x439bf68a)); // 965.335f, 312.321f, 965.435f, 312.13
f, 965.402f, 311.926f |
| 61 if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x44715698), SkBits2Float
(0x439be2f4)); // 965.353f, 311.773f |
| 62 if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x447153f8), SkBits2Float
(0x439bd95a)); // 965.312f, 311.698f |
| 63 if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x4471526f), SkBits2Float
(0x439bd49e)); // 965.288f, 311.661f |
| 64 if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x4471524e), SkBits2Float
(0x439bd45c)); // 965.286f, 311.659f |
| 65 if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x4471523e), SkBits2Float
(0x439bd41a)); // 965.285f, 311.657f |
| 66 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x44717148), SkBits2Floa
t(0x439c124f), SkBits2Float(0x44715ae2), SkBits2Float(0x439be562), SkBits2Float(
0x447161cb), SkBits2Float(0x439bf335)); // 965.77f, 312.143f, 965.42f, 311.792f
, 965.528f, 311.9f |
| 67 if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x447161bb), SkBits2Float
(0x439bf356)); // 965.527f, 311.901f |
| 68 if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x447161bb), SkBits2Float
(0x439bf356)); // 965.527f, 311.901f |
| 69 if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x44716169), SkBits2Float
(0x439bf3b8)); // 965.522f, 311.904f |
| 70 if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x447160c5), SkBits2Float
(0x439bf47d)); // 965.512f, 311.91f |
| 71 if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x44715f7d), SkBits2Float
(0x439bf627)); // 965.492f, 311.923f |
| 72 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x447158f6), SkBits2Floa
t(0x439bfeba), SkBits2Float(0x447152e1), SkBits2Float(0x439c0ac3), SkBits2Float(
0x44714e15), SkBits2Float(0x439c1919)); // 965.39f, 311.99f, 965.295f, 312.084f
, 965.22f, 312.196f |
| 73 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x4471548c), SkBits2Floa
t(0x439c10c7), SkBits2Float(0x447151bb), SkBits2Float(0x439bd7f2), SkBits2Float(
0x44715927), SkBits2Float(0x439be271)); // 965.321f, 312.131f, 965.277f, 311.68
7f, 965.393f, 311.769f |
| 74 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x447156b8), SkBits2Floa
t(0x439bd41b), SkBits2Float(0x44714c19), SkBits2Float(0x439bf356), SkBits2Float(
0x44714b13), SkBits2Float(0x439c222f)); // 965.355f, 311.657f, 965.189f, 311.90
1f, 965.173f, 312.267f |
| 75 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x44713dd4), SkBits2Floa
t(0x439c4aa2), SkBits2Float(0x44712ea9), SkBits2Float(0x439c2be9), SkBits2Float(
0x44712344), SkBits2Float(0x439c0085)); // 964.966f, 312.583f, 964.729f, 312.34
3f, 964.551f, 312.004f |
| 76 if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x44712605), SkBits2Float
(0x439c2fa0)); // 964.594f, 312.372f |
| 77 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x44711af3), SkBits2Floa
t(0x439c7e9a), SkBits2Float(0x44710de4), SkBits2Float(0x439bf41b), SkBits2Float(
0x4470fb65), SkBits2Float(0x439c20c7)); // 964.421f, 312.989f, 964.217f, 311.90
7f, 963.928f, 312.256f |
| 78 if (testlines & (1LL << i++)) path.lineTo(SkBits2Float(0x4470fbb7), SkBits2Float
(0x439c220f)); // 963.933f, 312.266f |
| 79 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x4470f5e4), SkBits2Floa
t(0x439c2bc9), SkBits2Float(0x4470ef5d), SkBits2Float(0x439c9e59), SkBits2Float(
0x4470e50f), SkBits2Float(0x439c85e6)); // 963.842f, 312.342f, 963.74f, 313.237
f, 963.579f, 313.046f |
| 80 if (testlines & (1LL << i++)) path.cubicTo(SkBits2Float(0x4470e8f6), SkBits2Floa
t(0x439c4e35), SkBits2Float(0x4470ee98), SkBits2Float(0x439c5333), SkBits2Float(
0x4470eed9), SkBits2Float(0x439c1ac1)); // 963.64f, 312.611f, 963.728f, 312.65f
, 963.732f, 312.209f |
| 81 SkASSERT(64 == i); |
| 82 path.close(); |
| 83 |
| 84 testSimplify(reporter, path, "chalkboard"); |
| 85 } |
| 86 |
| 87 static void testChalkboard(PathOpsThreadState* data) { |
| 88 uint64_t testlines = ((uint64_t) data->fB << 32) | (unsigned int) data->fA; |
| 89 chalkboard(data->fReporter, testlines); |
| 90 } |
| 91 |
| 92 static void chalkboard_threaded(skiatest::Reporter* reporter, const char* filena
me) { |
| 93 #if DEBUG_UNDER_DEVELOPMENT |
| 94 return; |
| 95 #endif |
| 96 initializeTests(reporter, "chalkboard"); |
| 97 PathOpsThreadedTestRunner testRunner(reporter); |
| 98 SkRandom r; |
| 99 for (int samples = 0; samples <= 64; ++samples) { |
| 100 int testCount; |
| 101 int bitCount = samples < 32 ? samples : 64 - samples; |
| 102 int index1 = 63; |
| 103 int index2 = 62; |
| 104 switch (bitCount) { |
| 105 case 0: |
| 106 testCount = 1; |
| 107 break; |
| 108 case 1: |
| 109 testCount = 64; |
| 110 break; |
| 111 case 2: |
| 112 testCount = reporter->allowExtendedTest() ? 63 * 62 / 2 : 100; |
| 113 break; |
| 114 default: |
| 115 testCount = reporter->allowExtendedTest() ? 10000 : 100; |
| 116 break; |
| 117 } |
| 118 for (int test = 0; test < testCount; ++test) { |
| 119 uint64_t testlines; |
| 120 switch (bitCount) { |
| 121 case 0: |
| 122 testlines = 0; |
| 123 break; |
| 124 case 1: |
| 125 testlines = 1LL << test; |
| 126 break; |
| 127 case 2: |
| 128 if (reporter->allowExtendedTest()) { |
| 129 SkASSERT(index1 >= 1); |
| 130 SkASSERT(index2 >= 0); |
| 131 testlines = 1LL << index1; |
| 132 testlines |= 1LL << index2; |
| 133 if (--index2 < 0) { |
| 134 --index1; |
| 135 index2 = index1 - 1; |
| 136 } |
| 137 break; |
| 138 } |
| 139 default: |
| 140 testlines = 0; |
| 141 for (int i = 0; i < bitCount; ++i) { |
| 142 int bit; |
| 143 do { |
| 144 bit = r.nextRangeU(0, 64); |
| 145 } while (testlines & (1LL << bit)); |
| 146 testlines |= 1LL << bit; |
| 147 } |
| 148 } |
| 149 if (samples >= 32) { |
| 150 testlines ^= 0xFFFFFFFFFFFFFFFFLL; |
| 151 } |
| 152 *testRunner.fRunnables.append() = |
| 153 new PathOpsThreadedRunnable(&testChalkboard, |
| 154 (int) (unsigned) (testlines & 0x
FFFFFFFF), |
| 155 (int) (unsigned) (testlines >> 3
2), |
| 156 0, 0, &testRunner); |
| 157 } |
| 158 } |
| 159 testRunner.render(); |
| 160 } |
| 161 |
| 162 static void chalkboard_1(skiatest::Reporter* reporter, const char* filename) { |
| 163 uint64_t testlines = 0xFFFFFFFFFFFFFFFFLL; |
| 164 chalkboard(reporter, testlines); |
| 165 } |
| 166 |
| 167 static void (*skipTest)(skiatest::Reporter* , const char* filename) = 0; |
| 168 static void (*firstTest)(skiatest::Reporter* , const char* filename) = 0; |
| 169 static void (*stopTest)(skiatest::Reporter* , const char* filename) = 0; |
| 170 |
| 171 static TestDesc tests[] = { |
| 172 TEST(chalkboard_1), |
| 173 TEST(chalkboard_threaded), |
| 174 }; |
| 175 |
| 176 static const size_t testCount = SK_ARRAY_COUNT(tests); |
| 177 static bool runReverse = false; |
| 178 |
| 179 DEF_TEST(PathOpsChalkboard, reporter) { |
| 180 RunTestSet(reporter, tests, testCount, firstTest, skipTest, stopTest, runRev
erse); |
| 181 } |
OLD | NEW |