intel/perf: print debug information
INTEL_DEBUG=perfmon will iterate over the perf queries, printing information about the state of each query. Some of this information will be private to intel/perf, and needs to a dump routine that can be called from i965. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
@@ -2266,3 +2266,33 @@ gen_perf_get_query_data(struct gen_perf_context *perf_ctx,
|
|||||||
if (bytes_written)
|
if (bytes_written)
|
||||||
*bytes_written = written;
|
*bytes_written = written;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gen_perf_dump_query_count(struct gen_perf_context *perf_ctx)
|
||||||
|
{
|
||||||
|
DBG("Queries: (Open queries = %d, OA users = %d)\n",
|
||||||
|
perf_ctx->n_active_oa_queries, perf_ctx->n_oa_users);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gen_perf_dump_query(struct gen_perf_context *ctx,
|
||||||
|
struct gen_perf_query_object *obj,
|
||||||
|
void *current_batch)
|
||||||
|
{
|
||||||
|
switch (obj->queryinfo->kind) {
|
||||||
|
case GEN_PERF_QUERY_TYPE_OA:
|
||||||
|
case GEN_PERF_QUERY_TYPE_RAW:
|
||||||
|
DBG("BO: %-4s OA data: %-10s %-15s\n",
|
||||||
|
obj->oa.bo ? "yes," : "no,",
|
||||||
|
gen_perf_is_query_ready(ctx, obj, current_batch) ? "ready," : "not ready,",
|
||||||
|
obj->oa.results_accumulated ? "accumulated" : "not accumulated");
|
||||||
|
break;
|
||||||
|
case GEN_PERF_QUERY_TYPE_PIPELINE:
|
||||||
|
DBG("BO: %-4s\n",
|
||||||
|
obj->pipeline_stats.bo ? "yes" : "no");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
unreachable("Unknown query type");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -445,4 +445,9 @@ void gen_perf_get_query_data(struct gen_perf_context *perf_ctx,
|
|||||||
unsigned *data,
|
unsigned *data,
|
||||||
unsigned *bytes_written);
|
unsigned *bytes_written);
|
||||||
|
|
||||||
|
void gen_perf_dump_query_count(struct gen_perf_context *perf_ctx);
|
||||||
|
void gen_perf_dump_query(struct gen_perf_context *perf_ctx,
|
||||||
|
struct gen_perf_query_object *obj,
|
||||||
|
void *current_batch);
|
||||||
|
|
||||||
#endif /* GEN_PERF_H */
|
#endif /* GEN_PERF_H */
|
||||||
|
@@ -111,41 +111,24 @@ brw_is_perf_query_ready(struct gl_context *ctx,
|
|||||||
static void
|
static void
|
||||||
dump_perf_query_callback(GLuint id, void *query_void, void *brw_void)
|
dump_perf_query_callback(GLuint id, void *query_void, void *brw_void)
|
||||||
{
|
{
|
||||||
struct gl_context *ctx = brw_void;
|
struct brw_context *ctx = brw_void;
|
||||||
|
struct gen_perf_context *perf_ctx = &ctx->perf_ctx;
|
||||||
struct gl_perf_query_object *o = query_void;
|
struct gl_perf_query_object *o = query_void;
|
||||||
struct brw_perf_query_object * brw_query = brw_perf_query(o);
|
struct brw_perf_query_object * brw_query = brw_perf_query(o);
|
||||||
struct gen_perf_query_object *obj = brw_query->query;
|
struct gen_perf_query_object *obj = brw_query->query;
|
||||||
|
|
||||||
switch (obj->queryinfo->kind) {
|
DBG("%4d: %-6s %-8s ",
|
||||||
case GEN_PERF_QUERY_TYPE_OA:
|
id,
|
||||||
case GEN_PERF_QUERY_TYPE_RAW:
|
o->Used ? "Dirty," : "New,",
|
||||||
DBG("%4d: %-6s %-8s BO: %-4s OA data: %-10s %-15s\n",
|
o->Active ? "Active," : (o->Ready ? "Ready," : "Pending,"));
|
||||||
id,
|
gen_perf_dump_query(perf_ctx, obj, &ctx->batch);
|
||||||
o->Used ? "Dirty," : "New,",
|
|
||||||
o->Active ? "Active," : (o->Ready ? "Ready," : "Pending,"),
|
|
||||||
obj->oa.bo ? "yes," : "no,",
|
|
||||||
brw_is_perf_query_ready(ctx, o) ? "ready," : "not ready,",
|
|
||||||
obj->oa.results_accumulated ? "accumulated" : "not accumulated");
|
|
||||||
break;
|
|
||||||
case GEN_PERF_QUERY_TYPE_PIPELINE:
|
|
||||||
DBG("%4d: %-6s %-8s BO: %-4s\n",
|
|
||||||
id,
|
|
||||||
o->Used ? "Dirty," : "New,",
|
|
||||||
o->Active ? "Active," : (o->Ready ? "Ready," : "Pending,"),
|
|
||||||
obj->pipeline_stats.bo ? "yes" : "no");
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
unreachable("Unknown query type");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
dump_perf_queries(struct brw_context *brw)
|
dump_perf_queries(struct brw_context *brw)
|
||||||
{
|
{
|
||||||
struct gl_context *ctx = &brw->ctx;
|
struct gl_context *ctx = &brw->ctx;
|
||||||
DBG("Queries: (Open queries = %d, OA users = %d)\n",
|
gen_perf_dump_query_count(&brw->perf_ctx);
|
||||||
brw->perf_ctx.n_active_oa_queries, brw->perf_ctx.n_oa_users);
|
|
||||||
_mesa_HashWalk(ctx->PerfQuery.Objects, dump_perf_query_callback, brw);
|
_mesa_HashWalk(ctx->PerfQuery.Objects, dump_perf_query_callback, brw);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user