These will be used later on for optimizing the VRAM placement. Currently some glxgears overhead (~7% less), real apps yet to be benched.
Signed-off-by: Lauri Kasanen <c...@gmx.com> --- src/gallium/winsys/radeon/drm/radeon_drm_bo.c | 3 +++ src/gallium/winsys/radeon/drm/radeon_drm_bo.h | 16 ++++++++++++++++ src/gallium/winsys/radeon/drm/radeon_drm_cs.c | 8 ++++++++ 3 files changed, 27 insertions(+) diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c index e94af60..61d489c 100644 --- a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c +++ b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c @@ -529,6 +529,9 @@ static void *radeon_bo_map(struct radeon_winsys_cs_handle *buf, fprintf(ws->bo_stats_file, "%p cpu mapped @%llu\n", bo, stats_time_get()); } + bo->stats.num_cpu_ops++; + bo->stats.last_cpu_time = stats_time_get(); + return radeon_bo_do_map(bo); } diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_bo.h b/src/gallium/winsys/radeon/drm/radeon_drm_bo.h index 0f7e1f0..a18e5fb 100644 --- a/src/gallium/winsys/radeon/drm/radeon_drm_bo.h +++ b/src/gallium/winsys/radeon/drm/radeon_drm_bo.h @@ -45,6 +45,20 @@ struct radeon_bo_desc { unsigned initial_domains; }; +struct radeon_bo_stats { + uint64_t num_reads; + uint64_t num_writes; + uint64_t num_cpu_ops; + + /* Milliseconds in a monotonic clock */ + uint64_t last_read_time; + uint64_t last_write_time; + uint64_t last_cpu_time; + + /* Depth, MSAA, etc. */ + bool high_prio; +}; + struct radeon_bo { struct pb_buffer base; @@ -68,6 +82,8 @@ struct radeon_bo { boolean flinked; uint32_t flink; + + struct radeon_bo_stats stats; }; struct pb_manager *radeon_bomgr_create(struct radeon_drm_winsys *rws); diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_cs.c b/src/gallium/winsys/radeon/drm/radeon_drm_cs.c index f3d9b1f..407d8bd 100644 --- a/src/gallium/winsys/radeon/drm/radeon_drm_cs.c +++ b/src/gallium/winsys/radeon/drm/radeon_drm_cs.c @@ -361,6 +361,14 @@ static unsigned radeon_drm_cs_add_reloc(struct radeon_winsys_cs *rcs, } } + if (usage & RADEON_USAGE_WRITE) { + bo->stats.num_writes++; + bo->stats.last_write_time = stats_time_get(); + } else { + bo->stats.num_reads++; + bo->stats.last_read_time = stats_time_get(); + } + return index; } -- 1.8.3.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev