socsvn commit: r239192 - in soc2012/gmiller/locking-head: . tools/regression/lib/libthr/lockprof

gmiller at FreeBSD.org gmiller at FreeBSD.org
Mon Jul 9 18:57:54 UTC 2012


Author: gmiller
Date: Mon Jul  9 18:57:52 2012
New Revision: 239192
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=239192

Log:
   r239205 at FreeBSD-dev:  root | 2012-07-03 10:49:44 -0500
   Add test for pthread_resetstatistics_np() and multithreaded tests for
   lock/unlock cycles.

Modified:
  soc2012/gmiller/locking-head/   (props changed)
  soc2012/gmiller/locking-head/tools/regression/lib/libthr/lockprof/lock-cycle.c

Modified: soc2012/gmiller/locking-head/tools/regression/lib/libthr/lockprof/lock-cycle.c
==============================================================================
--- soc2012/gmiller/locking-head/tools/regression/lib/libthr/lockprof/lock-cycle.c	Mon Jul  9 17:34:03 2012	(r239191)
+++ soc2012/gmiller/locking-head/tools/regression/lib/libthr/lockprof/lock-cycle.c	Mon Jul  9 18:57:52 2012	(r239192)
@@ -46,6 +46,12 @@
 	pthread_join(thread2, NULL);
 }
 
+void
+reset_stats()
+{
+	pthread_resetstatistics_np();
+}
+
 #define	MAX_TESTS	(100)
 
 int success_count = 0;
@@ -121,6 +127,50 @@
 void
 check_stats_multi(void)
 {
+	int		record_count = 0;
+	struct pthread_statistics_np stats;
+	long		tm;
+
+	pthread_getstatistics_begin_np(&stats);
+	while (pthread_getstatistics_next_np(&stats)) {
+		record_count++;
+	}
+	pthread_getstatistics_end_np(&stats);
+
+	check(record_count == 1);
+
+	pthread_getstatistics_begin_np(&stats);
+	pthread_getstatistics_next_np(&stats);
+	pthread_getstatistics_end_np(&stats);
+
+	check(strcmp(stats.file, "lock-cycle.c") == 0);
+	check(stats.line == 16);
+
+	tm = stats.hold_max.tv_sec * 1000000L + stats.hold_max.tv_nsec / 1000;
+	check(tm >= 30);
+
+	tm = stats.hold_time.tv_sec * 1000000L +
+	    stats.hold_time.tv_nsec / 1000;
+	check(tm >= 30000);
+
+	printf("count = %d\n", stats.acq_count);
+
+	check(stats.acq_count == 3000);
+}
+
+void
+check_stats_reset(void)
+{
+	int		record_count = 0;
+	struct pthread_statistics_np stats;
+
+	pthread_getstatistics_begin_np(&stats);
+	while (pthread_getstatistics_next_np(&stats)) {
+		record_count++;
+	}
+	pthread_getstatistics_end_np(&stats);
+
+	check(record_count == 0);
 }
 
 int
@@ -129,6 +179,9 @@
 	lock_cycle();
 	check_stats_single();
 
+	reset_stats();
+	check_stats_reset();
+
 	multi_cycle();
 	check_stats_multi();
 


More information about the svn-soc-all mailing list