Skip to content

Commit 2c2496a

Browse files
committed
perf: trim malloc heap after clearing canvas
this also applies when clearing layers
1 parent f3253a3 commit 2c2496a

4 files changed

Lines changed: 18 additions & 0 deletions

File tree

‎src/meme-core.c‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,20 @@
11
#include "meme-core.h"
22
#include <MagickWand/MagickWand.h>
3+
#include <malloc.h>
4+
5+
static guint release_memory_id = 0;
6+
7+
static gboolean release_memory_cb (gpointer data) {
8+
release_memory_id = 0;
9+
malloc_trim (0);
10+
return G_SOURCE_REMOVE;
11+
}
12+
13+
void meme_release_memory (void) {
14+
if (release_memory_id)
15+
g_source_remove (release_memory_id);
16+
release_memory_id = g_timeout_add (300, release_memory_cb, NULL);
17+
}
318

419
ImageLayer * meme_layer_copy (const ImageLayer *src) {
520
ImageLayer *dst = g_new0 (ImageLayer, 1);

‎src/meme-core.h‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ ImageLayer *meme_layer_copy (const ImageLayer *src);
6969
void meme_layer_free (gpointer data);
7070
GList *meme_layer_list_copy (GList *src);
7171
void meme_layer_list_free (GList *list);
72+
void meme_release_memory (void);
7273
void meme_magick_init (void);
7374

7475
GdkPixbuf *meme_core_apply_effects(GdkPixbuf *composite, gboolean cinematic, gboolean deep_fry);

‎src/meme-window-layers.c‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,5 +194,6 @@ void on_delete_layer_clicked (MemeWindow *self) {
194194
self->selected_layer = NULL;
195195
sync_ui_with_layer(self);
196196
render_meme(self);
197+
meme_release_memory ();
197198
}
198199
}

‎src/meme-window.c‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ void on_clear_clicked (MemeWindow *self) {
6464
gtk_widget_set_sensitive(GTK_WIDGET(self->clear_button), FALSE);
6565
self->zoom_level = 1.0;
6666
gtk_widget_set_size_request(GTK_WIDGET(self->meme_preview), -1, -1);
67+
meme_release_memory ();
6768
}
6869

6970
void on_copy_clipboard_clicked (MemeWindow *self) {

0 commit comments

Comments
 (0)