diff options
| author | Richard Brooksby | 2012-08-22 08:41:42 +0100 |
|---|---|---|
| committer | Richard Brooksby | 2012-08-22 08:41:42 +0100 |
| commit | 30283c6f11af8a8aea4dfb0f3b9617adfbd22771 (patch) | |
| tree | f2ba14d89f8339116c2abfaf54f2feaeb4b41a19 /mps/code | |
| parent | 5e96e53da6e45131a427e7a395b5e6cb9daec8cd (diff) | |
| download | emacs-30283c6f11af8a8aea4dfb0f3b9617adfbd22771.tar.gz emacs-30283c6f11af8a8aea4dfb0f3b9617adfbd22771.zip | |
Moving some common definitions to eventcom.h from event.h.
Fixing the types of EventCode etc. to use narrower types to compress things on 64-bit architectures.
Fixing some warnings.
Copied from Perforce
Change: 179015
ServerID: perforce.ravenbrook.com
Diffstat (limited to 'mps/code')
| -rw-r--r-- | mps/code/event.c | 8 | ||||
| -rw-r--r-- | mps/code/event.h | 35 | ||||
| -rw-r--r-- | mps/code/eventcom.h | 42 | ||||
| -rw-r--r-- | mps/code/eventpro.c | 2 |
4 files changed, 44 insertions, 43 deletions
diff --git a/mps/code/event.c b/mps/code/event.c index d4b32f83a2c..0b4d16353b4 100644 --- a/mps/code/event.c +++ b/mps/code/event.c | |||
| @@ -46,11 +46,15 @@ Word EventKindControl; /* Bit set used to control output. */ | |||
| 46 | Res EventFlush(void) | 46 | Res EventFlush(void) |
| 47 | { | 47 | { |
| 48 | Res res; | 48 | Res res; |
| 49 | size_t size; | ||
| 49 | 50 | ||
| 50 | AVER(eventInited); | 51 | AVER(eventInited); |
| 51 | 52 | ||
| 52 | res = (Res)mps_io_write(eventIO, (void *)eventBuffer, | 53 | AVER(eventBuffer <= EventNext); |
| 53 | EventNext - eventBuffer); | 54 | AVER(EventNext <= eventBuffer + EventBufferSIZE); |
| 55 | size = (size_t)(EventNext - eventBuffer); | ||
| 56 | |||
| 57 | res = (Res)mps_io_write(eventIO, (void *)eventBuffer, size); | ||
| 54 | EventNext = eventBuffer; | 58 | EventNext = eventBuffer; |
| 55 | if (res != ResOK) return res; | 59 | if (res != ResOK) return res; |
| 56 | 60 | ||
diff --git a/mps/code/event.h b/mps/code/event.h index 139460955fa..97e622b628d 100644 --- a/mps/code/event.h +++ b/mps/code/event.h | |||
| @@ -35,43 +35,8 @@ extern void EventLabelAddr(Addr, Word); | |||
| 35 | extern Res EventFlush(void); | 35 | extern Res EventFlush(void); |
| 36 | 36 | ||
| 37 | 37 | ||
| 38 | /* Event Kinds --- see <design/telemetry/> | ||
| 39 | * | ||
| 40 | * All events are classified as being of one event type. | ||
| 41 | * They are small enough to be able to be used as shifts within a word. | ||
| 42 | */ | ||
| 43 | |||
| 44 | #define EventKindArena ((EventKind)0) /* Per space or arena */ | ||
| 45 | #define EventKindPool ((EventKind)1) /* Per pool */ | ||
| 46 | #define EventKindTrace ((EventKind)2) /* Per trace or scan */ | ||
| 47 | #define EventKindSeg ((EventKind)3) /* Per seg */ | ||
| 48 | #define EventKindRef ((EventKind)4) /* Per ref or fix */ | ||
| 49 | #define EventKindObject ((EventKind)5) /* Per alloc or object */ | ||
| 50 | #define EventKindUser ((EventKind)6) /* User-invoked */ | ||
| 51 | |||
| 52 | #define EventKindNumber ((Count)7) /* Number of event kinds */ | ||
| 53 | |||
| 54 | |||
| 55 | /* Event type definitions | ||
| 56 | * | ||
| 57 | * Define various constants for each event type to describe them. | ||
| 58 | */ | ||
| 59 | |||
| 60 | /* Note that enum values can be up to fifteen bits long portably. */ | ||
| 61 | #define EVENT_ENUM(X, type, code, always, kind, count, format) \ | ||
| 62 | enum { \ | ||
| 63 | Event##type##High = ((code >> 8) & 0xFF), \ | ||
| 64 | Event##type##Low = (code & 0xFF), \ | ||
| 65 | Event##type##Always = always, \ | ||
| 66 | Event##type##Kind = EventKind##kind \ | ||
| 67 | }; | ||
| 68 | |||
| 69 | EVENT_LIST(EVENT_ENUM, X) | ||
| 70 | |||
| 71 | |||
| 72 | /* Event writing support */ | 38 | /* Event writing support */ |
| 73 | 39 | ||
| 74 | /* extern EventUnion EventMould; */ | ||
| 75 | extern char *EventNext, *EventLimit; | 40 | extern char *EventNext, *EventLimit; |
| 76 | extern Word EventKindControl; | 41 | extern Word EventKindControl; |
| 77 | 42 | ||
diff --git a/mps/code/eventcom.h b/mps/code/eventcom.h index 7d372cdd47a..18bef8ec4ca 100644 --- a/mps/code/eventcom.h +++ b/mps/code/eventcom.h | |||
| @@ -16,8 +16,8 @@ | |||
| 16 | /* Types for event fields */ | 16 | /* Types for event fields */ |
| 17 | 17 | ||
| 18 | typedef Word EventType; | 18 | typedef Word EventType; |
| 19 | typedef size_t EventCode; | 19 | typedef unsigned short EventCode; |
| 20 | typedef Index EventKind; | 20 | typedef unsigned EventKind; |
| 21 | 21 | ||
| 22 | typedef Byte EventStringLen; | 22 | typedef Byte EventStringLen; |
| 23 | 23 | ||
| @@ -33,6 +33,39 @@ typedef EventStringStruct *EventString; | |||
| 33 | #define EventCodeMAX ((EventCode)0x0069) | 33 | #define EventCodeMAX ((EventCode)0x0069) |
| 34 | 34 | ||
| 35 | 35 | ||
| 36 | /* Event Kinds --- see <design/telemetry/> | ||
| 37 | * | ||
| 38 | * All events are classified as being of one event type. | ||
| 39 | * They are small enough to be able to be used as shifts within a word. | ||
| 40 | */ | ||
| 41 | |||
| 42 | enum { | ||
| 43 | EventKindArena, /* Per space or arena */ | ||
| 44 | EventKindPool, /* Per pool */ | ||
| 45 | EventKindTrace, /* Per trace or scan */ | ||
| 46 | EventKindSeg, /* Per seg */ | ||
| 47 | EventKindRef, /* Per ref or fix */ | ||
| 48 | EventKindObject, /* Per alloc or object */ | ||
| 49 | EventKindUser, /* User-invoked */ | ||
| 50 | EventKindLIMIT | ||
| 51 | }; | ||
| 52 | |||
| 53 | |||
| 54 | /* Event type definitions | ||
| 55 | * | ||
| 56 | * Define various constants for each event type to describe them. | ||
| 57 | */ | ||
| 58 | |||
| 59 | /* Note that enum values can be up to fifteen bits long portably. */ | ||
| 60 | #define EVENT_ENUM(X, name, code, always, kind, count, format) \ | ||
| 61 | enum { \ | ||
| 62 | Event##name##Always = always, \ | ||
| 63 | Event##name##Kind = EventKind##kind \ | ||
| 64 | }; | ||
| 65 | |||
| 66 | EVENT_LIST(EVENT_ENUM, X) | ||
| 67 | |||
| 68 | |||
| 36 | /* Event*Struct -- Event Structures | 69 | /* Event*Struct -- Event Structures |
| 37 | * | 70 | * |
| 38 | * Declare the structures that are used to encode events in the internal event | 71 | * Declare the structures that are used to encode events in the internal event |
| @@ -112,11 +145,11 @@ typedef union EventUnion { | |||
| 112 | BEGIN \ | 145 | BEGIN \ |
| 113 | size_t _string_len = (length); \ | 146 | size_t _string_len = (length); \ |
| 114 | size_t size; \ | 147 | size_t size; \ |
| 115 | AVER(_string_len < EventStringLengthMAX); \ | ||
| 116 | size = offsetof(Event##name##Struct, f1.str) + _string_len; \ | 148 | size = offsetof(Event##name##Struct, f1.str) + _string_len; \ |
| 117 | EVENT_BEGIN(name, size) \ | 149 | EVENT_BEGIN(name, size) \ |
| 118 | _event->f0 = (p0); \ | 150 | _event->f0 = (p0); \ |
| 119 | _event->f1.len = _string_len; \ | 151 | AVER(_string_len < EventStringLengthMAX); \ |
| 152 | _event->f1.len = (EventStringLen)_string_len; \ | ||
| 120 | mps_lib_memcpy(_event->f1.str, (string), _string_len); \ | 153 | mps_lib_memcpy(_event->f1.str, (string), _string_len); \ |
| 121 | EVENT_END(name, size); \ | 154 | EVENT_END(name, size); \ |
| 122 | END | 155 | END |
| @@ -141,7 +174,6 @@ typedef union EventUnion { | |||
| 141 | #define EVENT14(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13) EVENT_BEGIN(name, sizeof(Event##name##Struct)) _event->f0 = (p0); _event->f1 = (p1); _event->f2 = (p2); _event->f3 = (p3); _event->f4 = (p4); _event->f5 = (p5); _event->f6 = (p6); _event->f7 = (p7); _event->f8 = (p8); _event->f9 = (p9); _event->f10 = (p10); _event->f11 = (p11); _event->f12 = (p12); _event->f13 = (p13); EVENT_END(name, sizeof(Event##name##Struct)) | 174 | #define EVENT14(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13) EVENT_BEGIN(name, sizeof(Event##name##Struct)) _event->f0 = (p0); _event->f1 = (p1); _event->f2 = (p2); _event->f3 = (p3); _event->f4 = (p4); _event->f5 = (p5); _event->f6 = (p6); _event->f7 = (p7); _event->f8 = (p8); _event->f9 = (p9); _event->f10 = (p10); _event->f11 = (p11); _event->f12 = (p12); _event->f13 = (p13); EVENT_END(name, sizeof(Event##name##Struct)) |
| 142 | 175 | ||
| 143 | 176 | ||
| 144 | |||
| 145 | #define EVENT0_FIELD_PTR(name, event, i) NULL | 177 | #define EVENT0_FIELD_PTR(name, event, i) NULL |
| 146 | 178 | ||
| 147 | /* | 179 | /* |
diff --git a/mps/code/eventpro.c b/mps/code/eventpro.c index 07faea3226e..e66c76a69a9 100644 --- a/mps/code/eventpro.c +++ b/mps/code/eventpro.c | |||
| @@ -72,7 +72,7 @@ struct EventProcStruct { | |||
| 72 | typedef struct { | 72 | typedef struct { |
| 73 | EventType type; | 73 | EventType type; |
| 74 | char *name; | 74 | char *name; |
| 75 | size_t code; | 75 | EventCode code; |
| 76 | size_t length; | 76 | size_t length; |
| 77 | char *format; | 77 | char *format; |
| 78 | } eventRecord; | 78 | } eventRecord; |