[Mesa-dev] [PATCH 3/4] winsys/radeon: Keep bo statistics
Lauri Kasanen
cand at gmx.com
Mon Jan 6 03:17:40 PST 2014
These will be used later on for optimizing the VRAM placement.
No measurable overhead (glxgears).
Signed-off-by: Lauri Kasanen <cand at 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 7543840..9aa1a0f 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(ws));
}
+ bo->stats.num_cpu_ops++;
+ bo->stats.last_cpu_time = stats_time_get(ws);
+
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 5536bc1..651694b 100644
--- a/src/gallium/winsys/radeon/drm/radeon_drm_bo.h
+++ b/src/gallium/winsys/radeon/drm/radeon_drm_bo.h
@@ -44,6 +44,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;
@@ -67,6 +81,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 4d46e85..f78b6cc 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(ws);
+ } else {
+ bo->stats.num_reads++;
+ bo->stats.last_read_time = stats_time_get(ws);
+ }
+
return index;
}
--
1.8.3.1
More information about the mesa-dev
mailing list