Prevent zero values in the mark API
These values cannot be differentiated from a null value, due to a Paraver limitation.
This commit is contained in:
		
							parent
							
								
									670edb6ddc
								
							
						
					
					
						commit
						c803a7566f
					
				| @ -40,7 +40,13 @@ void ovni_mark_label(int32_t type, int64_t value, const char *label); | ||||
| ### Emit events | ||||
| 
 | ||||
| All mark channels begin with the default value *null*, which is not shown in | ||||
| Paraver and will be displayed as the usual empty space. | ||||
| Paraver and will be displayed as the usual empty space. The value of the channel | ||||
| can be changed over time with the following functions. | ||||
| 
 | ||||
| !!! warning | ||||
| 
 | ||||
|     The value 0 is forbidden, as it is used by Paraver to represent the | ||||
|     "empty" state. | ||||
| 
 | ||||
| If you have used a single channel (without `OVNI_MARK_STACK`), then you must use | ||||
| the following call to emit events at runtime: | ||||
|  | ||||
| @ -624,6 +624,11 @@ mark_event(struct emu *emu) | ||||
| 		return -1; | ||||
| 	} | ||||
| 
 | ||||
| 	if (value == 0) { | ||||
| 		err("mark value cannot be zero, type %ld", type); | ||||
| 		return -1; | ||||
| 	} | ||||
| 
 | ||||
| 	long index = mc->index; | ||||
| 	struct ovni_thread *oth = EXT(emu->thread, 'O'); | ||||
| 	struct ovni_mark_thread *mth = &oth->mark; | ||||
|  | ||||
| @ -1136,6 +1136,9 @@ ovni_mark_label(int32_t type, int64_t value, const char *label) | ||||
| void | ||||
| ovni_mark_push(int32_t type, int64_t value) | ||||
| { | ||||
| 	if (value == 0) | ||||
| 		die("value cannot be 0, type %ld", (long) type); | ||||
| 
 | ||||
| 	struct ovni_ev ev = {0}; | ||||
| 	ovni_ev_set_clock(&ev, ovni_clock_now()); | ||||
| 	ovni_ev_set_mcv(&ev, "OM["); | ||||
| @ -1147,6 +1150,9 @@ ovni_mark_push(int32_t type, int64_t value) | ||||
| void | ||||
| ovni_mark_pop(int32_t type, int64_t value) | ||||
| { | ||||
| 	if (value == 0) | ||||
| 		die("value cannot be 0, type %ld", (long) type); | ||||
| 
 | ||||
| 	struct ovni_ev ev = {0}; | ||||
| 	ovni_ev_set_clock(&ev, ovni_clock_now()); | ||||
| 	ovni_ev_set_mcv(&ev, "OM]"); | ||||
| @ -1158,6 +1164,9 @@ ovni_mark_pop(int32_t type, int64_t value) | ||||
| void | ||||
| ovni_mark_set(int32_t type, int64_t value) | ||||
| { | ||||
| 	if (value == 0) | ||||
| 		die("value cannot be 0, type %ld", (long) type); | ||||
| 
 | ||||
| 	struct ovni_ev ev = {0}; | ||||
| 	ovni_ev_set_clock(&ev, ovni_clock_now()); | ||||
| 	ovni_ev_set_mcv(&ev, "OM="); | ||||
|  | ||||
| @ -46,9 +46,7 @@ main(void) | ||||
| 	ovni_mark_label(MARK_COLORS, COL_GRAY, "Gray"); | ||||
| 	ovni_mark_label(MARK_COLORS, COL_RED,  "Red"); | ||||
| 
 | ||||
| 	for (int i = 0; i < 100; i++) { | ||||
| 		ovni_mark_set(MARK_PROGRESS, i); | ||||
| 
 | ||||
| 	for (int i = 1; i <= 100; i++) { | ||||
| 		int which = 1 + (rand() % 3); | ||||
| 
 | ||||
| 		/* Simulate a thread goes to sleep */ | ||||
| @ -61,9 +59,9 @@ main(void) | ||||
| 
 | ||||
| 		if (rank == 0 && i == 75) | ||||
| 			instr_thread_resume(); | ||||
| 	} | ||||
| 
 | ||||
| 	ovni_mark_set(MARK_PROGRESS, 100); | ||||
| 		ovni_mark_set(MARK_PROGRESS, i); | ||||
| 	} | ||||
| 
 | ||||
| 	instr_end(); | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user