[Mesa-dev] [PATCH 2/4] radeon: Add bo statistics dumping support
Erik Faye-Lund
kusmabite at gmail.com
Fri Jan 3 08:37:15 PST 2014
On Fri, Jan 3, 2014 at 4:49 PM, Lauri Kasanen <cand at gmx.com> wrote:
> No measurable overhead when off (glxgears within 0.5%).
>
> Signed-off-by: Lauri Kasanen <cand at gmx.com>
> ---
> src/gallium/drivers/radeon/r600_pipe_common.c | 32 +++++++++++++++++++++++++++
> src/gallium/drivers/radeon/r600_pipe_common.h | 1 +
> src/gallium/winsys/radeon/drm/radeon_drm_bo.c | 17 ++++++++++++++
> src/gallium/winsys/radeon/drm/radeon_drm_cs.c | 9 ++++++++
> src/gallium/winsys/radeon/drm/radeon_winsys.h | 6 +++++
> 5 files changed, 65 insertions(+)
>
> diff --git a/src/gallium/drivers/radeon/r600_pipe_common.c b/src/gallium/drivers/radeon/r600_pipe_common.c
> index 28921be..121aa49 100644
> --- a/src/gallium/drivers/radeon/r600_pipe_common.c
> +++ b/src/gallium/drivers/radeon/r600_pipe_common.c
> @@ -26,11 +26,18 @@
>
> #include "r600_pipe_common.h"
> #include "r600_cs.h"
> +#include "../../winsys/radeon/drm/radeon_drm_winsys.h"
> +#include "os/os_time.h"
> #include "tgsi/tgsi_parse.h"
> #include "util/u_format_s3tc.h"
> #include "util/u_upload_mgr.h"
> #include <inttypes.h>
>
> +#ifdef __GLIBC__
> +#define _GNU_SOURCE
> +#include <errno.h>
> +#endif
> +
> static const struct debug_named_value common_debug_options[] = {
> /* logging */
> { "tex", DBG_TEX, "Print texture info" },
> @@ -38,6 +45,7 @@ static const struct debug_named_value common_debug_options[] = {
> { "compute", DBG_COMPUTE, "Print compute info" },
> { "vm", DBG_VM, "Print virtual addresses when creating resources" },
> { "trace_cs", DBG_TRACE_CS, "Trace cs and write rlockup_<csid>.c file with faulty cs" },
> + { "bostats", DBG_BO_STATS, "Write bo statistics to /tmp/bostats.<pid>[.name]" },
>
> /* shaders */
> { "fs", DBG_FS, "Print fetch shaders" },
> @@ -209,6 +217,24 @@ bool r600_common_screen_init(struct r600_common_screen *rscreen,
> return false;
> }
>
> + if (rscreen->debug_flags & DBG_BO_STATS) {
> + char statsfile[80];
> + const pid_t pid = getpid();
> +
> +#ifdef __GLIBC__
> + snprintf(statsfile, 80, "/tmp/bostats.%u.%s", pid, program_invocation_short_name);
> +#else
> + snprintf(statsfile, 80, "/tmp/bostats.%u", pid);
> +#endif
> +
> + rscreen->ws->bo_stats_file = fopen(statsfile, "w");
> + if (!rscreen->ws->bo_stats_file)
> + fprintf(stderr, "Failed to open bo stats file %s\n", statsfile);
> + else
> + fprintf(rscreen->ws->bo_stats_file, "Started at %llu\n",
> + stats_time_get(ws));
Another nit: the other stats seems to use "@%llu" instead of "at %llu".
But looking a bit more about this, since all code-sites for
stat_time_get() seems to be variations of:
if (ws->bo_stats_file) {
fprintf(..., stats_time_get(ws));
}
...perhaps stats_time_get is a too low-level abstraction? I'm not
saying it is, just asking :)
More information about the mesa-dev
mailing list