[Mesa-dev] [PATCH v2 25/26] radeonsi: record and dump time of flush

Nicolai Hähnle nhaehnle at gmail.com
Mon Nov 6 10:23:56 UTC 2017


From: Nicolai Hähnle <nicolai.haehnle at amd.com>

Reviewed-by: Marek Olšák <marek.olsak at amd.com>
---
 src/gallium/drivers/radeonsi/si_debug.c      | 5 ++++-
 src/gallium/drivers/radeonsi/si_hw_context.c | 3 +++
 src/gallium/drivers/radeonsi/si_pipe.h       | 1 +
 3 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/gallium/drivers/radeonsi/si_debug.c b/src/gallium/drivers/radeonsi/si_debug.c
index 88fa11acda5..447b4ef8e98 100644
--- a/src/gallium/drivers/radeonsi/si_debug.c
+++ b/src/gallium/drivers/radeonsi/si_debug.c
@@ -20,20 +20,21 @@
  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  * USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 
 #include "si_pipe.h"
 #include "si_compute.h"
 #include "sid.h"
 #include "gfx9d.h"
 #include "sid_tables.h"
 #include "ddebug/dd_util.h"
+#include "util/u_dump.h"
 #include "util/u_log.h"
 #include "util/u_memory.h"
 #include "ac_debug.h"
 
 static void si_dump_bo_list(struct si_context *sctx,
 			    const struct radeon_saved_cs *saved, FILE *f);
 
 DEBUG_GET_ONCE_OPTION(replace_shaders, "RADEON_REPLACE_SHADERS", NULL)
 
 static void si_dump_shader(struct si_screen *sscreen,
@@ -366,21 +367,23 @@ static void si_log_chunk_type_cs_print(void *data, FILE *f)
 				    &last_trace_id, map ? 1 : 0, "IB", ctx->b.chip_class,
 				    NULL, NULL);
 		} else {
 			si_parse_current_ib(f, ctx->b.gfx.cs, chunk->gfx_begin,
 					    chunk->gfx_end, &last_trace_id, map ? 1 : 0,
 					    "IB", ctx->b.chip_class);
 		}
 	}
 
 	if (chunk->dump_bo_list) {
-		fprintf(f, "Flushing.\n\n");
+		fprintf(f, "Flushing. Time: ");
+		util_dump_ns(f, scs->time_flush);
+		fprintf(f, "\n\n");
 		si_dump_bo_list(ctx, &scs->gfx, f);
 	}
 }
 
 static const struct u_log_chunk_type si_log_chunk_type_cs = {
 	.destroy = si_log_chunk_type_cs_destroy,
 	.print = si_log_chunk_type_cs_print,
 };
 
 static void si_log_cs(struct si_context *ctx, struct u_log_context *log,
diff --git a/src/gallium/drivers/radeonsi/si_hw_context.c b/src/gallium/drivers/radeonsi/si_hw_context.c
index 0d54b12df9e..15234d72725 100644
--- a/src/gallium/drivers/radeonsi/si_hw_context.c
+++ b/src/gallium/drivers/radeonsi/si_hw_context.c
@@ -17,20 +17,22 @@
  * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
  * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  * USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 
 #include "si_pipe.h"
 #include "radeon/r600_cs.h"
 
+#include "util/os_time.h"
+
 void si_destroy_saved_cs(struct si_saved_cs *scs)
 {
 	si_clear_saved_cs(&scs->gfx);
 	r600_resource_reference(&scs->trace_buf, NULL);
 	free(scs);
 }
 
 /* initialize */
 void si_need_cs_space(struct si_context *ctx)
 {
@@ -113,20 +115,21 @@ void si_context_gfx_flush(void *context, unsigned flags,
 
 	si_emit_cache_flush(ctx);
 
 	if (ctx->current_saved_cs) {
 		si_trace_emit(ctx);
 		si_log_hw_flush(ctx);
 
 		/* Save the IB for debug contexts. */
 		si_save_cs(ws, cs, &ctx->current_saved_cs->gfx, true);
 		ctx->current_saved_cs->flushed = true;
+		ctx->current_saved_cs->time_flush = os_time_get_nano();
 	}
 
 	/* Flush the CS. */
 	ws->cs_flush(cs, flags, &ctx->b.last_gfx_fence);
 	if (fence)
 		ws->fence_reference(fence, ctx->b.last_gfx_fence);
 	ctx->b.num_gfx_cs_flushes++;
 
 	/* Check VM faults if needed. */
 	if (ctx->screen->b.debug_flags & DBG(CHECK_VM)) {
diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h
index fc6197ab886..21f7e33ae03 100644
--- a/src/gallium/drivers/radeonsi/si_pipe.h
+++ b/src/gallium/drivers/radeonsi/si_pipe.h
@@ -337,20 +337,21 @@ struct si_image_handle
 
 struct si_saved_cs {
 	struct pipe_reference	reference;
 	struct si_context	*ctx;
 	struct radeon_saved_cs	gfx;
 	struct r600_resource	*trace_buf;
 	unsigned		trace_id;
 
 	unsigned		gfx_last_dw;
 	bool			flushed;
+	int64_t			time_flush;
 };
 
 struct si_context {
 	struct r600_common_context	b;
 	struct blitter_context		*blitter;
 	void				*custom_dsa_flush;
 	void				*custom_blend_resolve;
 	void				*custom_blend_fmask_decompress;
 	void				*custom_blend_eliminate_fastclear;
 	void				*custom_blend_dcc_decompress;
-- 
2.11.0



More information about the mesa-dev mailing list