From 0c1a9c3dc7c8dfddb7c6ef64e416b77ead5534d0 Mon Sep 17 00:00:00 2001 From: Richard Kistruck Date: Fri, 31 Oct 2008 10:10:19 +0000 Subject: 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 --- mps/code/message.c | 3 +++ mps/code/mpmst.h | 1 + mps/code/mps.h | 20 +++++++++++++------- mps/code/mpsi.c | 16 ++++++++++++++++ mps/code/mpslib.h | 3 +-- 5 files changed, 34 insertions(+), 9 deletions(-) (limited to 'mps/code') 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) CHECKL(MessageTypeCheck(message->type)); CHECKU(MessageClass, message->class); CHECKL(RingCheck(&message->queueRing)); + /* cannot check postedClock: no check for mps_clock_t */ return TRUE; } @@ -117,6 +118,7 @@ void MessageInit(Arena arena, Message message, MessageClass class, message->class = class; RingInit(&message->queueRing); message->type = type; + message->postedClock = 0; message->sig = MessageSig; AVERT(Message, message); @@ -145,6 +147,7 @@ void MessagePost(Arena arena, Message message) AVER(!MessageOnQueue(message)); if(MessageTypeEnabled(arena, message->type)) { RingAppend(&arena->messageRing, &message->queueRing); + message->postedClock = mps_clock(); } else { /* discard message immediately if client hasn't enabled that type */ 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 { MessageType type; /* Message Type */ MessageClass class; /* Message Class Structure */ RingStruct queueRing; /* Message queue ring */ + mps_clock_t postedClock; /* mps_clock() at post time */ } MessageStruct; 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) */ typedef unsigned mps_rm_t; /* root mode (unsigned) */ typedef unsigned mps_rank_t; /* ranks (unsigned) */ typedef unsigned mps_message_type_t; /* message type (unsigned) */ +typedef unsigned long mps_clock_t; /* processor time */ /* Result Codes */ /* .result-codes: Keep in sync with */ @@ -515,23 +516,28 @@ extern mps_word_t mps_collections(mps_arena_t); /* Messages */ -extern mps_bool_t mps_message_poll(mps_arena_t); extern void mps_message_type_enable(mps_arena_t, mps_message_type_t); extern void mps_message_type_disable(mps_arena_t, mps_message_type_t); +extern mps_bool_t mps_message_poll(mps_arena_t); +extern mps_bool_t mps_message_queue_type(mps_message_type_t *, mps_arena_t); + extern mps_bool_t mps_message_get(mps_message_t *, mps_arena_t, mps_message_type_t); extern void mps_message_discard(mps_arena_t, mps_message_t); -extern mps_bool_t mps_message_queue_type(mps_message_type_t *, mps_arena_t); -extern mps_message_type_t mps_message_type(mps_arena_t, mps_message_t); -/* Message Type Specific Methods */ +/* Message Methods */ + +/* -- All Message Types */ + +extern mps_message_type_t mps_message_type(mps_arena_t, mps_message_t); +extern mps_clock_t mps_message_clock(mps_arena_t, mps_message_t); -/* MPS_MESSAGE_TYPE_FINALIZATION */ +/* -- mps_message_type_finalization */ extern void mps_message_finalization_ref(mps_addr_t *, mps_arena_t, mps_message_t); -/* MPS_MESSAGE_TYPE_GC */ +/* -- mps_message_type_gc_start */ extern size_t mps_message_gc_live_size(mps_arena_t, mps_message_t); @@ -540,7 +546,7 @@ extern size_t mps_message_gc_condemned_size(mps_arena_t, mps_message_t); extern size_t mps_message_gc_not_condemned_size(mps_arena_t, mps_message_t); -/* MPS_MESSAGE_TYPE_GC_START */ +/* -- mps_message_type_gc_start */ extern const char *mps_message_gc_start_why(mps_arena_t, mps_message_t); 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, return (mps_message_type_t)type; } +mps_clock_t mps_message_clock(mps_arena_t mps_arena, + mps_message_t mps_message) +{ + Arena arena = (Arena)mps_arena; + Message message = (Message)mps_message; + mps_clock_t postedClock; /* @@@@ should be Clock, not mps_clock_t */ + + ArenaEnter(arena); + + postedClock = 0; /* MessageGetClock(message); */ + + ArenaLeave(arena); + + return (mps_clock_t)postedClock; +} + void mps_message_discard(mps_arena_t mps_arena, mps_message_t mps_message) { 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 @@ #define mpslib_h #include - +#include "mps.h" /* mps_clock_t */ extern int mps_lib_get_EOF(void); #define mps_lib_EOF (mps_lib_get_EOF()) @@ -36,7 +36,6 @@ extern void *(mps_lib_memcpy)(void *, const void *, size_t); extern int (mps_lib_memcmp)(const void *, const void *, size_t); -typedef unsigned long mps_clock_t; extern mps_clock_t mps_clock(void); extern mps_clock_t mps_clocks_per_sec(void); -- cgit v1.2.1