summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers/dri/i965/intel_buffer_objects.c
diff options
context:
space:
mode:
authorKenneth Graunke <kenneth@whitecape.org>2014-01-29 09:09:18 -0800
committerKenneth Graunke <kenneth@whitecape.org>2014-02-03 16:16:26 -0800
commitd613bafe9111a577bed6bb89ef559df40712674c (patch)
treebc44ea510c0413ea5a7177fa0021e85b55178748 /src/mesa/drivers/dri/i965/intel_buffer_objects.c
parent1b886078dbff593ceb23b05b3ce78a3bb3cbcb94 (diff)
downloadexternal_mesa3d-d613bafe9111a577bed6bb89ef559df40712674c.zip
external_mesa3d-d613bafe9111a577bed6bb89ef559df40712674c.tar.gz
external_mesa3d-d613bafe9111a577bed6bb89ef559df40712674c.tar.bz2
i965: Create drm_intel_bo_map wrappers with performance warnings.
Mapping a buffer is a common place where we could stall the CPU. In a few places, we've added special code to check whether a buffer is busy and log the stall as a performance warning. Most of these give no indication of the severity of the stall, though, since measuring the time is a small hassle. This patch introduces a new brw_bo_map() function which wraps drm_intel_bo_map, but additionally measures the time stalled and reports a performance warning. If performance debugging is not enabled, it simply maps the buffer with negligable overhead. We also add a similar wrapper for drm_intel_gem_bo_map_gtt(). This should make it easy to add performance warnings in lots of places. Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Carl Worth <cworth@cworth.org> Reviewed-by: Eric Anholt <eric@anholt.net>
Diffstat (limited to 'src/mesa/drivers/dri/i965/intel_buffer_objects.c')
-rw-r--r--src/mesa/drivers/dri/i965/intel_buffer_objects.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/intel_buffer_objects.c b/src/mesa/drivers/dri/i965/intel_buffer_objects.c
index 4d7044a..a493c3b 100644
--- a/src/mesa/drivers/dri/i965/intel_buffer_objects.c
+++ b/src/mesa/drivers/dri/i965/intel_buffer_objects.c
@@ -41,6 +41,46 @@
#include "intel_buffer_objects.h"
#include "intel_batchbuffer.h"
+/**
+ * Map a buffer object; issue performance warnings if mapping causes stalls.
+ *
+ * This matches the drm_intel_bo_map API, but takes an additional human-readable
+ * name for the buffer object to use in the performance debug message.
+ */
+int
+brw_bo_map(struct brw_context *brw,
+ drm_intel_bo *bo, int write_enable,
+ const char *bo_name)
+{
+ if (likely(!brw->perf_debug) || !drm_intel_bo_busy(bo))
+ return drm_intel_bo_map(bo, write_enable);
+
+ float start_time = get_time();
+
+ int ret = drm_intel_bo_map(bo, write_enable);
+
+ perf_debug("CPU mapping a busy %s BO stalled and took %.03f ms.\n",
+ bo_name, (get_time() - start_time) * 1000);
+
+ return ret;
+}
+
+int
+brw_bo_map_gtt(struct brw_context *brw, drm_intel_bo *bo, const char *bo_name)
+{
+ if (likely(!brw->perf_debug) || !drm_intel_bo_busy(bo))
+ return drm_intel_gem_bo_map_gtt(bo);
+
+ float start_time = get_time();
+
+ int ret = drm_intel_gem_bo_map_gtt(bo);
+
+ perf_debug("GTT mapping a busy %s BO stalled and took %.03f ms.\n",
+ bo_name, (get_time() - start_time) * 1000);
+
+ return ret;
+}
+
static GLboolean
intel_bufferobj_unmap(struct gl_context * ctx, struct gl_buffer_object *obj);