Flutter Engine
The Flutter Engine
Functions | Variables
SkAnalyticEdge.cpp File Reference
#include "src/core/SkAnalyticEdge.h"
#include "include/core/SkPoint.h"
#include "include/private/base/SkMath.h"
#include "include/private/base/SkTo.h"
#include "src/core/SkFDot6.h"
#include <algorithm>
#include <cstddef>
#include <iterator>

Go to the source code of this file.

Functions

static SkFixed quick_inverse (SkFDot6 x)
 
static SkFixed quick_div (SkFDot6 a, SkFDot6 b)
 

Variables

static const int kInverseTableSize = 1024
 

Function Documentation

◆ quick_div()

static SkFixed quick_div ( SkFDot6  a,
SkFDot6  b 
)
inlinestatic

Definition at line 134 of file SkAnalyticEdge.cpp.

134 {
135 const int kMinBits = 3; // abs(b) should be at least (1 << kMinBits) for quick division
136 const int kMaxBits = 31; // Number of bits available in signed int
137 // Given abs(b) <= (1 << kMinBits), the inverse of abs(b) is at most 1 << (22 - kMinBits) in
138 // SkFixed format. Hence abs(a) should be less than kMaxAbsA
139 const int kMaxAbsA = 1 << (kMaxBits - (22 - kMinBits));
140 SkFDot6 abs_a = SkAbs32(a);
141 SkFDot6 abs_b = SkAbs32(b);
142 if (abs_b >= (1 << kMinBits) && abs_b < kInverseTableSize && abs_a < kMaxAbsA) {
143 SkASSERT((int64_t)a * quick_inverse(b) <= SK_MaxS32
144 && (int64_t)a * quick_inverse(b) >= SK_MinS32);
145 SkFixed ourAnswer = (a * quick_inverse(b)) >> 6;
146 SkASSERT(
147 (SkFDot6Div(a,b) == 0 && ourAnswer == 0) ||
148 SkFixedDiv(SkAbs32(SkFDot6Div(a,b) - ourAnswer), SkAbs32(SkFDot6Div(a,b))) <= 1 << 10
149 );
150 return ourAnswer;
151 }
152 return SkFDot6Div(a, b);
153}
static const int kInverseTableSize
static SkFixed quick_inverse(SkFDot6 x)
#define SkASSERT(cond)
Definition: SkAssert.h:116
int32_t SkFDot6
Definition: SkFDot6.h:16
SkFixed SkFDot6Div(SkFDot6 a, SkFDot6 b)
Definition: SkFDot6.h:68
int32_t SkFixed
Definition: SkFixed.h:25
#define SkFixedDiv(numer, denom)
Definition: SkFixed.h:93
static constexpr int32_t SK_MinS32
Definition: SkMath.h:22
static constexpr int32_t SK_MaxS32
Definition: SkMath.h:21
static int32_t SkAbs32(int32_t value)
Definition: SkSafe32.h:41
static bool b
struct MyStruct a[10]

◆ quick_inverse()

static SkFixed quick_inverse ( SkFDot6  x)
inlinestatic

Definition at line 21 of file SkAnalyticEdge.cpp.

21 {
22 static const int32_t table[] = {
23 -4096, -4100, -4104, -4108, -4112, -4116, -4120, -4124, -4128, -4132, -4136,
24 -4140, -4144, -4148, -4152, -4156, -4161, -4165, -4169, -4173, -4177, -4181,
25 -4185, -4190, -4194, -4198, -4202, -4206, -4211, -4215, -4219, -4223, -4228,
26 -4232, -4236, -4240, -4245, -4249, -4253, -4258, -4262, -4266, -4271, -4275,
27 -4279, -4284, -4288, -4293, -4297, -4301, -4306, -4310, -4315, -4319, -4324,
28 -4328, -4332, -4337, -4341, -4346, -4350, -4355, -4359, -4364, -4369, -4373,
29 -4378, -4382, -4387, -4391, -4396, -4401, -4405, -4410, -4415, -4419, -4424,
30 -4429, -4433, -4438, -4443, -4447, -4452, -4457, -4462, -4466, -4471, -4476,
31 -4481, -4485, -4490, -4495, -4500, -4505, -4510, -4514, -4519, -4524, -4529,
32 -4534, -4539, -4544, -4549, -4554, -4559, -4563, -4568, -4573, -4578, -4583,
33 -4588, -4593, -4599, -4604, -4609, -4614, -4619, -4624, -4629, -4634, -4639,
34 -4644, -4650, -4655, -4660, -4665, -4670, -4675, -4681, -4686, -4691, -4696,
35 -4702, -4707, -4712, -4718, -4723, -4728, -4733, -4739, -4744, -4750, -4755,
36 -4760, -4766, -4771, -4777, -4782, -4788, -4793, -4798, -4804, -4809, -4815,
37 -4821, -4826, -4832, -4837, -4843, -4848, -4854, -4860, -4865, -4871, -4877,
38 -4882, -4888, -4894, -4899, -4905, -4911, -4917, -4922, -4928, -4934, -4940,
39 -4946, -4951, -4957, -4963, -4969, -4975, -4981, -4987, -4993, -4999, -5005,
40 -5011, -5017, -5023, -5029, -5035, -5041, -5047, -5053, -5059, -5065, -5071,
41 -5077, -5084, -5090, -5096, -5102, -5108, -5115, -5121, -5127, -5133, -5140,
42 -5146, -5152, -5159, -5165, -5171, -5178, -5184, -5190, -5197, -5203, -5210,
43 -5216, -5223, -5229, -5236, -5242, -5249, -5256, -5262, -5269, -5275, -5282,
44 -5289, -5295, -5302, -5309, -5315, -5322, -5329, -5336, -5343, -5349, -5356,
45 -5363, -5370, -5377, -5384, -5391, -5398, -5405, -5412, -5418, -5426, -5433,
46 -5440, -5447, -5454, -5461, -5468, -5475, -5482, -5489, -5497, -5504, -5511,
47 -5518, -5526, -5533, -5540, -5548, -5555, -5562, -5570, -5577, -5584, -5592,
48 -5599, -5607, -5614, -5622, -5629, -5637, -5645, -5652, -5660, -5667, -5675,
49 -5683, -5691, -5698, -5706, -5714, -5722, -5729, -5737, -5745, -5753, -5761,
50 -5769, -5777, -5785, -5793, -5801, -5809, -5817, -5825, -5833, -5841, -5849,
51 -5857, -5866, -5874, -5882, -5890, -5899, -5907, -5915, -5924, -5932, -5940,
52 -5949, -5957, -5966, -5974, -5983, -5991, -6000, -6009, -6017, -6026, -6034,
53 -6043, -6052, -6061, -6069, -6078, -6087, -6096, -6105, -6114, -6123, -6132,
54 -6141, -6150, -6159, -6168, -6177, -6186, -6195, -6204, -6213, -6223, -6232,
55 -6241, -6250, -6260, -6269, -6278, -6288, -6297, -6307, -6316, -6326, -6335,
56 -6345, -6355, -6364, -6374, -6384, -6393, -6403, -6413, -6423, -6432, -6442,
57 -6452, -6462, -6472, -6482, -6492, -6502, -6512, -6523, -6533, -6543, -6553,
58 -6563, -6574, -6584, -6594, -6605, -6615, -6626, -6636, -6647, -6657, -6668,
59 -6678, -6689, -6700, -6710, -6721, -6732, -6743, -6754, -6765, -6775, -6786,
60 -6797, -6808, -6820, -6831, -6842, -6853, -6864, -6875, -6887, -6898, -6909,
61 -6921, -6932, -6944, -6955, -6967, -6978, -6990, -7002, -7013, -7025, -7037,
62 -7049, -7061, -7073, -7084, -7096, -7108, -7121, -7133, -7145, -7157, -7169,
63 -7182, -7194, -7206, -7219, -7231, -7244, -7256, -7269, -7281, -7294, -7307,
64 -7319, -7332, -7345, -7358, -7371, -7384, -7397, -7410, -7423, -7436, -7449,
65 -7463, -7476, -7489, -7503, -7516, -7530, -7543, -7557, -7570, -7584, -7598,
66 -7612, -7626, -7639, -7653, -7667, -7681, -7695, -7710, -7724, -7738, -7752,
67 -7767, -7781, -7796, -7810, -7825, -7839, -7854, -7869, -7884, -7898, -7913,
68 -7928, -7943, -7958, -7973, -7989, -8004, -8019, -8035, -8050, -8065, -8081,
69 -8097, -8112, -8128, -8144, -8160, -8176, -8192, -8208, -8224, -8240, -8256,
70 -8272, -8289, -8305, -8322, -8338, -8355, -8371, -8388, -8405, -8422, -8439,
71 -8456, -8473, -8490, -8507, -8525, -8542, -8559, -8577, -8594, -8612, -8630,
72 -8648, -8665, -8683, -8701, -8719, -8738, -8756, -8774, -8793, -8811, -8830,
73 -8848, -8867, -8886, -8905, -8924, -8943, -8962, -8981, -9000, -9020, -9039,
74 -9058, -9078, -9098, -9118, -9137, -9157, -9177, -9198, -9218, -9238, -9258,
75 -9279, -9300, -9320, -9341, -9362, -9383, -9404, -9425, -9446, -9467, -9489,
76 -9510, -9532, -9554, -9576, -9597, -9619, -9642, -9664, -9686, -9709, -9731,
77 -9754, -9776, -9799, -9822, -9845, -9868, -9892, -9915, -9939, -9962, -9986,
78 -10010, -10034, -10058, -10082, -10106, -10131, -10155, -10180, -10205, -10230,
79 -10255, -10280, -10305, -10330, -10356, -10381, -10407, -10433, -10459, -10485,
80 -10512, -10538, -10564, -10591, -10618, -10645, -10672, -10699, -10727, -10754,
81 -10782, -10810, -10837, -10866, -10894, -10922, -10951, -10979, -11008, -11037,
82 -11066, -11096, -11125, -11155, -11184, -11214, -11244, -11275, -11305, -11335,
83 -11366, -11397, -11428, -11459, -11491, -11522, -11554, -11586, -11618, -11650,
84 -11683, -11715, -11748, -11781, -11814, -11848, -11881, -11915, -11949, -11983,
85 -12018, -12052, -12087, -12122, -12157, -12192, -12228, -12264, -12300, -12336,
86 -12372, -12409, -12446, -12483, -12520, -12557, -12595, -12633, -12671, -12710,
87 -12748, -12787, -12826, -12865, -12905, -12945, -12985, -13025, -13066, -13107,
88 -13148, -13189, -13231, -13273, -13315, -13357, -13400, -13443, -13486, -13530,
89 -13573, -13617, -13662, -13706, -13751, -13797, -13842, -13888, -13934, -13981,
90 -14027, -14074, -14122, -14169, -14217, -14266, -14315, -14364, -14413, -14463,
91 -14513, -14563, -14614, -14665, -14716, -14768, -14820, -14873, -14926, -14979,
92 -15033, -15087, -15141, -15196, -15252, -15307, -15363, -15420, -15477, -15534,
93 -15592, -15650, -15709, -15768, -15827, -15887, -15947, -16008, -16070, -16131,
94 -16194, -16256, -16320, -16384, -16448, -16513, -16578, -16644, -16710, -16777,
95 -16844, -16912, -16980, -17050, -17119, -17189, -17260, -17331, -17403, -17476,
96 -17549, -17623, -17697, -17772, -17848, -17924, -18001, -18078, -18157, -18236,
97 -18315, -18396, -18477, -18558, -18641, -18724, -18808, -18893, -18978, -19065,
98 -19152, -19239, -19328, -19418, -19508, -19599, -19691, -19784, -19878, -19972,
99 -20068, -20164, -20262, -20360, -20460, -20560, -20661, -20763, -20867, -20971,
100 -21076, -21183, -21290, -21399, -21509, -21620, -21732, -21845, -21959, -22075,
101 -22192, -22310, -22429, -22550, -22671, -22795, -22919, -23045, -23172, -23301,
102 -23431, -23563, -23696, -23831, -23967, -24105, -24244, -24385, -24528, -24672,
103 -24818, -24966, -25115, -25266, -25420, -25575, -25731, -25890, -26051, -26214,
104 -26379, -26546, -26715, -26886, -27060, -27235, -27413, -27594, -27776, -27962,
105 -28149, -28339, -28532, -28728, -28926, -29127, -29330, -29537, -29746, -29959,
106 -30174, -30393, -30615, -30840, -31068, -31300, -31536, -31775, -32017, -32263,
107 -32513, -32768, -33026, -33288, -33554, -33825, -34100, -34379, -34663, -34952,
108 -35246, -35544, -35848, -36157, -36472, -36792, -37117, -37449, -37786, -38130,
109 -38479, -38836, -39199, -39568, -39945, -40329, -40721, -41120, -41527, -41943,
110 -42366, -42799, -43240, -43690, -44150, -44620, -45100, -45590, -46091, -46603,
111 -47127, -47662, -48210, -48770, -49344, -49932, -50533, -51150, -51781, -52428,
112 -53092, -53773, -54471, -55188, -55924, -56679, -57456, -58254, -59074, -59918,
113 -60787, -61680, -62601, -63550, -64527, -65536, -66576, -67650, -68759, -69905,
114 -71089, -72315, -73584, -74898, -76260, -77672, -79137, -80659, -82241, -83886,
115 -85598, -87381, -89240, -91180, -93206, -95325, -97541, -99864, -102300,
116 -104857, -107546, -110376, -113359, -116508, -119837, -123361, -127100, -131072,
117 -135300, -139810, -144631, -149796, -155344, -161319, -167772, -174762, -182361,
118 -190650, -199728, -209715, -220752, -233016, -246723, -262144, -279620, -299593,
119 -322638, -349525, -381300, -419430, -466033, -524288, -599186, -699050, -838860,
120 -1048576, -1398101, -2097152, -4194304, 0
121 };
122
123 static constexpr size_t kLastEntry = std::size(table) - 1;
124 SkASSERT(SkAbs32(x) <= static_cast<int32_t>(kLastEntry));
125 static_assert(kLastEntry == kInverseTableSize);
126
127 if (x > 0) {
128 return -table[kLastEntry - x];
129 } else {
130 return table[kLastEntry + x];
131 }
132}
SI F table(const skcms_Curve *curve, F v)
double x
it will be possible to load the file into Perfetto s trace viewer disable asset Prevents usage of any non test fonts unless they were explicitly Loaded via prefetched default font Indicates whether the embedding started a prefetch of the default font manager before creating the engine run In non interactive keep the shell running after the Dart script has completed enable serial On low power devices with low core running concurrent GC tasks on threads can cause them to contend with the UI thread which could potentially lead to jank This option turns off all concurrent GC activities domain network JSON encoded network policy per domain This overrides the DisallowInsecureConnections switch Embedder can specify whether to allow or disallow insecure connections at a domain level old gen heap size
Definition: switches.h:259

Variable Documentation

◆ kInverseTableSize

const int kInverseTableSize = 1024
static

Definition at line 19 of file SkAnalyticEdge.cpp.