This issue may have already been beaten to death, but I am seeing
pretty bad memory leaks when creating, showing and, and then deleting
WebKitWebView widgets.  I've written and attached a very small test
browser that will open tabs to Google's homepage, with a button on
each tab to remove the tab and free everything in that notebook's
page's container.  From what I can observe with top, I lose roughly 3
MB per each tab open and close.

From what I can tell based on the GTK and WebKitGtk docs, I am
managing all the memory correctly even with this small test browser.
If I am doing anything incorrect that may help with the leaks, please
let me know.  Otherwise, what parts of the Webkit or WebKitGtk code
should be examined first for leaks?

-- 
Josh Rickmar
http://jrick.devio.us/
#include <gtk/gtk.h>
#include <webkit/webkit.h>

typedef struct {
        GtkNotebook     *nb;
        GtkWidget       *child;
} close_btn_args;

void
close_btn_cb(GtkButton *btn, gpointer user_data)
{
        close_btn_args  *args = (close_btn_args *)user_data;
        GtkNotebook     *nb = args->nb;
        GtkWidget       *wv = args->child;
        gint            pn;

        if ((pn = gtk_notebook_page_num(nb, wv)) != -1)
                gtk_notebook_remove_page(nb, pn);

        g_free(args);
}

void
new_tab(GtkNotebook *nb)
{
        GtkWidget       *b;
        GtkWidget       *close_btn;
        GtkWidget       *wv;
        close_btn_args  *args;

        wv = webkit_web_view_new();
        webkit_web_view_load_uri(WEBKIT_WEB_VIEW(wv),
            "https://www.google.com/";);
        g_object_ref_sink(G_OBJECT(wv));

        close_btn = gtk_button_new();
        gtk_button_set_image(GTK_BUTTON(close_btn), gtk_image_new_from_stock
            (GTK_STOCK_CLOSE, GTK_ICON_SIZE_SMALL_TOOLBAR));
        args = g_malloc0(sizeof *args);
        args->nb = nb;
        args->child = wv;
        g_signal_connect(close_btn, "clicked", G_CALLBACK(close_btn_cb), args);

        b = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 1);
        gtk_box_pack_start(GTK_BOX(b), close_btn, FALSE, FALSE, 0);
        gtk_box_pack_start(GTK_BOX(b), gtk_label_new("Tab Label"), FALSE,
            FALSE, 0);
        gtk_widget_show_all(b);

        gtk_notebook_append_page(nb, wv, b);
        gtk_widget_show_all(GTK_WIDGET(nb));
}

void
nt_btn_cb(GtkButton *btn, gpointer user_data)
{
        GtkNotebook     *nb = GTK_NOTEBOOK(user_data);

        new_tab(nb);
}

int
main(int argc, char **argv)
{
        GtkWidget       *win;
        GtkWidget       *nb;
        GtkWidget       *nt_btn;

        gtk_init(&argc, &argv);

        win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        g_signal_connect(win, "destroy",
            G_CALLBACK(gtk_main_quit), NULL);

        nb = gtk_notebook_new();
        gtk_container_add(GTK_CONTAINER(win), nb);
        new_tab(GTK_NOTEBOOK(nb));

        nt_btn = gtk_button_new();
        gtk_button_set_image(GTK_BUTTON(nt_btn), gtk_image_new_from_stock
            (GTK_STOCK_NEW, GTK_ICON_SIZE_MENU));
        g_signal_connect(nt_btn, "clicked", G_CALLBACK(nt_btn_cb), nb);
        gtk_notebook_set_action_widget(GTK_NOTEBOOK(nb), nt_btn,
            GTK_PACK_START);
        gtk_widget_show(nt_btn);

        gtk_widget_show_all(win);
        gtk_main();

        return (0);
}

Attachment: smime.p7s
Description: S/MIME cryptographic signature

_______________________________________________
webkit-gtk mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-gtk

Reply via email to