diff --git a/gsk/gl/gskglglyphlibrary.c b/gsk/gl/gskglglyphlibrary.c index bd811eadba..06fe76c097 100644 --- a/gsk/gl/gskglglyphlibrary.c +++ b/gsk/gl/gskglglyphlibrary.c @@ -84,12 +84,12 @@ gsk_gl_glyph_value_free (gpointer data) } static void -gsk_gl_glyph_library_begin_frame (GskGLTextureLibrary *library, - gint64 frame_id, - GPtrArray *removed_atlases) +gsk_gl_glyph_library_clear_cache (GskGLTextureLibrary *library) { GskGLGlyphLibrary *self = (GskGLGlyphLibrary *)library; + g_assert (GSK_IS_GL_GLYPH_LIBRARY (self)); + memset (self->front, 0, sizeof self->front); } @@ -111,7 +111,7 @@ gsk_gl_glyph_library_class_init (GskGLGlyphLibraryClass *klass) object_class->finalize = gsk_gl_glyph_library_finalize; - library_class->begin_frame = gsk_gl_glyph_library_begin_frame; + library_class->clear_cache = gsk_gl_glyph_library_clear_cache; } static void diff --git a/gsk/gl/gskgltexturelibrary.c b/gsk/gl/gskgltexturelibrary.c index fadec60a0c..b0694e7afb 100644 --- a/gsk/gl/gskgltexturelibrary.c +++ b/gsk/gl/gskgltexturelibrary.c @@ -141,6 +141,7 @@ gsk_gl_texture_library_begin_frame (GskGLTextureLibrary *self, GPtrArray *removed_atlases) { GHashTableIter iter; + gboolean drop_caches = FALSE; g_return_if_fail (GSK_IS_GL_TEXTURE_LIBRARY (self)); @@ -175,6 +176,8 @@ gsk_gl_texture_library_begin_frame (GskGLTextureLibrary *self, if (dropped > 0) g_message ("%s: Dropped %d items", G_OBJECT_TYPE_NAME (self), dropped)); + + drop_caches |= dropped > 0; } if (frame_id % self->max_frame_age == 0) @@ -208,7 +211,12 @@ gsk_gl_texture_library_begin_frame (GskGLTextureLibrary *self, g_hash_table_size (self->hash_table), atlased, g_hash_table_size (self->hash_table) - atlased)); + + drop_caches |= dropped > 0; } + + if (drop_caches && GSK_GL_TEXTURE_LIBRARY_GET_CLASS (self)->clear_cache) + GSK_GL_TEXTURE_LIBRARY_GET_CLASS (self)->clear_cache (self); } static GskGLTexture * diff --git a/gsk/gl/gskgltexturelibraryprivate.h b/gsk/gl/gskgltexturelibraryprivate.h index bb1db12172..39276ff69d 100644 --- a/gsk/gl/gskgltexturelibraryprivate.h +++ b/gsk/gl/gskgltexturelibraryprivate.h @@ -103,6 +103,7 @@ typedef struct _GskGLTextureLibraryClass void (*begin_frame) (GskGLTextureLibrary *library, gint64 frame_id, GPtrArray *removed_atlases); + void (*clear_cache) (GskGLTextureLibrary *library); } GskGLTextureLibraryClass; G_DEFINE_AUTOPTR_CLEANUP_FUNC (GskGLTextureLibrary, g_object_unref)