diff options
Diffstat (limited to 'mozilla-1700520.patch')
-rw-r--r-- | mozilla-1700520.patch | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/mozilla-1700520.patch b/mozilla-1700520.patch new file mode 100644 index 0000000..c93cbe2 --- /dev/null +++ b/mozilla-1700520.patch @@ -0,0 +1,51 @@ +diff --git a/gfx/wr/swgl/src/blend.h b/gfx/wr/swgl/src/blend.h +--- a/gfx/wr/swgl/src/blend.h ++++ b/gfx/wr/swgl/src/blend.h +@@ -405,7 +405,7 @@ + blend_key = BlendKey(AA_BLEND_KEY_NONE + blend_key); + } + +-static ALWAYS_INLINE WideRGBA8 blend_pixels(uint32_t* buf, PackedRGBA8 pdst, ++static PREFER_INLINE WideRGBA8 blend_pixels(uint32_t* buf, PackedRGBA8 pdst, + WideRGBA8 src, int span = 4) { + WideRGBA8 dst = unpack(pdst); + const WideRGBA8 RGB_MASK = {0xFFFF, 0xFFFF, 0xFFFF, 0, 0xFFFF, 0xFFFF, +@@ -686,7 +686,7 @@ + // clang-format on + } + +-static ALWAYS_INLINE WideR8 blend_pixels(uint8_t* buf, WideR8 dst, WideR8 src, ++static PREFER_INLINE WideR8 blend_pixels(uint8_t* buf, WideR8 dst, WideR8 src, + int span = 4) { + // clang-format off + #define BLEND_CASE_KEY(key) \ +diff --git a/gfx/wr/swgl/src/gl.cc b/gfx/wr/swgl/src/gl.cc +--- a/gfx/wr/swgl/src/gl.cc ++++ b/gfx/wr/swgl/src/gl.cc +@@ -58,10 +58,24 @@ + } + + #else +-# define ALWAYS_INLINE __attribute__((always_inline)) inline ++// GCC is slower when dealing with always_inline, especially in debug builds. ++// When using Clang, use always_inline more aggressively. ++# if defined(__clang__) || defined(NDEBUG) ++# define ALWAYS_INLINE __attribute__((always_inline)) inline ++# else ++# define ALWAYS_INLINE inline ++# endif + # define NO_INLINE __attribute__((noinline)) + #endif + ++// Some functions may cause excessive binary bloat if inlined in debug or with ++// GCC builds, so use PREFER_INLINE on these instead of ALWAYS_INLINE. ++#if defined(__clang__) && defined(NDEBUG) ++# define PREFER_INLINE ALWAYS_INLINE ++#else ++# define PREFER_INLINE inline ++#endif ++ + #define UNREACHABLE __builtin_unreachable() + + #define UNUSED [[maybe_unused]] + |