mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-08 08:30:10 +01:00
vc4: Add labels to BOs for debug builds or with VC4_DEBUG=surf set.
This has proven to be incredibly useful for debugging CMA allocation failures and driving memory management improvements. However, we don't want to burden entry and exit from the BO cache with the labeling ioctl's overhead on release builds.
This commit is contained in:
parent
673dda8330
commit
a8fd58eae5
4 changed files with 41 additions and 0 deletions
|
|
@ -48,6 +48,32 @@ static bool dump_stats = false;
|
|||
static void
|
||||
vc4_bo_cache_free_all(struct vc4_bo_cache *cache);
|
||||
|
||||
void
|
||||
vc4_bo_label(struct vc4_screen *screen, struct vc4_bo *bo, const char *fmt, ...)
|
||||
{
|
||||
/* Perform BO labeling by default on debug builds (so that you get
|
||||
* whole-system allocation information), or if VC4_DEBUG=surf is set
|
||||
* (for debugging a single app's allocation).
|
||||
*/
|
||||
#ifndef DEBUG
|
||||
if (!(VC4_DEBUG & VC4_DEBUG_SURFACE))
|
||||
return;
|
||||
#endif
|
||||
va_list va;
|
||||
va_start(va, fmt);
|
||||
char *name = ralloc_vasprintf(NULL, fmt, va);
|
||||
va_end(va);
|
||||
|
||||
struct drm_vc4_label_bo label = {
|
||||
.handle = bo->handle,
|
||||
.len = strlen(name),
|
||||
.name = (uintptr_t)name,
|
||||
};
|
||||
drmIoctl(screen->fd, DRM_IOCTL_VC4_LABEL_BO, &label);
|
||||
|
||||
ralloc_free(name);
|
||||
}
|
||||
|
||||
static void
|
||||
vc4_bo_dump_stats(struct vc4_screen *screen)
|
||||
{
|
||||
|
|
@ -114,6 +140,7 @@ vc4_bo_from_cache(struct vc4_screen *screen, uint32_t size, const char *name)
|
|||
pipe_reference_init(&bo->reference, 1);
|
||||
vc4_bo_remove_from_cache(cache, bo);
|
||||
|
||||
vc4_bo_label(screen, bo, "%s", name);
|
||||
bo->name = name;
|
||||
}
|
||||
mtx_unlock(&cache->lock);
|
||||
|
|
@ -176,6 +203,8 @@ vc4_bo_alloc(struct vc4_screen *screen, uint32_t size, const char *name)
|
|||
vc4_bo_dump_stats(screen);
|
||||
}
|
||||
|
||||
vc4_bo_label(screen, bo, "%s", name);
|
||||
|
||||
return bo;
|
||||
}
|
||||
|
||||
|
|
@ -307,6 +336,7 @@ vc4_bo_last_unreference_locked_timed(struct vc4_bo *bo, time_t time)
|
|||
vc4_bo_dump_stats(screen);
|
||||
}
|
||||
bo->name = NULL;
|
||||
vc4_bo_label(screen, bo, "mesa cache");
|
||||
|
||||
free_stale_bos(screen, time);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -131,6 +131,9 @@ bool
|
|||
vc4_wait_seqno(struct vc4_screen *screen, uint64_t seqno, uint64_t timeout_ns,
|
||||
const char *reason);
|
||||
|
||||
void
|
||||
vc4_bo_label(struct vc4_screen *screen, struct vc4_bo *bo, const char *fmt, ...);
|
||||
|
||||
void
|
||||
vc4_bufmgr_destroy(struct pipe_screen *pscreen);
|
||||
|
||||
|
|
|
|||
|
|
@ -675,6 +675,11 @@ vc4_resource_create_with_modifiers(struct pipe_screen *pscreen,
|
|||
goto fail;
|
||||
}
|
||||
|
||||
vc4_bo_label(screen, rsc->bo, "%sresource %dx%d@%d/%d",
|
||||
(tmpl->bind & PIPE_BIND_SCANOUT) ? "scanout " : "",
|
||||
tmpl->width0, tmpl->height0,
|
||||
rsc->cpp * 8, prsc->last_level);
|
||||
|
||||
return prsc;
|
||||
fail:
|
||||
vc4_resource_destroy(pscreen, prsc);
|
||||
|
|
|
|||
|
|
@ -587,6 +587,9 @@ vc4_create_sampler_view(struct pipe_context *pctx, struct pipe_resource *prsc,
|
|||
return NULL;
|
||||
}
|
||||
rsc = vc4_resource(prsc);
|
||||
vc4_bo_label(vc4_screen(pctx->screen), rsc->bo,
|
||||
"tiling shadow %dx%d",
|
||||
tmpl.width0, tmpl.height0);
|
||||
|
||||
/* Flag it as needing update of the contents from the parent. */
|
||||
rsc->writes = shadow_parent->writes - 1;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue