From 0a9f08cef4625ef9aa446de426b3e010ce892ff5 Mon Sep 17 00:00:00 2001 From: Richard Kistruck Date: Mon, 11 Dec 2006 15:39:58 +0000 Subject: Mps: amsss (ams stress-test): enable and report mps_message_type_gc and _gc_start Copied from Perforce Change: 161193 ServerID: perforce.ravenbrook.com --- mps/code/amsss.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 51 insertions(+), 4 deletions(-) (limited to 'mps/code') diff --git a/mps/code/amsss.c b/mps/code/amsss.c index 9c878a1934a..513056f2d2c 100644 --- a/mps/code/amsss.c +++ b/mps/code/amsss.c @@ -44,6 +44,50 @@ static mps_addr_t ambigRoots[ambigRootsCOUNT]; static size_t totalSize = 0; +/* report - report statistics from any messages */ + +static void report() +{ + static int nStart = 0; + static int nComplete = 0; + mps_message_type_t type; + + while(mps_message_queue_type(&type, arena)) { + mps_message_t message; + + cdie(mps_message_get(&message, arena, type), "message get"); + + switch(type) { + /* @@@@ is using these macros in a switch supported? */ + case mps_message_type_gc_start(): + printf("\nCollection start %d. Because:\n", ++nStart); + printf("%s\n", mps_message_gc_start_why(arena, message)); + + break; + case mps_message_type_gc(): + { + size_t live, condemned, not_condemned; + + live = mps_message_gc_live_size(arena, message); + condemned = mps_message_gc_condemned_size(arena, message); + not_condemned = mps_message_gc_not_condemned_size(arena, message); + + printf("\nCollection complete %d:\n", ++nComplete); + printf("live %lu\n", (unsigned long)live); + printf("condemned %lu\n", (unsigned long)condemned); + printf("not_condemned %lu\n", (unsigned long)not_condemned); + } + break; + default: + cdie(0, "unknown message type"); + } + mps_message_discard(arena, message); + } + + return; +} + + /* make -- object allocation and init */ static mps_addr_t make(void) @@ -142,6 +186,7 @@ static void *test(void *arg, size_t haveAmbigous) ++objs; if (objs % 256 == 0) { printf("."); + report(); fflush(stdout); } } @@ -169,31 +214,33 @@ int main(int argc, char **argv) die(mps_arena_create(&arena, mps_arena_class_vm(), testArenaSIZE), "arena_create"); + mps_message_type_enable(arena, mps_message_type_gc_start()); + mps_message_type_enable(arena, mps_message_type_gc()); die(mps_thread_reg(&thread, arena), "thread_reg"); die(mps_fmt_create_A(&format, arena, dylan_fmt_A()), "fmt_create"); die(mps_chain_create(&chain, arena, 1, testChain), "chain_create"); - printf("\nAMS Debug\n"); + printf("\n\n****************************** Testing AMS Debug\n"); die(mps_pool_create(&pool, arena, mps_class_ams_debug(), &freecheckOptions, format, chain, FALSE), "pool_create(ams_debug,share)"); mps_tramp(&r, test, pool, 0); mps_pool_destroy(pool); - printf("\nAMS Debug\n"); + printf("\n\n****************************** Testing AMS Debug\n"); die(mps_pool_create(&pool, arena, mps_class_ams_debug(), &freecheckOptions, format, chain, TRUE), "pool_create(ams_debug,ambig)"); mps_tramp(&r, test, pool, 1); mps_pool_destroy(pool); - printf("\nAMS\n"); + printf("\n\n****************************** Testing AMS\n"); die(mps_pool_create(&pool, arena, mps_class_ams(), format, chain, TRUE), "pool_create(ams,ambig)"); mps_tramp(&r, test, pool, 1); mps_pool_destroy(pool); - printf("\nAMS\n"); + printf("\n\n****************************** Testing AMS\n"); die(mps_pool_create(&pool, arena, mps_class_ams(), format, chain, FALSE), "pool_create(ams,share)"); mps_tramp(&r, test, pool, 0); -- cgit v1.2.1