From 02c39fbdaa29d62a8e7b8d223f62ccd08d4782ee Mon Sep 17 00:00:00 2001
From: Carl Worth <cworth@cworth.org>
Date: Thu, 27 Jun 2013 13:23:55 -0700
Subject: [PATCH] fips: Add a -v/--verbose flag.

The only real purpose imagined for this for now is to be able to
verify that fips is actually doing something, (for example, if a
program renders less than 60 frames and exits then previous fips would
exit silently).

The --verbose flag will be useful with the upcoming test suite and its
short-lived programs.
---
 fips.c    |  7 ++++++-
 metrics.c | 19 +++++++++++++++++--
 2 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/fips.c b/fips.c
index fca2da8..5aeb8c3 100644
--- a/fips.c
+++ b/fips.c
@@ -35,6 +35,7 @@ usage (void)
 	       "\n"
 	       "Options:\n"
 	       "	-h, --help	show this help message\n"
+	       "	-v, --verbose	print verbose messages about fips activity"
 	       "\n");
 }
 
@@ -53,9 +54,10 @@ main (int argc, char *argv[])
 	 * "glxgears -fullscreen" rather than trying to interpret
 	 * -fullscreen as options to fips itself.
 	 */
-	const char *short_options = "+h";
+	const char *short_options = "+hv";
 	const struct option long_options[] = {
 		{"help", no_argument, 0, 'h'},
+		{"verbose", no_argument, 0, 'v'},
 		{0, 0, 0, 0}
 	};
 
@@ -69,6 +71,9 @@ main (int argc, char *argv[])
 		case 'h':
 			usage ();
 			return 0;
+		case 'v':
+			setenv ("FIPS_VERBOSE", "1", 1);
+			break;
 		case '?':
 			break;
 		default:
diff --git a/metrics.c b/metrics.c
index 84fc23f..39ed5ba 100644
--- a/metrics.c
+++ b/metrics.c
@@ -57,6 +57,9 @@ typedef struct context
 
 context_t current_context;
 
+int frames;
+int verbose;
+
 unsigned
 metrics_counter_new (void)
 {
@@ -137,19 +140,31 @@ print_program_metrics (void)
 	}
 }
 
+/* Called at program exit */
+static void
+metrics_exit (void)
+{
+	if (verbose)
+		printf ("fips: terminating\n");
+}
+
+
 void
 metrics_end_frame (void)
 {
 	static int initialized = 0;
-	static int frames;
 	static struct timeval tv_start, tv_now;
 
 	if (! initialized) {
-		frames = 0;
 		gettimeofday (&tv_start, NULL);
+		atexit (metrics_exit);
+		if (getenv ("FIPS_VERBOSE"))
+			verbose = 1;
 		initialized = 1;
 	}
 
+	if (verbose)
+		printf ("fips: frame %d complete\n", frames);
 
 	frames++;
 	gettimeofday (&tv_now, NULL);
-- 
2.45.2