image: Add benchmark flag to measure performance of image operations
This commit is contained in:
parent
88b8ca5b29
commit
6a46a25f48
|
@ -1,6 +1,7 @@
|
|||
#include <LibImage/Image.h>
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <inttypes.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/framebuffer.h>
|
||||
|
@ -78,10 +79,13 @@ int main(int argc, char** argv)
|
|||
return usage(argv[0], 1);
|
||||
|
||||
bool scale = false;
|
||||
bool benchmark = false;
|
||||
for (int i = 1; i < argc - 1; i++)
|
||||
{
|
||||
if (strcmp(argv[i], "-s") == 0 || strcmp(argv[i], "--scale") == 0)
|
||||
scale = true;
|
||||
else if (strcmp(argv[i], "-b") == 0 || strcmp(argv[i], "--benchmark") == 0)
|
||||
benchmark = true;
|
||||
else if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0)
|
||||
return usage(argv[0], 0);
|
||||
else
|
||||
|
@ -90,7 +94,11 @@ int main(int argc, char** argv)
|
|||
|
||||
auto image_path = BAN::StringView(argv[argc - 1]);
|
||||
|
||||
timespec load_start, load_end;
|
||||
clock_gettime(CLOCK_MONOTONIC, &load_start);
|
||||
auto image_or_error = LibImage::Image::load_from_file(image_path);
|
||||
clock_gettime(CLOCK_MONOTONIC, &load_end);
|
||||
|
||||
if (image_or_error.is_error())
|
||||
{
|
||||
fprintf(stderr, "Could not load image '%.*s': %s\n",
|
||||
|
@ -101,6 +109,34 @@ int main(int argc, char** argv)
|
|||
return 1;
|
||||
}
|
||||
|
||||
if (benchmark)
|
||||
{
|
||||
const uint64_t start_ms = load_start.tv_sec * 1000 + load_start.tv_nsec / 1'000'000;
|
||||
const uint64_t end_ms = load_end.tv_sec * 1000 + load_end.tv_nsec / 1'000'000;
|
||||
const uint64_t duration_ms = end_ms - start_ms;
|
||||
printf("image load took %" PRIu64 ".%03" PRIu64 " s\n", duration_ms / 1000, duration_ms % 1000);
|
||||
|
||||
if (scale)
|
||||
{
|
||||
timespec scale_start, scale_end;
|
||||
|
||||
clock_gettime(CLOCK_MONOTONIC, &scale_start);
|
||||
auto scaled = MUST(image_or_error.value()->resize(1920, 1080, LibImage::Image::ResizeAlgorithm::Linear));
|
||||
clock_gettime(CLOCK_MONOTONIC, &scale_end);
|
||||
|
||||
const uint64_t start_ms = scale_start.tv_sec * 1000 + scale_start.tv_nsec / 1'000'000;
|
||||
const uint64_t end_ms = scale_end.tv_sec * 1000 + scale_end.tv_nsec / 1'000'000;
|
||||
const uint64_t duration_ms = end_ms - start_ms;
|
||||
printf("image scale (%" PRIu64 "x%" PRIu64 " to %dx%d) took %" PRIu64 ".%03" PRIu64 " s\n",
|
||||
image_or_error.value()->width(), image_or_error.value()->height(),
|
||||
1920, 1080,
|
||||
duration_ms / 1000, duration_ms % 1000
|
||||
);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
render_to_framebuffer(image_or_error.release_value(), scale);
|
||||
|
||||
for (;;)
|
||||
|
|
Loading…
Reference in New Issue