diff options
Diffstat (limited to '')
-rw-r--r-- | external/cairo/pixman/pixman-0.24.4.patch | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/external/cairo/pixman/pixman-0.24.4.patch b/external/cairo/pixman/pixman-0.24.4.patch new file mode 100644 index 000000000..6d871e37b --- /dev/null +++ b/external/cairo/pixman/pixman-0.24.4.patch @@ -0,0 +1,91 @@ +--- misc/pixman-0.24.4/Makefile.in 2011-11-06 22:11:25.000000000 +0100 ++++ misc/build/pixman-0.24.4/Makefile.in 2011-12-16 09:06:45.317211035 +0100 +@@ -272,7 +272,7 @@ + top_build_prefix = @top_build_prefix@ + top_builddir = @top_builddir@ + top_srcdir = @top_srcdir@ +-SUBDIRS = pixman demos test ++SUBDIRS = pixman + pkgconfigdir = $(libdir)/pkgconfig + pkgconfig_DATA = pixman-1.pc + GPGKEY = 3892336E +--- misc/pixman-0.24.4/pixman/pixman-utils.c ++++ misc/build/pixman-0.24.4/pixman/pixman-utils.c +@@ -27,6 +27,7 @@ + #endif + #include <stdio.h> + #include <stdlib.h> ++#include <limits.h> + + #include "pixman-private.h" + +--- misc/pixman-0.24.4/pixman/pixman-glyph.c 2015-06-30 05:48:31.000000000 -0400 ++++ misc/build/pixman-0.24.4/pixman/pixman-glyph.c 2017-11-25 13:26:33.075558418 -0500 +@@ -38,6 +38,7 @@ + + /* XXX: These numbers are arbitrary---we've never done any measurements. + */ ++#define N_PIXELS_HIGH_WATER (4 * 1024 * 1024) + #define N_GLYPHS_HIGH_WATER (16384) + #define N_GLYPHS_LOW_WATER (8192) + #define HASH_SIZE (2 * N_GLYPHS_HIGH_WATER) +@@ -58,6 +59,7 @@ + int n_glyphs; + int n_tombstones; + int freeze_count; ++ long n_pixels; + pixman_list_t mru; + glyph_t * glyphs[HASH_SIZE]; + }; +@@ -133,6 +135,7 @@ + if (*loc == TOMBSTONE) + cache->n_tombstones--; + cache->n_glyphs++; ++ cache->n_pixels += glyph->image->bits.width * glyph->image->bits.height; + + *loc = glyph; + } +@@ -150,6 +153,7 @@ + cache->glyphs[idx & HASH_MASK] = TOMBSTONE; + cache->n_tombstones++; + cache->n_glyphs--; ++ cache->n_pixels -= glyph->image->bits.width * glyph->image->bits.height; + + /* Eliminate tombstones if possible */ + if (cache->glyphs[(idx + 1) & HASH_MASK] == NULL) +@@ -180,6 +184,7 @@ + + cache->n_glyphs = 0; + cache->n_tombstones = 0; ++ cache->n_pixels = 0; + } + + PIXMAN_EXPORT pixman_glyph_cache_t * +@@ -194,6 +199,7 @@ + cache->n_glyphs = 0; + cache->n_tombstones = 0; + cache->freeze_count = 0; ++ cache->n_pixels = 0; + + pixman_list_init (&cache->mru); + +@@ -220,9 +226,9 @@ + pixman_glyph_cache_thaw (pixman_glyph_cache_t *cache) + { + if (--cache->freeze_count == 0 && +- cache->n_glyphs + cache->n_tombstones > N_GLYPHS_HIGH_WATER) ++ (cache->n_glyphs + cache->n_tombstones > N_GLYPHS_HIGH_WATER || cache->n_pixels > N_PIXELS_HIGH_WATER)) + { +- if (cache->n_tombstones > N_GLYPHS_HIGH_WATER) ++ if (cache->n_tombstones > N_GLYPHS_LOW_WATER) + { + /* More than half the entries are + * tombstones. Just dump the whole table. +@@ -230,7 +236,7 @@ + clear_table (cache); + } + +- while (cache->n_glyphs > N_GLYPHS_LOW_WATER) ++ while (cache->n_glyphs > N_GLYPHS_LOW_WATER || cache->n_pixels > N_PIXELS_HIGH_WATER) + { + glyph_t *glyph = CONTAINER_OF (glyph_t, mru_link, cache->mru.tail); |