| 
									
										
										
										
											2013-06-11 17:29:18 +02:00
										 |  |  | #include <traceevent/event-parse.h>
 | 
					
						
							| 
									
										
										
										
											2012-11-10 01:46:48 +01:00
										 |  |  | #include "evsel.h"
 | 
					
						
							|  |  |  | #include "tests.h"
 | 
					
						
							| 
									
										
										
										
											2014-07-14 23:46:48 +02:00
										 |  |  | #include "debug.h"
 | 
					
						
							| 
									
										
										
										
											2012-11-10 01:46:48 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | static int perf_evsel__test_field(struct perf_evsel *evsel, const char *name, | 
					
						
							|  |  |  | 				  int size, bool should_be_signed) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	struct format_field *field = perf_evsel__field(evsel, name); | 
					
						
							|  |  |  | 	int is_signed; | 
					
						
							|  |  |  | 	int ret = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (field == NULL) { | 
					
						
							|  |  |  | 		pr_debug("%s: \"%s\" field not found!\n", evsel->name, name); | 
					
						
							|  |  |  | 		return -1; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	is_signed = !!(field->flags | FIELD_IS_SIGNED); | 
					
						
							|  |  |  | 	if (should_be_signed && !is_signed) { | 
					
						
							|  |  |  | 		pr_debug("%s: \"%s\" signedness(%d) is wrong, should be %d\n", | 
					
						
							|  |  |  | 			 evsel->name, name, is_signed, should_be_signed); | 
					
						
							|  |  |  | 		ret = -1; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (field->size != size) { | 
					
						
							|  |  |  | 		pr_debug("%s: \"%s\" size (%d) should be %d!\n", | 
					
						
							|  |  |  | 			 evsel->name, name, field->size, size); | 
					
						
							|  |  |  | 		ret = -1; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return ret; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int test__perf_evsel__tp_sched_test(void) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2013-11-07 16:41:19 -03:00
										 |  |  | 	struct perf_evsel *evsel = perf_evsel__newtp("sched", "sched_switch"); | 
					
						
							| 
									
										
										
										
											2012-11-10 01:46:48 +01:00
										 |  |  | 	int ret = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (evsel == NULL) { | 
					
						
							|  |  |  | 		pr_debug("perf_evsel__new\n"); | 
					
						
							|  |  |  | 		return -1; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (perf_evsel__test_field(evsel, "prev_comm", 16, true)) | 
					
						
							|  |  |  | 		ret = -1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (perf_evsel__test_field(evsel, "prev_pid", 4, true)) | 
					
						
							|  |  |  | 		ret = -1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (perf_evsel__test_field(evsel, "prev_prio", 4, true)) | 
					
						
							|  |  |  | 		ret = -1; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-12 16:29:06 +02:00
										 |  |  | 	if (perf_evsel__test_field(evsel, "prev_state", sizeof(long), true)) | 
					
						
							| 
									
										
										
										
											2012-11-10 01:46:48 +01:00
										 |  |  | 		ret = -1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (perf_evsel__test_field(evsel, "next_comm", 16, true)) | 
					
						
							|  |  |  | 		ret = -1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (perf_evsel__test_field(evsel, "next_pid", 4, true)) | 
					
						
							|  |  |  | 		ret = -1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (perf_evsel__test_field(evsel, "next_prio", 4, true)) | 
					
						
							|  |  |  | 		ret = -1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	perf_evsel__delete(evsel); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-07 16:41:19 -03:00
										 |  |  | 	evsel = perf_evsel__newtp("sched", "sched_wakeup"); | 
					
						
							| 
									
										
										
										
											2012-11-10 01:46:48 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if (perf_evsel__test_field(evsel, "comm", 16, true)) | 
					
						
							|  |  |  | 		ret = -1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (perf_evsel__test_field(evsel, "pid", 4, true)) | 
					
						
							|  |  |  | 		ret = -1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (perf_evsel__test_field(evsel, "prio", 4, true)) | 
					
						
							|  |  |  | 		ret = -1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (perf_evsel__test_field(evsel, "target_cpu", 4, true)) | 
					
						
							|  |  |  | 		ret = -1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return ret; | 
					
						
							|  |  |  | } |