mirror of
https://gitlab.freedesktop.org/emersion/libliftoff.git
synced 2024-12-25 21:59:11 +01:00
wip: test/bench: add bench count
This commit is contained in:
parent
ec86735763
commit
218920e2f4
1 changed files with 32 additions and 9 deletions
41
test/bench.c
41
test/bench.c
|
@ -37,7 +37,7 @@ int
|
||||||
main(int argc, char *argv[])
|
main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int opt;
|
int opt;
|
||||||
size_t planes_len, layers_len;
|
size_t planes_len, layers_len, bench_count, commit_count;
|
||||||
struct timespec start, end;
|
struct timespec start, end;
|
||||||
struct liftoff_mock_plane *mock_planes[MAX_PLANES];
|
struct liftoff_mock_plane *mock_planes[MAX_PLANES];
|
||||||
size_t i, j;
|
size_t i, j;
|
||||||
|
@ -52,7 +52,8 @@ main(int argc, char *argv[])
|
||||||
|
|
||||||
planes_len = 5;
|
planes_len = 5;
|
||||||
layers_len = 10;
|
layers_len = 10;
|
||||||
while ((opt = getopt(argc, argv, "p:l:")) != -1) {
|
bench_count = 1;
|
||||||
|
while ((opt = getopt(argc, argv, "p:l:n:")) != -1) {
|
||||||
switch (opt) {
|
switch (opt) {
|
||||||
case 'p':
|
case 'p':
|
||||||
planes_len = (size_t)atoi(optarg);
|
planes_len = (size_t)atoi(optarg);
|
||||||
|
@ -60,8 +61,11 @@ main(int argc, char *argv[])
|
||||||
case 'l':
|
case 'l':
|
||||||
layers_len = (size_t)atoi(optarg);
|
layers_len = (size_t)atoi(optarg);
|
||||||
break;
|
break;
|
||||||
|
case 'n':
|
||||||
|
bench_count = (size_t)atoi(optarg);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, "usage: %s [-p planes] [-l layers]\n",
|
fprintf(stderr, "usage: %s [-p planes] [-l layers] [-n count]\n",
|
||||||
argv[0]);
|
argv[0]);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
@ -105,23 +109,42 @@ main(int argc, char *argv[])
|
||||||
clock_gettime(CLOCK_MONOTONIC, &start);
|
clock_gettime(CLOCK_MONOTONIC, &start);
|
||||||
|
|
||||||
req = drmModeAtomicAlloc();
|
req = drmModeAtomicAlloc();
|
||||||
ret = liftoff_output_apply(output, req, 0, &(struct liftoff_output_apply_options){
|
for (i = 0; i < bench_count; i++) {
|
||||||
.timeout_ns = INT64_MAX,
|
drmModeAtomicSetCursor(req, 0);
|
||||||
});
|
ret = liftoff_output_apply(output, req, 0, &(struct liftoff_output_apply_options){
|
||||||
assert(ret == 0);
|
.timeout_ns = INT64_MAX,
|
||||||
|
});
|
||||||
|
assert(ret == 0);
|
||||||
|
|
||||||
|
for (j = 0; j < layers_len; j++) {
|
||||||
|
#if 0 /* change position without changing intersection */
|
||||||
|
liftoff_layer_set_property(layers[j], "CRTC_X",
|
||||||
|
j * 100 + i);
|
||||||
|
liftoff_layer_set_property(layers[j], "CRTC_Y",
|
||||||
|
j * 100 + i);
|
||||||
|
#else /* change size and intersection */
|
||||||
|
liftoff_layer_set_property(layers[j], "CRTC_W",
|
||||||
|
100 + 50 * (i % 2));
|
||||||
|
liftoff_layer_set_property(layers[j], "CRTC_H",
|
||||||
|
100 + 50 * (i % 2));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
drmModeAtomicFree(req);
|
drmModeAtomicFree(req);
|
||||||
|
|
||||||
clock_gettime(CLOCK_MONOTONIC, &end);
|
clock_gettime(CLOCK_MONOTONIC, &end);
|
||||||
|
|
||||||
dur_ms = ((double)end.tv_sec - (double)start.tv_sec) * 1000 +
|
dur_ms = ((double)end.tv_sec - (double)start.tv_sec) * 1000 +
|
||||||
((double)end.tv_nsec - (double)start.tv_nsec) / 1000000;
|
((double)end.tv_nsec - (double)start.tv_nsec) / 1000000;
|
||||||
|
dur_ms = dur_ms / (double)bench_count;
|
||||||
|
commit_count = liftoff_mock_commit_count / bench_count;
|
||||||
printf("Plane allocation took %fms\n", dur_ms);
|
printf("Plane allocation took %fms\n", dur_ms);
|
||||||
printf("Plane allocation performed %zu atomic test commits\n",
|
printf("Plane allocation performed %zu atomic test commits\n",
|
||||||
liftoff_mock_commit_count);
|
commit_count);
|
||||||
/* TODO: the mock libdrm library takes time to check atomic requests.
|
/* TODO: the mock libdrm library takes time to check atomic requests.
|
||||||
* This benchmark doesn't account for time spent in the mock library. */
|
* This benchmark doesn't account for time spent in the mock library. */
|
||||||
printf("With 20µs per atomic test commit, plane allocation would take "
|
printf("With 20µs per atomic test commit, plane allocation would take "
|
||||||
"%fms\n", dur_ms + liftoff_mock_commit_count * 0.02);
|
"%fms\n", dur_ms + commit_count * 0.02);
|
||||||
|
|
||||||
liftoff_device_destroy(device);
|
liftoff_device_destroy(device);
|
||||||
close(drm_fd);
|
close(drm_fd);
|
||||||
|
|
Loading…
Reference in a new issue