diff options
| author | Richard Kistruck | 2008-11-07 16:11:37 +0000 |
|---|---|---|
| committer | Richard Kistruck | 2008-11-07 16:11:37 +0000 |
| commit | 55c7940bdb5290453e307db4692324cee1c67ffc (patch) | |
| tree | c18604d9f1ee191e6347f7e92b6fcede643f4cf9 /mps/code | |
| parent | eec7b1abfd9ee9482cce85ec0eb744e83c351bb1 (diff) | |
| download | emacs-55c7940bdb5290453e307db4692324cee1c67ffc.tar.gz emacs-55c7940bdb5290453e307db4692324cee1c67ffc.zip | |
Mps br/timing:
message.c: maintain postedClock field, set it with mps_clock() at post time;
amcss.c: call and display mps_message_clock() on _gc_start & _gc messages.
Copied from Perforce
Change: 166677
ServerID: perforce.ravenbrook.com
Diffstat (limited to 'mps/code')
| -rw-r--r-- | mps/code/amcss.c | 10 | ||||
| -rw-r--r-- | mps/code/message.c | 5 |
2 files changed, 11 insertions, 4 deletions
diff --git a/mps/code/amcss.c b/mps/code/amcss.c index 2efac94eaef..80d7eb71791 100644 --- a/mps/code/amcss.c +++ b/mps/code/amcss.c | |||
| @@ -63,7 +63,8 @@ static void report(mps_arena_t arena) | |||
| 63 | /* @@@@ is using these macros in a switch supported? */ | 63 | /* @@@@ is using these macros in a switch supported? */ |
| 64 | case mps_message_type_gc_start(): { | 64 | case mps_message_type_gc_start(): { |
| 65 | printf("\nCollection started. Because:\n"); | 65 | printf("\nCollection started. Because:\n"); |
| 66 | printf("%s\n", mps_message_gc_start_why(arena, message)); | 66 | printf(" %s\n", mps_message_gc_start_why(arena, message)); |
| 67 | printf(" clock: %lu\n", (unsigned long)mps_message_clock(arena, message)); | ||
| 67 | break; | 68 | break; |
| 68 | } | 69 | } |
| 69 | case mps_message_type_gc(): { | 70 | case mps_message_type_gc(): { |
| @@ -74,9 +75,10 @@ static void report(mps_arena_t arena) | |||
| 74 | not_condemned = mps_message_gc_not_condemned_size(arena, message); | 75 | not_condemned = mps_message_gc_not_condemned_size(arena, message); |
| 75 | 76 | ||
| 76 | printf("\nCollection %d finished:\n", ++nCollections); | 77 | printf("\nCollection %d finished:\n", ++nCollections); |
| 77 | printf("live %lu\n", (unsigned long)live); | 78 | printf(" live %lu\n", (unsigned long)live); |
| 78 | printf("condemned %lu\n", (unsigned long)condemned); | 79 | printf(" condemned %lu\n", (unsigned long)condemned); |
| 79 | printf("not_condemned %lu\n", (unsigned long)not_condemned); | 80 | printf(" not_condemned %lu\n", (unsigned long)not_condemned); |
| 81 | printf(" clock: %lu\n", (unsigned long)mps_message_clock(arena, message)); | ||
| 80 | 82 | ||
| 81 | if(condemned > (gen1SIZE + gen2SIZE + (size_t)128) * 1024) { | 83 | if(condemned > (gen1SIZE + gen2SIZE + (size_t)128) * 1024) { |
| 82 | /* When condemned size is larger than could happen in a gen 2 | 84 | /* When condemned size is larger than could happen in a gen 2 |
diff --git a/mps/code/message.c b/mps/code/message.c index 04e6002a760..0c6c3beaae4 100644 --- a/mps/code/message.c +++ b/mps/code/message.c | |||
| @@ -50,6 +50,7 @@ Bool MessageCheck(Message message) | |||
| 50 | CHECKL(MessageTypeCheck(message->type)); | 50 | CHECKL(MessageTypeCheck(message->type)); |
| 51 | CHECKU(MessageClass, message->class); | 51 | CHECKU(MessageClass, message->class); |
| 52 | CHECKL(RingCheck(&message->queueRing)); | 52 | CHECKL(RingCheck(&message->queueRing)); |
| 53 | /* cannot check postedClock: no check for mps_clock_t */ | ||
| 53 | 54 | ||
| 54 | return TRUE; | 55 | return TRUE; |
| 55 | } | 56 | } |
| @@ -81,6 +82,7 @@ void MessageInit(Arena arena, Message message, MessageClass class, | |||
| 81 | message->class = class; | 82 | message->class = class; |
| 82 | RingInit(&message->queueRing); | 83 | RingInit(&message->queueRing); |
| 83 | message->type = type; | 84 | message->type = type; |
| 85 | message->postedClock = 0; | ||
| 84 | message->sig = MessageSig; | 86 | message->sig = MessageSig; |
| 85 | 87 | ||
| 86 | AVERT(Message, message); | 88 | AVERT(Message, message); |
| @@ -120,6 +122,9 @@ void MessagePost(Arena arena, Message message) | |||
| 120 | /* <design/message/#fun.post.singleton> */ | 122 | /* <design/message/#fun.post.singleton> */ |
| 121 | AVER(!MessageOnQueue(message)); | 123 | AVER(!MessageOnQueue(message)); |
| 122 | if(MessageTypeEnabled(arena, message->type)) { | 124 | if(MessageTypeEnabled(arena, message->type)) { |
| 125 | /* @@@@ for finalization messages, this may be critical path; */ | ||
| 126 | /* so is it still ok to call mps_clock() here? */ | ||
| 127 | message->postedClock = mps_clock(); | ||
| 123 | RingAppend(&arena->messageRing, &message->queueRing); | 128 | RingAppend(&arena->messageRing, &message->queueRing); |
| 124 | } else { | 129 | } else { |
| 125 | /* discard message immediately if client hasn't enabled that type */ | 130 | /* discard message immediately if client hasn't enabled that type */ |