From 1724e2835028daf90de80b151ab8fd4c3064fd02 Mon Sep 17 00:00:00 2001 From: Chris Young Date: Wed, 20 Jan 2016 23:32:19 +0000 Subject: Use a memory pool for deferred rects --- amiga/font_diskfont.c | 4 ++-- amiga/gui.c | 19 ++++++++++++------- amiga/gui.h | 1 + 3 files changed, 15 insertions(+), 9 deletions(-) (limited to 'amiga') diff --git a/amiga/font_diskfont.c b/amiga/font_diskfont.c index 61f777355..eadd80054 100644 --- a/amiga/font_diskfont.c +++ b/amiga/font_diskfont.c @@ -215,9 +215,9 @@ static bool amiga_bm_nsfont_split(const plot_font_style_t *fstyle, ami_font_bm_close(bmfont); return false; } - + offset = TextFit(glob->rp, localtext, (UWORD)strlen(localtext), - &extent, NULL, 1, x, 32767); + &extent, NULL, 1, (UWORD)x, 32767); co = offset; charp = localtext + co; diff --git a/amiga/gui.c b/amiga/gui.c index 837063639..4e68530dd 100644 --- a/amiga/gui.c +++ b/amiga/gui.c @@ -3796,6 +3796,7 @@ gui_window_create(struct browser_window *bw, NewList(&g->dllist); g->deferred_rects = NewObjList(); + g->deferred_rects_pool = CreatePool(MEMF_PRIVATE, sizeof(struct rect), sizeof(struct rect)); g->bw = bw; g->scale = browser_window_get_scale(bw); @@ -4446,6 +4447,7 @@ static void gui_window_destroy(struct gui_window *g) ami_free_download_list(&g->dllist); FreeObjList(g->deferred_rects); + DeletePool(g->deferred_rects_pool); gui_window_stop_throbber(g); cur_gw = NULL; @@ -4657,17 +4659,18 @@ static void ami_gui_window_update_box_deferred(struct gui_window *g, bool draw) rect->x0, rect->y0, rect->x1, rect->y1); } nnode=(struct nsObject *)GetSucc((struct Node *)node); - DelObject(node); + FreePooled(g->deferred_rects_pool, node->objstruct, sizeof(struct rect)); + DelObjectNoFree(node); } while((node = nnode)); if(draw == true) ami_reset_pointer(g->shared); } static bool ami_gui_window_update_box_deferred_check(struct MinList *deferred_rects, - const struct rect *new_rect) + const struct rect *new_rect, APTR mempool) { -struct nsObject *node; -struct nsObject *nnode; + struct nsObject *node; + struct nsObject *nnode; struct rect *rect; if(IsMinListEmpty(deferred_rects)) return true; @@ -4690,7 +4693,8 @@ struct nsObject *nnode; (new_rect->x1 >= rect->x1) && (new_rect->y1 >= rect->y1)) { LOG("Removing queued redraw that is a subset of new box redraw"); - DelObject(node); + FreePooled(mempool, node->objstruct, sizeof(struct rect)); + DelObjectNoFree(node); /* Don't return - we might find more */ } } while((node = nnode)); @@ -4704,8 +4708,9 @@ static void gui_window_update_box(struct gui_window *g, const struct rect *rect) struct rect *deferred_rect; if(!g) return; - if(ami_gui_window_update_box_deferred_check(g->deferred_rects, rect)) { - deferred_rect = AllocVecTagList(sizeof(struct rect), NULL); + if(ami_gui_window_update_box_deferred_check(g->deferred_rects, rect, + g->deferred_rects_pool)) { + deferred_rect = AllocPooled(g->deferred_rects_pool, sizeof(struct rect)); CopyMem(rect, deferred_rect, sizeof(struct rect)); nsobj = AddObject(g->deferred_rects, AMINS_RECT); nsobj->objstruct = deferred_rect; diff --git a/amiga/gui.h b/amiga/gui.h index 86dedcbc4..436991936 100644 --- a/amiga/gui.h +++ b/amiga/gui.h @@ -162,6 +162,7 @@ struct gui_window hlcache_handle *favicon; bool throbbing; char *tabtitle; + APTR deferred_rects_pool; struct MinList *deferred_rects; struct browser_window *bw; float scale; -- cgit v1.2.3