aboutsummaryrefslogtreecommitdiffstats
path: root/mps/code
diff options
context:
space:
mode:
authorRichard Kistruck2008-10-31 10:10:19 +0000
committerRichard Kistruck2008-10-31 10:10:19 +0000
commit0c1a9c3dc7c8dfddb7c6ef64e416b77ead5534d0 (patch)
tree6a93cfdd48df871510f7c0758a314fb4187ea3e2 /mps/code
parented4cc8fe5dd8f353f45141edaf156b5d3f52a6f9 (diff)
downloademacs-0c1a9c3dc7c8dfddb7c6ef64e416b77ead5534d0.tar.gz
emacs-0c1a9c3dc7c8dfddb7c6ef64e416b77ead5534d0.zip
Mps br/timing: (broken) snapshot; i want to back these out and rearrange
functions into a consistent order first Copied from Perforce Change: 166585 ServerID: perforce.ravenbrook.com
Diffstat (limited to 'mps/code')
-rw-r--r--mps/code/message.c3
-rw-r--r--mps/code/mpmst.h1
-rw-r--r--mps/code/mps.h20
-rw-r--r--mps/code/mpsi.c16
-rw-r--r--mps/code/mpslib.h3
5 files changed, 34 insertions, 9 deletions
diff --git a/mps/code/message.c b/mps/code/message.c
index 2d12432acff..f5d62624b24 100644
--- a/mps/code/message.c
+++ b/mps/code/message.c
@@ -62,6 +62,7 @@ Bool MessageCheck(Message message)
62 CHECKL(MessageTypeCheck(message->type)); 62 CHECKL(MessageTypeCheck(message->type));
63 CHECKU(MessageClass, message->class); 63 CHECKU(MessageClass, message->class);
64 CHECKL(RingCheck(&message->queueRing)); 64 CHECKL(RingCheck(&message->queueRing));
65 /* cannot check postedClock: no check for mps_clock_t */
65 66
66 return TRUE; 67 return TRUE;
67} 68}
@@ -117,6 +118,7 @@ void MessageInit(Arena arena, Message message, MessageClass class,
117 message->class = class; 118 message->class = class;
118 RingInit(&message->queueRing); 119 RingInit(&message->queueRing);
119 message->type = type; 120 message->type = type;
121 message->postedClock = 0;
120 message->sig = MessageSig; 122 message->sig = MessageSig;
121 123
122 AVERT(Message, message); 124 AVERT(Message, message);
@@ -145,6 +147,7 @@ void MessagePost(Arena arena, Message message)
145 AVER(!MessageOnQueue(message)); 147 AVER(!MessageOnQueue(message));
146 if(MessageTypeEnabled(arena, message->type)) { 148 if(MessageTypeEnabled(arena, message->type)) {
147 RingAppend(&arena->messageRing, &message->queueRing); 149 RingAppend(&arena->messageRing, &message->queueRing);
150 message->postedClock = mps_clock();
148 } else { 151 } else {
149 /* discard message immediately if client hasn't enabled that type */ 152 /* discard message immediately if client hasn't enabled that type */
150 MessageDiscard(arena, message); 153 MessageDiscard(arena, message);
diff --git a/mps/code/mpmst.h b/mps/code/mpmst.h
index 739c95a449d..1905e2bb560 100644
--- a/mps/code/mpmst.h
+++ b/mps/code/mpmst.h
@@ -223,6 +223,7 @@ typedef struct MessageStruct {
223 MessageType type; /* Message Type */ 223 MessageType type; /* Message Type */
224 MessageClass class; /* Message Class Structure */ 224 MessageClass class; /* Message Class Structure */
225 RingStruct queueRing; /* Message queue ring */ 225 RingStruct queueRing; /* Message queue ring */
226 mps_clock_t postedClock; /* mps_clock() at post time */
226} MessageStruct; 227} MessageStruct;
227 228
228 229
diff --git a/mps/code/mps.h b/mps/code/mps.h
index 14b6466def5..75248a4e4ec 100644
--- a/mps/code/mps.h
+++ b/mps/code/mps.h
@@ -48,6 +48,7 @@ typedef size_t mps_align_t; /* alignment (size_t) */
48typedef unsigned mps_rm_t; /* root mode (unsigned) */ 48typedef unsigned mps_rm_t; /* root mode (unsigned) */
49typedef unsigned mps_rank_t; /* ranks (unsigned) */ 49typedef unsigned mps_rank_t; /* ranks (unsigned) */
50typedef unsigned mps_message_type_t; /* message type (unsigned) */ 50typedef unsigned mps_message_type_t; /* message type (unsigned) */
51typedef unsigned long mps_clock_t; /* processor time */
51 52
52/* Result Codes */ 53/* Result Codes */
53/* .result-codes: Keep in sync with <code/mpmtypes.h#result-codes> */ 54/* .result-codes: Keep in sync with <code/mpmtypes.h#result-codes> */
@@ -515,23 +516,28 @@ extern mps_word_t mps_collections(mps_arena_t);
515 516
516/* Messages */ 517/* Messages */
517 518
518extern mps_bool_t mps_message_poll(mps_arena_t);
519extern void mps_message_type_enable(mps_arena_t, mps_message_type_t); 519extern void mps_message_type_enable(mps_arena_t, mps_message_type_t);
520extern void mps_message_type_disable(mps_arena_t, mps_message_type_t); 520extern void mps_message_type_disable(mps_arena_t, mps_message_type_t);
521extern mps_bool_t mps_message_poll(mps_arena_t);
522extern mps_bool_t mps_message_queue_type(mps_message_type_t *, mps_arena_t);
523
521extern mps_bool_t mps_message_get(mps_message_t *, 524extern mps_bool_t mps_message_get(mps_message_t *,
522 mps_arena_t, mps_message_type_t); 525 mps_arena_t, mps_message_type_t);
523extern void mps_message_discard(mps_arena_t, mps_message_t); 526extern void mps_message_discard(mps_arena_t, mps_message_t);
524extern mps_bool_t mps_message_queue_type(mps_message_type_t *, mps_arena_t);
525extern mps_message_type_t mps_message_type(mps_arena_t, mps_message_t);
526 527
527/* Message Type Specific Methods */ 528/* Message Methods */
529
530/* -- All Message Types */
531
532extern mps_message_type_t mps_message_type(mps_arena_t, mps_message_t);
533extern mps_clock_t mps_message_clock(mps_arena_t, mps_message_t);
528 534
529/* MPS_MESSAGE_TYPE_FINALIZATION */ 535/* -- mps_message_type_finalization */
530 536
531extern void mps_message_finalization_ref(mps_addr_t *, 537extern void mps_message_finalization_ref(mps_addr_t *,
532 mps_arena_t, mps_message_t); 538 mps_arena_t, mps_message_t);
533 539
534/* MPS_MESSAGE_TYPE_GC */ 540/* -- mps_message_type_gc_start */
535 541
536extern size_t mps_message_gc_live_size(mps_arena_t, mps_message_t); 542extern size_t mps_message_gc_live_size(mps_arena_t, mps_message_t);
537 543
@@ -540,7 +546,7 @@ extern size_t mps_message_gc_condemned_size(mps_arena_t, mps_message_t);
540extern size_t mps_message_gc_not_condemned_size(mps_arena_t, 546extern size_t mps_message_gc_not_condemned_size(mps_arena_t,
541 mps_message_t); 547 mps_message_t);
542 548
543/* MPS_MESSAGE_TYPE_GC_START */ 549/* -- mps_message_type_gc_start */
544 550
545extern const char *mps_message_gc_start_why(mps_arena_t, mps_message_t); 551extern const char *mps_message_gc_start_why(mps_arena_t, mps_message_t);
546 552
diff --git a/mps/code/mpsi.c b/mps/code/mpsi.c
index a24deb44bb0..1208637b11f 100644
--- a/mps/code/mpsi.c
+++ b/mps/code/mpsi.c
@@ -1594,6 +1594,22 @@ mps_message_type_t mps_message_type(mps_arena_t mps_arena,
1594 return (mps_message_type_t)type; 1594 return (mps_message_type_t)type;
1595} 1595}
1596 1596
1597mps_clock_t mps_message_clock(mps_arena_t mps_arena,
1598 mps_message_t mps_message)
1599{
1600 Arena arena = (Arena)mps_arena;
1601 Message message = (Message)mps_message;
1602 mps_clock_t postedClock; /* @@@@ should be Clock, not mps_clock_t */
1603
1604 ArenaEnter(arena);
1605
1606 postedClock = 0; /* MessageGetClock(message); */
1607
1608 ArenaLeave(arena);
1609
1610 return (mps_clock_t)postedClock;
1611}
1612
1597void mps_message_discard(mps_arena_t mps_arena, 1613void mps_message_discard(mps_arena_t mps_arena,
1598 mps_message_t mps_message) 1614 mps_message_t mps_message)
1599{ 1615{
diff --git a/mps/code/mpslib.h b/mps/code/mpslib.h
index 094975b3cf7..f74bd986fa6 100644
--- a/mps/code/mpslib.h
+++ b/mps/code/mpslib.h
@@ -14,7 +14,7 @@
14#define mpslib_h 14#define mpslib_h
15 15
16#include <stddef.h> 16#include <stddef.h>
17 17#include "mps.h" /* mps_clock_t */
18 18
19extern int mps_lib_get_EOF(void); 19extern int mps_lib_get_EOF(void);
20#define mps_lib_EOF (mps_lib_get_EOF()) 20#define mps_lib_EOF (mps_lib_get_EOF())
@@ -36,7 +36,6 @@ extern void *(mps_lib_memcpy)(void *, const void *, size_t);
36extern int (mps_lib_memcmp)(const void *, const void *, size_t); 36extern int (mps_lib_memcmp)(const void *, const void *, size_t);
37 37
38 38
39typedef unsigned long mps_clock_t;
40extern mps_clock_t mps_clock(void); 39extern mps_clock_t mps_clock(void);
41extern mps_clock_t mps_clocks_per_sec(void); 40extern mps_clock_t mps_clocks_per_sec(void);
42 41