aboutsummaryrefslogtreecommitdiffstats
path: root/mps/code
diff options
context:
space:
mode:
authorRichard Kistruck2008-11-07 16:11:37 +0000
committerRichard Kistruck2008-11-07 16:11:37 +0000
commit55c7940bdb5290453e307db4692324cee1c67ffc (patch)
treec18604d9f1ee191e6347f7e92b6fcede643f4cf9 /mps/code
parenteec7b1abfd9ee9482cce85ec0eb744e83c351bb1 (diff)
downloademacs-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.c10
-rw-r--r--mps/code/message.c5
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 */