panfrost: Expose perf counters in environment
authorAlyssa Rosenzweig <alyssa@rosenzweig.io>
Mon, 25 Feb 2019 03:31:29 +0000 (03:31 +0000)
committerAlyssa Rosenzweig <alyssa@rosenzweig.io>
Wed, 27 Feb 2019 03:56:38 +0000 (03:56 +0000)
Previously, we were guarded by an #ifdef, which is generally a bad form.
This patch instead guards them behind an environmental variable.

Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
src/gallium/drivers/panfrost/pan_context.c
src/gallium/drivers/panfrost/pan_screen.c
src/gallium/drivers/panfrost/pan_screen.h

index 9c0f0420e2b7ff90f5147a73ffe5c1ea03732746..0676ef0497af4016ae934b0467eaa25889012287 100644 (file)
@@ -43,9 +43,8 @@
 #include "pan_blend_shaders.h"
 #include "pan_wallpaper.h"
 
-#ifdef DUMP_PERFORMANCE_COUNTERS
 static int performance_counter_number = 0;
-#endif
+extern const char *pan_counters_base;
 
 /* Do not actually send anything to the GPU; merely generate the cmdstream as fast as possible. Disables framebuffer writes */
 //#define DRY_RUN
@@ -1586,17 +1585,15 @@ panfrost_submit_frame(struct panfrost_context *ctx, bool flush_immediate)
         if (panfrost_is_scanout(ctx) && flush_immediate)
                 screen->driver->force_flush_fragment(ctx);
 
-#ifdef DUMP_PERFORMANCE_COUNTERS
-        if (screen->driver->dump_counters) {
+        if (screen->driver->dump_counters && pan_counters_base) {
                 screen->driver->dump_counters(screen);
 
                 char filename[128];
-                snprintf(filename, sizeof(filename), "/dev/shm/frame%d.mdgprf", ++performance_counter_number);
+                snprintf(filename, sizeof(filename), "%s/frame%d.mdgprf", pan_counters_base, ++performance_counter_number);
                 FILE *fp = fopen(filename, "wb");
                 fwrite(screen->perf_counters.cpu,  4096, sizeof(uint32_t), fp);
                 fclose(fp);
         }
-#endif
 
 #endif
 }
index f61758d1bb9f18f46f7aa6837e8be39f5668d849..b8a119fd343e84cd2dff15fe1e44c12ae8d71d72 100644 (file)
@@ -53,6 +53,8 @@
 struct panfrost_driver *panfrost_create_drm_driver(int fd);
 struct panfrost_driver *panfrost_create_nondrm_driver(int fd);
 
+const char *pan_counters_base = NULL;
+
 static const char *
 panfrost_get_name(struct pipe_screen *screen)
 {
@@ -551,17 +553,18 @@ panfrost_create_screen(int fd, struct renderonly *ro, bool is_drm)
 #endif
         }
 
-        /* Enable pantrace iff asked for in the environment */
+        /* Dump memory and/or performance counters iff asked for in the environment */
         const char *pantrace_base = getenv("PANTRACE_BASE");
+        pan_counters_base = getenv("PANCOUNTERS_BASE");
 
         if (pantrace_base) {
                 pantrace_initialize(pantrace_base);
         }
 
-#ifdef DUMP_PERFORMANCE_COUNTERS
-        screen->driver->allocate_slab(screen, &screen->perf_counters, 64, true, 0, 0, 0);
-        screen->driver->enable_counters(screen);
-#endif
+        if (pan_counters_base) {
+                screen->driver->allocate_slab(screen, &screen->perf_counters, 64, true, 0, 0, 0);
+                screen->driver->enable_counters(screen);
+        }
 
         screen->base.destroy = panfrost_destroy_screen;
 
index e976b78b5a25fdeb704e120b0ecf39b109d584a8..0005b2feb1566bc217c8c7abcb2b0bc1c1a8bf11 100644 (file)
@@ -41,8 +41,6 @@ struct panfrost_context;
 struct panfrost_resource;
 struct panfrost_screen;
 
-//#define DUMP_PERFORMANCE_COUNTERS
-
 /* Flags for allocated memory */
 #define PAN_ALLOCATE_EXECUTE (1 << 0)
 #define PAN_ALLOCATE_GROWABLE (1 << 1)