summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Gore <tim.gore@intel.com>2014-11-28 14:46:24 +0000
committerDamien Lespiau <damien.lespiau@intel.com>2014-11-28 16:02:04 +0000
commitddf0f097764da6fdc50ab40c33bef7a0c08d54e3 (patch)
tree1e45c947991cdbe80fd8eea87b8e2d248c801f4a
parentdbac905600c37f180618e6b4467cafbb6c3f8f2a (diff)
tests/gem_ring_sync_copy: reduce memory usage
gem_ring_sync_copy uses a lot of memory and gets OOM killed on smaller systems (eg android devices). Most of the allocation is for "busy work" to keep the render rings busy and for this we can just re-use the same few buffers over and over. This enables the test to be run on low end devices. Reviewed-by: Damien Lespiau <damien.lespiau@intel.com> Signed-off-by: Tim Gore <tim.gore@intel.com> Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
-rw-r--r--tests/gem_ring_sync_copy.c25
1 files changed, 15 insertions, 10 deletions
diff --git a/tests/gem_ring_sync_copy.c b/tests/gem_ring_sync_copy.c
index 4a732d22..72571887 100644
--- a/tests/gem_ring_sync_copy.c
+++ b/tests/gem_ring_sync_copy.c
@@ -57,6 +57,7 @@
#define WIDTH 512
#define HEIGHT 512
+#define NUM_BUSY_BUFFERS 32
typedef struct {
int drm_fd;
@@ -163,11 +164,13 @@ static void render_busy(data_t *data)
size_t array_size;
int i;
- array_size = data->n_buffers_load * sizeof(struct igt_buf);
+ /* allocate 32 buffer objects and re-use them as needed */
+ array_size = NUM_BUSY_BUFFERS * sizeof(struct igt_buf);
+
data->render.srcs = malloc(array_size);
data->render.dsts = malloc(array_size);
- for (i = 0; i < data->n_buffers_load; i++) {
+ for (i = 0; i < NUM_BUSY_BUFFERS; i++) {
scratch_buf_init(data, &data->render.srcs[i], WIDTH, HEIGHT,
0xdeadbeef);
scratch_buf_init(data, &data->render.dsts[i], WIDTH, HEIGHT,
@@ -177,10 +180,10 @@ static void render_busy(data_t *data)
for (i = 0; i < data->n_buffers_load; i++) {
data->render.copy(data->batch,
NULL, /* context */
- &data->render.srcs[i],
+ &data->render.srcs[i % NUM_BUSY_BUFFERS],
0, 0, /* src_x, src_y */
WIDTH, HEIGHT,
- &data->render.dsts[i],
+ &data->render.dsts[i % NUM_BUSY_BUFFERS],
0, 0 /* dst_x, dst_y */);
}
}
@@ -189,7 +192,7 @@ static void render_busy_fini(data_t *data)
{
int i;
- for (i = 0; i < data->n_buffers_load; i++) {
+ for (i = 0; i < NUM_BUSY_BUFFERS; i++) {
drm_intel_bo_unreference(data->render.srcs[i].bo);
drm_intel_bo_unreference(data->render.dsts[i].bo);
}
@@ -225,11 +228,13 @@ static void blitter_busy(data_t *data)
size_t array_size;
int i;
- array_size = data->n_buffers_load * sizeof(drm_intel_bo *);
+ /* allocate 32 buffer objects and re-use them as needed */
+ array_size = NUM_BUSY_BUFFERS * sizeof(drm_intel_bo *);
+
data->blitter.srcs = malloc(array_size);
data->blitter.dsts = malloc(array_size);
- for (i = 0; i < data->n_buffers_load; i++) {
+ for (i = 0; i < NUM_BUSY_BUFFERS; i++) {
data->blitter.srcs[i] = bo_create(data,
WIDTH, HEIGHT,
0xdeadbeef);
@@ -240,8 +245,8 @@ static void blitter_busy(data_t *data)
for (i = 0; i < data->n_buffers_load; i++) {
intel_copy_bo(data->batch,
- data->blitter.srcs[i],
- data->blitter.dsts[i],
+ data->blitter.srcs[i % NUM_BUSY_BUFFERS],
+ data->blitter.dsts[i % NUM_BUSY_BUFFERS],
WIDTH*HEIGHT*4);
}
}
@@ -250,7 +255,7 @@ static void blitter_busy_fini(data_t *data)
{
int i;
- for (i = 0; i < data->n_buffers_load; i++) {
+ for (i = 0; i < NUM_BUSY_BUFFERS; i++) {
drm_intel_bo_unreference(data->blitter.srcs[i]);
drm_intel_bo_unreference(data->blitter.dsts[i]);
}