diff options
Diffstat (limited to 'mps/code')
| -rw-r--r-- | mps/code/message.c | 8 | ||||
| -rw-r--r-- | mps/code/mpm.h | 1 | ||||
| -rw-r--r-- | mps/code/mpmst.h | 1 | ||||
| -rw-r--r-- | mps/code/mps.h | 2 | ||||
| -rw-r--r-- | mps/code/mpsi.c | 17 | ||||
| -rw-r--r-- | mps/code/mpslib.h | 3 |
6 files changed, 30 insertions, 2 deletions
diff --git a/mps/code/message.c b/mps/code/message.c index 284e78c6314..ae7ba930616 100644 --- a/mps/code/message.c +++ b/mps/code/message.c | |||
| @@ -284,6 +284,14 @@ MessageClass MessageGetClass(Message message) | |||
| 284 | return message->class; | 284 | return message->class; |
| 285 | } | 285 | } |
| 286 | 286 | ||
| 287 | /* Return the class of a message */ | ||
| 288 | mps_clock_t MessageGetClock(Message message) | ||
| 289 | { | ||
| 290 | AVERT(Message, message); | ||
| 291 | |||
| 292 | return message->postedClock; | ||
| 293 | } | ||
| 294 | |||
| 287 | static void MessageDelete(Message message) | 295 | static void MessageDelete(Message message) |
| 288 | { | 296 | { |
| 289 | AVERT(Message, message); | 297 | AVERT(Message, message); |
diff --git a/mps/code/mpm.h b/mps/code/mpm.h index b9d8e7548c1..1dfa7dc2c6a 100644 --- a/mps/code/mpm.h +++ b/mps/code/mpm.h | |||
| @@ -311,6 +311,7 @@ extern void MessageDiscard(Arena arena, Message message); | |||
| 311 | /* -- Message Methods, Generic */ | 311 | /* -- Message Methods, Generic */ |
| 312 | extern MessageType MessageGetType(Message message); | 312 | extern MessageType MessageGetType(Message message); |
| 313 | extern MessageClass MessageGetClass(Message message); | 313 | extern MessageClass MessageGetClass(Message message); |
| 314 | extern mps_clock_t MessageGetClock(Message message); | ||
| 314 | /* -- Message Method Dispatchers, Type-specific */ | 315 | /* -- Message Method Dispatchers, Type-specific */ |
| 315 | extern void MessageFinalizationRef(Ref *refReturn, | 316 | extern void MessageFinalizationRef(Ref *refReturn, |
| 316 | Arena arena, Message message); | 317 | Arena arena, Message 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 e47b88077c2..2852416bac8 100644 --- a/mps/code/mps.h +++ b/mps/code/mps.h | |||
| @@ -48,6 +48,7 @@ typedef size_t mps_align_t; /* alignment (size_t) */ | |||
| 48 | typedef unsigned mps_rm_t; /* root mode (unsigned) */ | 48 | typedef unsigned mps_rm_t; /* root mode (unsigned) */ |
| 49 | typedef unsigned mps_rank_t; /* ranks (unsigned) */ | 49 | typedef unsigned mps_rank_t; /* ranks (unsigned) */ |
| 50 | typedef unsigned mps_message_type_t; /* message type (unsigned) */ | 50 | typedef unsigned mps_message_type_t; /* message type (unsigned) */ |
| 51 | typedef 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> */ |
| @@ -527,6 +528,7 @@ extern void mps_message_discard(mps_arena_t, mps_message_t); | |||
| 527 | 528 | ||
| 528 | /* -- All Message Types */ | 529 | /* -- All Message Types */ |
| 529 | extern mps_message_type_t mps_message_type(mps_arena_t, mps_message_t); | 530 | extern mps_message_type_t mps_message_type(mps_arena_t, mps_message_t); |
| 531 | extern mps_clock_t mps_message_clock(mps_arena_t, mps_message_t); | ||
| 530 | 532 | ||
| 531 | /* -- mps_message_type_finalization */ | 533 | /* -- mps_message_type_finalization */ |
| 532 | extern void mps_message_finalization_ref(mps_addr_t *, | 534 | extern void mps_message_finalization_ref(mps_addr_t *, |
diff --git a/mps/code/mpsi.c b/mps/code/mpsi.c index 2dbc5cfe663..e5f88fc8541 100644 --- a/mps/code/mpsi.c +++ b/mps/code/mpsi.c | |||
| @@ -1675,6 +1675,23 @@ mps_message_type_t mps_message_type(mps_arena_t mps_arena, | |||
| 1675 | return (mps_message_type_t)type; | 1675 | return (mps_message_type_t)type; |
| 1676 | } | 1676 | } |
| 1677 | 1677 | ||
| 1678 | mps_clock_t mps_message_clock(mps_arena_t mps_arena, | ||
| 1679 | mps_message_t mps_message) | ||
| 1680 | { | ||
| 1681 | Arena arena = (Arena)mps_arena; | ||
| 1682 | Message message = (Message)mps_message; | ||
| 1683 | mps_clock_t postedClock; /* @@@@ should be Clock, not mps_clock_t */ | ||
| 1684 | |||
| 1685 | ArenaEnter(arena); | ||
| 1686 | |||
| 1687 | postedClock = MessageGetClock(message); | ||
| 1688 | |||
| 1689 | ArenaLeave(arena); | ||
| 1690 | |||
| 1691 | return (mps_clock_t)postedClock; | ||
| 1692 | } | ||
| 1693 | |||
| 1694 | |||
| 1678 | /* -- mps_message_type_finalization */ | 1695 | /* -- mps_message_type_finalization */ |
| 1679 | 1696 | ||
| 1680 | void mps_message_finalization_ref(mps_addr_t *mps_addr_return, | 1697 | void mps_message_finalization_ref(mps_addr_t *mps_addr_return, |
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 | ||
| 19 | extern int mps_lib_get_EOF(void); | 19 | extern 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); | |||
| 36 | extern int (mps_lib_memcmp)(const void *, const void *, size_t); | 36 | extern int (mps_lib_memcmp)(const void *, const void *, size_t); |
| 37 | 37 | ||
| 38 | 38 | ||
| 39 | typedef unsigned long mps_clock_t; | ||
| 40 | extern mps_clock_t mps_clock(void); | 39 | extern mps_clock_t mps_clock(void); |
| 41 | extern mps_clock_t mps_clocks_per_sec(void); | 40 | extern mps_clock_t mps_clocks_per_sec(void); |
| 42 | 41 | ||