Gitweb links:
...log
http://git.netsurf-browser.org/netsurf.git/shortlog/d436992eb2a28e2e056e96e42072b13d89b44a0b
...commit
http://git.netsurf-browser.org/netsurf.git/commit/d436992eb2a28e2e056e96e42072b13d89b44a0b
...tree
http://git.netsurf-browser.org/netsurf.git/tree/d436992eb2a28e2e056e96e42072b13d89b44a0b
The branch, master has been updated
via d436992eb2a28e2e056e96e42072b13d89b44a0b (commit)
via 5ce3b934571906c012567d898d83c652fad30567 (commit)
via 17128fd0ad119c801a17e06da1fd8b351fb17f21 (commit)
from b3042f6c1fcb708d8663f4ab51865fe6a1f8bec3 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff
http://git.netsurf-browser.org/netsurf.git/commit/?id=d436992eb2a28e2e056e96e42072b13d89b44a0b
commit d436992eb2a28e2e056e96e42072b13d89b44a0b
Author: Chris Young <[email protected]>
Commit: Chris Young <[email protected]>
Reduce slab size to 2K as very few allocations are above that.
diff --git a/frontends/amiga/memory.c b/frontends/amiga/memory.c
index cf42c1e..d86f73d 100755
--- a/frontends/amiga/memory.c
+++ b/frontends/amiga/memory.c
@@ -21,7 +21,7 @@
#include "amiga/memory.h"
#include "utils/log.h"
-ULONG __slab_max_size = 8192; /* Enable clib2's slab allocator */
+ULONG __slab_max_size = 2048; /* Enable clib2's slab allocator */
/* Special clear (ie. non-zero) */
void *ami_memory_clear_alloc(size_t size, UBYTE value)
commitdiff
http://git.netsurf-browser.org/netsurf.git/commit/?id=5ce3b934571906c012567d898d83c652fad30567
commit 5ce3b934571906c012567d898d83c652fad30567
Author: Chris Young <[email protected]>
Commit: Chris Young <[email protected]>
Get clib2 slab usage
Calling ARexx function "SLABSTATS" will dump the current stats to the ns log
diff --git a/frontends/amiga/arexx.c b/frontends/amiga/arexx.c
index cdb12c2..18dae24 100644
--- a/frontends/amiga/arexx.c
+++ b/frontends/amiga/arexx.c
@@ -45,6 +45,10 @@
#include "amiga/misc.h"
#include "amiga/theme.h"
+#ifndef __amigaos4__
+#include "amiga/memory.h"
+#endif
+
extern const char * const verarexx;
extern const char * const wt_revid;
@@ -65,7 +69,8 @@ enum
RX_WINDOWS,
RX_ACTIVE,
RX_CLOSE,
- RX_HOTLIST
+ RX_HOTLIST,
+ RX_SLABSTATS
};
static Object *arexx_obj = NULL;
@@ -93,6 +98,7 @@ RXHOOKF(rx_windows);
RXHOOKF(rx_active);
RXHOOKF(rx_close);
RXHOOKF(rx_hotlist);
+RXHOOKF(rx_slabstats);
STATIC struct ARexxCmd Commands[] =
{
@@ -112,6 +118,7 @@ STATIC struct ARexxCmd Commands[] =
{"ACTIVE", RX_ACTIVE, rx_active, "T=TAB/S",
0, NULL, 0, 0, NULL },
{"CLOSE", RX_CLOSE, rx_close,
"W=WINDOW/K/N,T=TAB/K/N", 0, NULL, 0, 0, NULL },
{"HOTLIST", RX_HOTLIST, rx_hotlist, "A=ACTION/A",
0, NULL, 0, 0, NULL },
+ {"SLABSTATS", RX_SLABSTATS, rx_slabstats, NULL, 0,
NULL, 0, 0, NULL },
{ NULL, 0, NULL,
NULL, 0, NULL, 0, 0, NULL }
};
@@ -664,3 +671,10 @@ RXHOOKF(rx_hotlist)
}
}
+RXHOOKF(rx_slabstats)
+{
+#ifndef __amigaos4__
+ ami_memory_slab_dump();
+#endif
+}
+
diff --git a/frontends/amiga/bitmap.c b/frontends/amiga/bitmap.c
index 27ffee4..c6e23b2 100644
--- a/frontends/amiga/bitmap.c
+++ b/frontends/amiga/bitmap.c
@@ -108,9 +108,9 @@ void *amiga_bitmap_create(int width, int height, unsigned
int state)
{
struct bitmap *bitmap;
- if(pool_bitmap == NULL) pool_bitmap =
ami_misc_itempool_create(sizeof(struct bitmap));
+ if(pool_bitmap == NULL) pool_bitmap =
ami_memory_itempool_create(sizeof(struct bitmap));
- bitmap = ami_misc_itempool_alloc(pool_bitmap, sizeof(struct bitmap));
+ bitmap = ami_memory_itempool_alloc(pool_bitmap, sizeof(struct bitmap));
if(bitmap == NULL) return NULL;
bitmap->pixdata = ami_memory_clear_alloc(width*height*4, 0xff);
@@ -182,7 +182,7 @@ void amiga_bitmap_destroy(void *bitmap)
bm->url = NULL;
bm->title = NULL;
- ami_misc_itempool_free(pool_bitmap, bm, sizeof(struct bitmap));
+ ami_memory_itempool_free(pool_bitmap, bm, sizeof(struct
bitmap));
bm = NULL;
}
}
@@ -655,7 +655,7 @@ struct BitMap *ami_bitmap_get_native(struct bitmap *bitmap,
void ami_bitmap_fini(void)
{
- if(pool_bitmap) ami_misc_itempool_delete(pool_bitmap);
+ if(pool_bitmap) ami_memory_itempool_delete(pool_bitmap);
pool_bitmap = NULL;
}
diff --git a/frontends/amiga/memory.c b/frontends/amiga/memory.c
index 901d616..cf42c1e 100755
--- a/frontends/amiga/memory.c
+++ b/frontends/amiga/memory.c
@@ -16,12 +16,11 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#ifndef __amigaos4__
#include <stdlib.h>
-#include <proto/exec.h>
-
#include "amiga/memory.h"
+#include "utils/log.h"
-#ifndef __amigaos4__
ULONG __slab_max_size = 8192; /* Enable clib2's slab allocator */
/* Special clear (ie. non-zero) */
@@ -31,5 +30,35 @@ void *ami_memory_clear_alloc(size_t size, UBYTE value)
if (mem) memset(mem, value, size);
return mem;
}
+
+/* clib2 slab allocator stats */
+static int ami_memory_slab_callback(const struct __slab_usage_information *
sui)
+{
+ if(sui->sui_slab_index <= 1) {
+ LOG("clib2 slab usage:");
+ LOG(" The size of all slabs, in bytes: %ld",
sui->sui_slab_size);
+ LOG(" Number of allocations which are not managed by slabs:
%ld",
+ sui->sui_num_single_allocations);
+ LOG(" Total number of bytes allocated for memory not managed
by slabs: %ld",
+ sui->sui_total_single_allocation_size);
+ LOG(" Number of slabs currently in play: %ld",
sui->sui_num_slabs);
+ LOG(" Number of currently unused slabs: %ld",
sui->sui_num_empty_slabs);
+ LOG(" Number of slabs in use which are completely filled with
data: %ld",
+ sui->sui_num_full_slabs);
+ LOG(" Total number of bytes allocated for all slabs: %ld",
+ sui->sui_total_slab_allocation_size);
+ }
+ LOG("Slab %d", sui->sui_slab_index);
+ LOG(" Memory chunk size managed by this slab: %ld",
sui->sui_chunk_size);
+ LOG(" Number of memory chunks that fit in this slab: %ld",
sui->sui_num_chunks);
+ LOG(" Number of memory chunks used in this slab: %ld",
sui->sui_num_chunks_used);
+
+ return 0;
+}
+
+void ami_memory_slab_dump(void)
+{
+ __get_slab_usage(ami_memory_slab_callback);
+}
#endif
diff --git a/frontends/amiga/memory.h b/frontends/amiga/memory.h
index a3b6b5e..3d92350 100644
--- a/frontends/amiga/memory.h
+++ b/frontends/amiga/memory.h
@@ -57,5 +57,10 @@ void *ami_memory_clear_alloc(size_t size, UBYTE value);
#define ami_memory_itempool_free(p,i,s) FreePooled(p,i,s)
#endif
+/* clib2 slab allocator stats */
+#ifndef __amigaos4__
+void ami_memory_slab_dump(void);
+#endif
+
#endif //AMIGA_MEMORY_H
commitdiff
http://git.netsurf-browser.org/netsurf.git/commit/?id=17128fd0ad119c801a17e06da1fd8b351fb17f21
commit 17128fd0ad119c801a17e06da1fd8b351fb17f21
Author: Chris Young <[email protected]>
Commit: Chris Young <[email protected]>
Move ItemPool compatiblity into the header and rename
diff --git a/frontends/amiga/gui.c b/frontends/amiga/gui.c
index ecc36fa..e5b5c59 100644
--- a/frontends/amiga/gui.c
+++ b/frontends/amiga/gui.c
@@ -3829,7 +3829,7 @@ gui_window_create(struct browser_window *bw,
NewList(&g->dllist);
g->deferred_rects = NewObjList();
- g->deferred_rects_pool = ami_misc_itempool_create(sizeof(struct rect));
+ g->deferred_rects_pool = ami_memory_itempool_create(sizeof(struct
rect));
g->bw = bw;
g->scale = browser_window_get_scale(bw);
@@ -4492,7 +4492,7 @@ static void gui_window_destroy(struct gui_window *g)
ami_free_download_list(&g->dllist);
FreeObjList(g->deferred_rects);
- ami_misc_itempool_delete(g->deferred_rects_pool);
+ ami_memory_itempool_delete(g->deferred_rects_pool);
gui_window_stop_throbber(g);
cur_gw = NULL;
@@ -4705,7 +4705,7 @@ 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);
- ami_misc_itempool_free(g->deferred_rects_pool, node->objstruct,
sizeof(struct rect));
+ ami_memory_itempool_free(g->deferred_rects_pool,
node->objstruct, sizeof(struct rect));
DelObjectNoFree(node);
} while((node = nnode));
@@ -4739,7 +4739,7 @@ static bool
ami_gui_window_update_box_deferred_check(struct MinList *deferred_re
(new_rect->x1 >= rect->x1) &&
(new_rect->y1 >= rect->y1)) {
LOG("Removing queued redraw that is a subset of new box
redraw");
- ami_misc_itempool_free(mempool, node->objstruct,
sizeof(struct rect));
+ ami_memory_itempool_free(mempool, node->objstruct,
sizeof(struct rect));
DelObjectNoFree(node);
/* Don't return - we might find more */
}
@@ -4756,7 +4756,7 @@ static void gui_window_update_box(struct gui_window *g,
const struct rect *restr
if(ami_gui_window_update_box_deferred_check(g->deferred_rects, rect,
g->deferred_rects_pool)) {
- deferred_rect = ami_misc_itempool_alloc(g->deferred_rects_pool,
sizeof(struct rect));
+ deferred_rect =
ami_memory_itempool_alloc(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/frontends/amiga/memory.c b/frontends/amiga/memory.c
index 7a34f7a..901d616 100755
--- a/frontends/amiga/memory.c
+++ b/frontends/amiga/memory.c
@@ -23,68 +23,13 @@
#ifndef __amigaos4__
ULONG __slab_max_size = 8192; /* Enable clib2's slab allocator */
-#endif
-/* Special clear (ie. non-zero), which is different on OS3 and 4 */
+/* Special clear (ie. non-zero) */
void *ami_memory_clear_alloc(size_t size, UBYTE value)
{
-#ifdef __amigaos4__
- return AllocVecTags(size, AVT_ClearWithValue, value, TAG_DONE);
-#else
void *mem = malloc(size);
if (mem) memset(mem, value, size);
return mem;
-#endif
}
-
-/* Free special clear (ie. non-zero) area, which is different on OS3 and 4 */
-void ami_memory_clear_free(void *p)
-{
-#ifdef __amigaos4__
- FreeVec(p);
-#else
- free(p);
#endif
-}
-
-APTR ami_misc_itempool_create(int size)
-{
-#ifdef __amigaos4__
- return AllocSysObjectTags(ASOT_ITEMPOOL,
- ASOITEM_MFlags, MEMF_PRIVATE,
- ASOITEM_ItemSize, size,
- ASOITEM_GCPolicy, ITEMGC_AFTERCOUNT,
- ASOITEM_GCParameter, 100,
- TAG_DONE);
-#else
- return CreatePool(MEMF_ANY, 20 * size, size);
-#endif
-}
-
-void ami_misc_itempool_delete(APTR pool)
-{
-#ifdef __amigaos4__
- FreeSysObject(ASOT_ITEMPOOL, pool);
-#else
- DeletePool(pool);
-#endif
-}
-
-APTR ami_misc_itempool_alloc(APTR pool, int size)
-{
-#ifdef __amigaos4__
- return ItemPoolAlloc(pool);
-#else
- return AllocPooled(pool, size);
-#endif
-}
-
-void ami_misc_itempool_free(APTR restrict pool, APTR restrict item, int size)
-{
-#ifdef __amigaos4__
- ItemPoolFree(pool, item);
-#else
- FreePooled(pool, item, size);
-#endif
-}
diff --git a/frontends/amiga/memory.h b/frontends/amiga/memory.h
index 63452f6..a3b6b5e 100644
--- a/frontends/amiga/memory.h
+++ b/frontends/amiga/memory.h
@@ -31,13 +31,31 @@
#endif
/* Alloc/free a block cleared to non-zero */
+#ifdef __amigaos4__
+#define ami_memory_clear_alloc(s,v) AllocVecTags(s, AVT_ClearWithValue, v,
TAG_DONE)
+#define ami_memory_clear_free(p) FreeVec(p)
+#else
void *ami_memory_clear_alloc(size_t size, UBYTE value);
-void ami_memory_clear_free(void *p);
+#define ami_memory_clear_free(p) free(p)
+#endif
/* Itempool cross-compatibility */
-APTR ami_misc_itempool_create(int size);
-void ami_misc_itempool_delete(APTR pool);
-APTR ami_misc_itempool_alloc(APTR pool, int size);
-void ami_misc_itempool_free(APTR pool, APTR item, int size);
+#ifdef __amigaos4__
+#define ami_memory_itempool_create(s) AllocSysObjectTags(ASOT_ITEMPOOL, \
+ ASOITEM_MFlags, MEMF_PRIVATE, \
+ ASOITEM_ItemSize, s, \
+ ASOITEM_GCPolicy, ITEMGC_AFTERCOUNT, \
+ ASOITEM_GCParameter, 100, \
+ TAG_DONE)
+#define ami_memory_itempool_delete(p) FreeSysObject(ASOT_ITEMPOOL, p)
+#define ami_memory_itempool_alloc(p,s) ItemPoolAlloc(p)
+#define ami_memory_itempool_free(p,i,s) ItemPoolFree(p,i)
+#else
+#define ami_memory_itempool_create(s) CreatePool(MEMF_ANY, 20 * s, s)
+#define ami_memory_itempool_delete(p) DeletePool(p)
+#define ami_memory_itempool_alloc(p,s) AllocPooled(p, s)
+#define ami_memory_itempool_free(p,i,s) FreePooled(p,i,s)
#endif
+#endif //AMIGA_MEMORY_H
+
diff --git a/frontends/amiga/object.c b/frontends/amiga/object.c
index c729e4a..2ebca75 100755
--- a/frontends/amiga/object.c
+++ b/frontends/amiga/object.c
@@ -41,7 +41,7 @@ static APTR pool_nsobj = NULL;
bool ami_object_init(void)
{
- pool_nsobj = ami_misc_itempool_create(sizeof(struct nsObject));
+ pool_nsobj = ami_memory_itempool_create(sizeof(struct nsObject));
if(pool_nsobj == NULL) return false;
else return true;
@@ -49,7 +49,7 @@ bool ami_object_init(void)
void ami_object_fini(void)
{
- ami_misc_itempool_delete(pool_nsobj);
+ ami_memory_itempool_delete(pool_nsobj);
}
/* Slightly abstract MinList initialisation */
@@ -78,7 +78,7 @@ struct nsObject *AddObject(struct MinList *objlist, ULONG
otype)
{
struct nsObject *dtzo;
- dtzo = (struct nsObject *)ami_misc_itempool_alloc(pool_nsobj,
sizeof(struct nsObject));
+ dtzo = (struct nsObject *)ami_memory_itempool_alloc(pool_nsobj,
sizeof(struct nsObject));
if(dtzo == NULL) return NULL;
memset(dtzo, 0, sizeof(struct nsObject));
@@ -100,7 +100,7 @@ static void DelObjectInternal(struct nsObject *dtzo, BOOL
free_obj)
if(dtzo->callback != NULL) dtzo->callback(dtzo->objstruct);
if(dtzo->objstruct && free_obj) free(dtzo->objstruct);
if(dtzo->dtz_Node.ln_Name) free(dtzo->dtz_Node.ln_Name);
- ami_misc_itempool_free(pool_nsobj, dtzo, sizeof(struct nsObject));
+ ami_memory_itempool_free(pool_nsobj, dtzo, sizeof(struct nsObject));
dtzo = NULL;
}
diff --git a/frontends/amiga/plotters.c b/frontends/amiga/plotters.c
index f9fa62a..6bae634 100644
--- a/frontends/amiga/plotters.c
+++ b/frontends/amiga/plotters.c
@@ -193,7 +193,7 @@ void ami_init_layers(struct gui_globals *gg, ULONG width,
ULONG height, bool for
InitTmpRas(gg->rp->TmpRas, gg->tmprasbuf, width*height);
if((gg->palette_mapped == true) && (pool_pens == NULL)) {
- pool_pens = ami_misc_itempool_create(sizeof(struct
ami_plot_pen));
+ pool_pens = ami_memory_itempool_create(sizeof(struct
ami_plot_pen));
}
gg->apen = 0x00000000;
@@ -210,7 +210,7 @@ void ami_free_layers(struct gui_globals *gg)
init_layers_count--;
if((init_layers_count == 0) && (pool_pens != NULL)) {
- ami_misc_itempool_delete(pool_pens);
+ ami_memory_itempool_delete(pool_pens);
pool_pens = NULL;
}
@@ -256,7 +256,7 @@ static ULONG ami_plot_obtain_pen(struct MinList
*shared_pens, ULONG colr)
if(pen == -1) LOG("WARNING: Cannot allocate pen for ABGR:%lx", colr);
if((shared_pens != NULL) && (pool_pens != NULL)) {
- if((node = (struct ami_plot_pen
*)ami_misc_itempool_alloc(pool_pens, sizeof(struct ami_plot_pen)))) {
+ if((node = (struct ami_plot_pen
*)ami_memory_itempool_alloc(pool_pens, sizeof(struct ami_plot_pen)))) {
node->pen = pen;
AddTail((struct List *)shared_pens, (struct Node
*)node);
}
@@ -280,7 +280,7 @@ void ami_plot_release_pens(struct MinList *shared_pens)
nnode = (struct ami_plot_pen *)GetSucc((struct Node *)node);
ReleasePen(scrn->ViewPort.ColorMap, node->pen);
Remove((struct Node *)node);
- ami_misc_itempool_free(pool_pens, node, sizeof(struct
ami_plot_pen));
+ ami_memory_itempool_free(pool_pens, node, sizeof(struct
ami_plot_pen));
} while((node = nnode));
glob->apen = 0x00000000;
-----------------------------------------------------------------------
Summary of changes:
frontends/amiga/arexx.c | 16 ++++++++-
frontends/amiga/bitmap.c | 8 ++---
frontends/amiga/gui.c | 10 +++---
frontends/amiga/memory.c | 80 +++++++++++++++-----------------------------
frontends/amiga/memory.h | 33 +++++++++++++++---
frontends/amiga/object.c | 8 ++---
frontends/amiga/plotters.c | 8 ++---
7 files changed, 87 insertions(+), 76 deletions(-)
diff --git a/frontends/amiga/arexx.c b/frontends/amiga/arexx.c
index cdb12c2..18dae24 100644
--- a/frontends/amiga/arexx.c
+++ b/frontends/amiga/arexx.c
@@ -45,6 +45,10 @@
#include "amiga/misc.h"
#include "amiga/theme.h"
+#ifndef __amigaos4__
+#include "amiga/memory.h"
+#endif
+
extern const char * const verarexx;
extern const char * const wt_revid;
@@ -65,7 +69,8 @@ enum
RX_WINDOWS,
RX_ACTIVE,
RX_CLOSE,
- RX_HOTLIST
+ RX_HOTLIST,
+ RX_SLABSTATS
};
static Object *arexx_obj = NULL;
@@ -93,6 +98,7 @@ RXHOOKF(rx_windows);
RXHOOKF(rx_active);
RXHOOKF(rx_close);
RXHOOKF(rx_hotlist);
+RXHOOKF(rx_slabstats);
STATIC struct ARexxCmd Commands[] =
{
@@ -112,6 +118,7 @@ STATIC struct ARexxCmd Commands[] =
{"ACTIVE", RX_ACTIVE, rx_active, "T=TAB/S",
0, NULL, 0, 0, NULL },
{"CLOSE", RX_CLOSE, rx_close,
"W=WINDOW/K/N,T=TAB/K/N", 0, NULL, 0, 0, NULL },
{"HOTLIST", RX_HOTLIST, rx_hotlist, "A=ACTION/A",
0, NULL, 0, 0, NULL },
+ {"SLABSTATS", RX_SLABSTATS, rx_slabstats, NULL, 0,
NULL, 0, 0, NULL },
{ NULL, 0, NULL,
NULL, 0, NULL, 0, 0, NULL }
};
@@ -664,3 +671,10 @@ RXHOOKF(rx_hotlist)
}
}
+RXHOOKF(rx_slabstats)
+{
+#ifndef __amigaos4__
+ ami_memory_slab_dump();
+#endif
+}
+
diff --git a/frontends/amiga/bitmap.c b/frontends/amiga/bitmap.c
index 27ffee4..c6e23b2 100644
--- a/frontends/amiga/bitmap.c
+++ b/frontends/amiga/bitmap.c
@@ -108,9 +108,9 @@ void *amiga_bitmap_create(int width, int height, unsigned
int state)
{
struct bitmap *bitmap;
- if(pool_bitmap == NULL) pool_bitmap =
ami_misc_itempool_create(sizeof(struct bitmap));
+ if(pool_bitmap == NULL) pool_bitmap =
ami_memory_itempool_create(sizeof(struct bitmap));
- bitmap = ami_misc_itempool_alloc(pool_bitmap, sizeof(struct bitmap));
+ bitmap = ami_memory_itempool_alloc(pool_bitmap, sizeof(struct bitmap));
if(bitmap == NULL) return NULL;
bitmap->pixdata = ami_memory_clear_alloc(width*height*4, 0xff);
@@ -182,7 +182,7 @@ void amiga_bitmap_destroy(void *bitmap)
bm->url = NULL;
bm->title = NULL;
- ami_misc_itempool_free(pool_bitmap, bm, sizeof(struct bitmap));
+ ami_memory_itempool_free(pool_bitmap, bm, sizeof(struct
bitmap));
bm = NULL;
}
}
@@ -655,7 +655,7 @@ struct BitMap *ami_bitmap_get_native(struct bitmap *bitmap,
void ami_bitmap_fini(void)
{
- if(pool_bitmap) ami_misc_itempool_delete(pool_bitmap);
+ if(pool_bitmap) ami_memory_itempool_delete(pool_bitmap);
pool_bitmap = NULL;
}
diff --git a/frontends/amiga/gui.c b/frontends/amiga/gui.c
index ecc36fa..e5b5c59 100644
--- a/frontends/amiga/gui.c
+++ b/frontends/amiga/gui.c
@@ -3829,7 +3829,7 @@ gui_window_create(struct browser_window *bw,
NewList(&g->dllist);
g->deferred_rects = NewObjList();
- g->deferred_rects_pool = ami_misc_itempool_create(sizeof(struct rect));
+ g->deferred_rects_pool = ami_memory_itempool_create(sizeof(struct
rect));
g->bw = bw;
g->scale = browser_window_get_scale(bw);
@@ -4492,7 +4492,7 @@ static void gui_window_destroy(struct gui_window *g)
ami_free_download_list(&g->dllist);
FreeObjList(g->deferred_rects);
- ami_misc_itempool_delete(g->deferred_rects_pool);
+ ami_memory_itempool_delete(g->deferred_rects_pool);
gui_window_stop_throbber(g);
cur_gw = NULL;
@@ -4705,7 +4705,7 @@ 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);
- ami_misc_itempool_free(g->deferred_rects_pool, node->objstruct,
sizeof(struct rect));
+ ami_memory_itempool_free(g->deferred_rects_pool,
node->objstruct, sizeof(struct rect));
DelObjectNoFree(node);
} while((node = nnode));
@@ -4739,7 +4739,7 @@ static bool
ami_gui_window_update_box_deferred_check(struct MinList *deferred_re
(new_rect->x1 >= rect->x1) &&
(new_rect->y1 >= rect->y1)) {
LOG("Removing queued redraw that is a subset of new box
redraw");
- ami_misc_itempool_free(mempool, node->objstruct,
sizeof(struct rect));
+ ami_memory_itempool_free(mempool, node->objstruct,
sizeof(struct rect));
DelObjectNoFree(node);
/* Don't return - we might find more */
}
@@ -4756,7 +4756,7 @@ static void gui_window_update_box(struct gui_window *g,
const struct rect *restr
if(ami_gui_window_update_box_deferred_check(g->deferred_rects, rect,
g->deferred_rects_pool)) {
- deferred_rect = ami_misc_itempool_alloc(g->deferred_rects_pool,
sizeof(struct rect));
+ deferred_rect =
ami_memory_itempool_alloc(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/frontends/amiga/memory.c b/frontends/amiga/memory.c
index 7a34f7a..d86f73d 100755
--- a/frontends/amiga/memory.c
+++ b/frontends/amiga/memory.c
@@ -16,75 +16,49 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#ifndef __amigaos4__
#include <stdlib.h>
-#include <proto/exec.h>
-
#include "amiga/memory.h"
+#include "utils/log.h"
-#ifndef __amigaos4__
-ULONG __slab_max_size = 8192; /* Enable clib2's slab allocator */
-#endif
+ULONG __slab_max_size = 2048; /* Enable clib2's slab allocator */
-/* Special clear (ie. non-zero), which is different on OS3 and 4 */
+/* Special clear (ie. non-zero) */
void *ami_memory_clear_alloc(size_t size, UBYTE value)
{
-#ifdef __amigaos4__
- return AllocVecTags(size, AVT_ClearWithValue, value, TAG_DONE);
-#else
void *mem = malloc(size);
if (mem) memset(mem, value, size);
return mem;
-#endif
}
-/* Free special clear (ie. non-zero) area, which is different on OS3 and 4 */
-void ami_memory_clear_free(void *p)
+/* clib2 slab allocator stats */
+static int ami_memory_slab_callback(const struct __slab_usage_information *
sui)
{
-#ifdef __amigaos4__
- FreeVec(p);
-#else
- free(p);
-#endif
-}
+ if(sui->sui_slab_index <= 1) {
+ LOG("clib2 slab usage:");
+ LOG(" The size of all slabs, in bytes: %ld",
sui->sui_slab_size);
+ LOG(" Number of allocations which are not managed by slabs:
%ld",
+ sui->sui_num_single_allocations);
+ LOG(" Total number of bytes allocated for memory not managed
by slabs: %ld",
+ sui->sui_total_single_allocation_size);
+ LOG(" Number of slabs currently in play: %ld",
sui->sui_num_slabs);
+ LOG(" Number of currently unused slabs: %ld",
sui->sui_num_empty_slabs);
+ LOG(" Number of slabs in use which are completely filled with
data: %ld",
+ sui->sui_num_full_slabs);
+ LOG(" Total number of bytes allocated for all slabs: %ld",
+ sui->sui_total_slab_allocation_size);
+ }
+ LOG("Slab %d", sui->sui_slab_index);
+ LOG(" Memory chunk size managed by this slab: %ld",
sui->sui_chunk_size);
+ LOG(" Number of memory chunks that fit in this slab: %ld",
sui->sui_num_chunks);
+ LOG(" Number of memory chunks used in this slab: %ld",
sui->sui_num_chunks_used);
-APTR ami_misc_itempool_create(int size)
-{
-#ifdef __amigaos4__
- return AllocSysObjectTags(ASOT_ITEMPOOL,
- ASOITEM_MFlags, MEMF_PRIVATE,
- ASOITEM_ItemSize, size,
- ASOITEM_GCPolicy, ITEMGC_AFTERCOUNT,
- ASOITEM_GCParameter, 100,
- TAG_DONE);
-#else
- return CreatePool(MEMF_ANY, 20 * size, size);
-#endif
+ return 0;
}
-void ami_misc_itempool_delete(APTR pool)
+void ami_memory_slab_dump(void)
{
-#ifdef __amigaos4__
- FreeSysObject(ASOT_ITEMPOOL, pool);
-#else
- DeletePool(pool);
-#endif
-}
-
-APTR ami_misc_itempool_alloc(APTR pool, int size)
-{
-#ifdef __amigaos4__
- return ItemPoolAlloc(pool);
-#else
- return AllocPooled(pool, size);
-#endif
+ __get_slab_usage(ami_memory_slab_callback);
}
-
-void ami_misc_itempool_free(APTR restrict pool, APTR restrict item, int size)
-{
-#ifdef __amigaos4__
- ItemPoolFree(pool, item);
-#else
- FreePooled(pool, item, size);
#endif
-}
diff --git a/frontends/amiga/memory.h b/frontends/amiga/memory.h
index 63452f6..3d92350 100644
--- a/frontends/amiga/memory.h
+++ b/frontends/amiga/memory.h
@@ -31,13 +31,36 @@
#endif
/* Alloc/free a block cleared to non-zero */
+#ifdef __amigaos4__
+#define ami_memory_clear_alloc(s,v) AllocVecTags(s, AVT_ClearWithValue, v,
TAG_DONE)
+#define ami_memory_clear_free(p) FreeVec(p)
+#else
void *ami_memory_clear_alloc(size_t size, UBYTE value);
-void ami_memory_clear_free(void *p);
+#define ami_memory_clear_free(p) free(p)
+#endif
/* Itempool cross-compatibility */
-APTR ami_misc_itempool_create(int size);
-void ami_misc_itempool_delete(APTR pool);
-APTR ami_misc_itempool_alloc(APTR pool, int size);
-void ami_misc_itempool_free(APTR pool, APTR item, int size);
+#ifdef __amigaos4__
+#define ami_memory_itempool_create(s) AllocSysObjectTags(ASOT_ITEMPOOL, \
+ ASOITEM_MFlags, MEMF_PRIVATE, \
+ ASOITEM_ItemSize, s, \
+ ASOITEM_GCPolicy, ITEMGC_AFTERCOUNT, \
+ ASOITEM_GCParameter, 100, \
+ TAG_DONE)
+#define ami_memory_itempool_delete(p) FreeSysObject(ASOT_ITEMPOOL, p)
+#define ami_memory_itempool_alloc(p,s) ItemPoolAlloc(p)
+#define ami_memory_itempool_free(p,i,s) ItemPoolFree(p,i)
+#else
+#define ami_memory_itempool_create(s) CreatePool(MEMF_ANY, 20 * s, s)
+#define ami_memory_itempool_delete(p) DeletePool(p)
+#define ami_memory_itempool_alloc(p,s) AllocPooled(p, s)
+#define ami_memory_itempool_free(p,i,s) FreePooled(p,i,s)
+#endif
+
+/* clib2 slab allocator stats */
+#ifndef __amigaos4__
+void ami_memory_slab_dump(void);
#endif
+#endif //AMIGA_MEMORY_H
+
diff --git a/frontends/amiga/object.c b/frontends/amiga/object.c
index c729e4a..2ebca75 100755
--- a/frontends/amiga/object.c
+++ b/frontends/amiga/object.c
@@ -41,7 +41,7 @@ static APTR pool_nsobj = NULL;
bool ami_object_init(void)
{
- pool_nsobj = ami_misc_itempool_create(sizeof(struct nsObject));
+ pool_nsobj = ami_memory_itempool_create(sizeof(struct nsObject));
if(pool_nsobj == NULL) return false;
else return true;
@@ -49,7 +49,7 @@ bool ami_object_init(void)
void ami_object_fini(void)
{
- ami_misc_itempool_delete(pool_nsobj);
+ ami_memory_itempool_delete(pool_nsobj);
}
/* Slightly abstract MinList initialisation */
@@ -78,7 +78,7 @@ struct nsObject *AddObject(struct MinList *objlist, ULONG
otype)
{
struct nsObject *dtzo;
- dtzo = (struct nsObject *)ami_misc_itempool_alloc(pool_nsobj,
sizeof(struct nsObject));
+ dtzo = (struct nsObject *)ami_memory_itempool_alloc(pool_nsobj,
sizeof(struct nsObject));
if(dtzo == NULL) return NULL;
memset(dtzo, 0, sizeof(struct nsObject));
@@ -100,7 +100,7 @@ static void DelObjectInternal(struct nsObject *dtzo, BOOL
free_obj)
if(dtzo->callback != NULL) dtzo->callback(dtzo->objstruct);
if(dtzo->objstruct && free_obj) free(dtzo->objstruct);
if(dtzo->dtz_Node.ln_Name) free(dtzo->dtz_Node.ln_Name);
- ami_misc_itempool_free(pool_nsobj, dtzo, sizeof(struct nsObject));
+ ami_memory_itempool_free(pool_nsobj, dtzo, sizeof(struct nsObject));
dtzo = NULL;
}
diff --git a/frontends/amiga/plotters.c b/frontends/amiga/plotters.c
index f9fa62a..6bae634 100644
--- a/frontends/amiga/plotters.c
+++ b/frontends/amiga/plotters.c
@@ -193,7 +193,7 @@ void ami_init_layers(struct gui_globals *gg, ULONG width,
ULONG height, bool for
InitTmpRas(gg->rp->TmpRas, gg->tmprasbuf, width*height);
if((gg->palette_mapped == true) && (pool_pens == NULL)) {
- pool_pens = ami_misc_itempool_create(sizeof(struct
ami_plot_pen));
+ pool_pens = ami_memory_itempool_create(sizeof(struct
ami_plot_pen));
}
gg->apen = 0x00000000;
@@ -210,7 +210,7 @@ void ami_free_layers(struct gui_globals *gg)
init_layers_count--;
if((init_layers_count == 0) && (pool_pens != NULL)) {
- ami_misc_itempool_delete(pool_pens);
+ ami_memory_itempool_delete(pool_pens);
pool_pens = NULL;
}
@@ -256,7 +256,7 @@ static ULONG ami_plot_obtain_pen(struct MinList
*shared_pens, ULONG colr)
if(pen == -1) LOG("WARNING: Cannot allocate pen for ABGR:%lx", colr);
if((shared_pens != NULL) && (pool_pens != NULL)) {
- if((node = (struct ami_plot_pen
*)ami_misc_itempool_alloc(pool_pens, sizeof(struct ami_plot_pen)))) {
+ if((node = (struct ami_plot_pen
*)ami_memory_itempool_alloc(pool_pens, sizeof(struct ami_plot_pen)))) {
node->pen = pen;
AddTail((struct List *)shared_pens, (struct Node
*)node);
}
@@ -280,7 +280,7 @@ void ami_plot_release_pens(struct MinList *shared_pens)
nnode = (struct ami_plot_pen *)GetSucc((struct Node *)node);
ReleasePen(scrn->ViewPort.ColorMap, node->pen);
Remove((struct Node *)node);
- ami_misc_itempool_free(pool_pens, node, sizeof(struct
ami_plot_pen));
+ ami_memory_itempool_free(pool_pens, node, sizeof(struct
ami_plot_pen));
} while((node = nnode));
glob->apen = 0x00000000;
--
NetSurf Browser
_______________________________________________
netsurf-commits mailing list
[email protected]
http://listmaster.pepperfish.net/cgi-bin/mailman/listinfo/netsurf-commits-netsurf-browser.org