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

Unified Diff: include/core/SkFixed.h

Issue 1824733002: For *ToFixed, in debug mode, assert that the value is in range. (Closed) Base URL: https://skia.googlesource.com/skia@scalar-pin-to-fixed
Patch Set: Created 4 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | src/core/SkScan.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: include/core/SkFixed.h
diff --git a/include/core/SkFixed.h b/include/core/SkFixed.h
index 8bbf2f0dfec48e298a3953843a58129601014202..8a56104172af0d043cc81fa00a5ed2fa36665277 100644
--- a/include/core/SkFixed.h
+++ b/include/core/SkFixed.h
@@ -29,8 +29,18 @@ typedef int32_t SkFixed;
#define SK_FixedTanPIOver8 (0x6A0A)
#define SK_FixedRoot2Over2 (0xB505)
-#define SkFixedToFloat(x) ((x) * 1.52587890625e-5f)
-#define SkFloatToFixed(x) ((SkFixed)((x) * SK_Fixed1))
+#define SkFixedToFloat(x) ((x) * 1.52587890625e-5f)
+#define SkFloatToFixed_Unsafe(x) ((SkFixed)((x) * SK_Fixed1))
+
+#ifdef SK_DEBUG
+ static inline SkFixed SkFloatToFixed(float x) {
mtklein 2016/03/22 12:38:02 It should be fine to use this definition in Debug
+ const SkFixed result = SkFloatToFixed_Unsafe(x);
+ SkASSERT(truncf(x * SK_Fixed1) == static_cast<float>(result));
+ return result;
+ }
+#else
+ #define SkFloatToFixed(x) SkFloatToFixed_Unsafe(x)
+#endif
// Pins over/under flows to SK_FixedMax/SK_FixedMin (slower than just a cast).
static inline SkFixed SkFloatPinToFixed(float x) {
@@ -43,20 +53,19 @@ static inline SkFixed SkFloatPinToFixed(float x) {
return result;
}
+#define SkFixedToDouble(x) ((x) * 1.52587890625e-5)
+#define SkDoubleToFixed_Unsafe(x) ((SkFixed)((x) * SK_Fixed1))
+
#ifdef SK_DEBUG
mtklein 2016/03/22 12:38:02 Ditto.
- static inline SkFixed SkFloatToFixed_Check(float x) {
- int64_t n64 = (int64_t)(x * SK_Fixed1);
- SkFixed n32 = (SkFixed)n64;
- SkASSERT(n64 == n32);
- return n32;
+ static inline SkFixed SkDoubleToFixed(double x) {
+ const SkFixed result = SkDoubleToFixed_Unsafe(x);
+ SkASSERT(trunc(x * SK_Fixed1) == static_cast<double>(result));
+ return result;
}
#else
- #define SkFloatToFixed_Check(x) SkFloatToFixed(x)
+ #define SkDoubleToFixed(x) SkDoubleToFixed_Unsafe(x)
#endif
-#define SkFixedToDouble(x) ((x) * 1.52587890625e-5)
-#define SkDoubleToFixed(x) ((SkFixed)((x) * SK_Fixed1))
-
// Pins over/under flows to SK_FixedMax/SK_FixedMin (slower than just a cast).
static inline SkFixed SkDoublePinToFixed(double x) {
x *= SK_Fixed1;
@@ -152,19 +161,30 @@ inline SkFixed SkFixedMul_longlong(SkFixed a, SkFixed b) {
#undef SkFixedMul
#define SkFixedMul(x, y) SkFixedMul_arm(x, y)
- #undef SkFloatToFixed
- #define SkFloatToFixed(x) SkFloatToFixed_arm(x)
+ #undef SkFloatToFixed_Unsafe
+ #define SkFloatToFixed_Unsafe(x) SkFloatToFixed_arm(x)
mtklein 2016/03/22 12:38:02 Can you double check that SkFloatToFixed still cal
#endif
///////////////////////////////////////////////////////////////////////////////
typedef int64_t SkFixed3232; // 32.32
-#define SkIntToFixed3232(x) (SkLeftShift((SkFixed3232)(x), 32))
-#define SkFixed3232ToInt(x) ((int)((x) >> 32))
-#define SkFixedToFixed3232(x) (SkLeftShift((SkFixed3232)(x), 16))
-#define SkFixed3232ToFixed(x) ((SkFixed)((x) >> 16))
-#define SkFloatToFixed3232(x) ((SkFixed3232)((x) * (65536.0f * 65536.0f)))
+#define SK_Fixed3232_1 (static_cast<SkFixed3232>(1) << 32)
+#define SkIntToFixed3232(x) (SkLeftShift((SkFixed3232)(x), 32))
+#define SkFixed3232ToInt(x) ((int)((x) >> 32))
+#define SkFixedToFixed3232(x) (SkLeftShift((SkFixed3232)(x), 16))
+#define SkFixed3232ToFixed(x) ((SkFixed)((x) >> 16))
+#define SkFloatToFixed3232_Unsafe(x) (static_cast<SkFixed3232>((x) * SK_Fixed3232_1))
+
+#ifdef SK_DEBUG
mtklein 2016/03/22 12:38:03 ditto
+ static inline SkFixed3232 SkFloatToFixed3232(float x) {
+ const SkFixed3232 result = SkFloatToFixed3232_Unsafe(x);
+ SkASSERT(truncf(x * SK_Fixed3232_1) == static_cast<float>(result));
+ return result;
+ }
+#else
+ #define SkFloatToFixed3232(x) SkFloatToFixed3232_Unsafe(x)
+#endif
#define SkScalarToFixed3232(x) SkFloatToFixed3232(x)
« no previous file with comments | « no previous file | src/core/SkScan.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698