summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTazyFoundSoup <gardendistrict0x0@outlook.com>2026-05-05 20:01:04 +1000
committerTazyFoundSoup <gardendistrict0x0@outlook.com>2026-05-05 20:01:04 +1000
commit170921f8c21b498ed9a497c52931e72e791f2fd9 (patch)
tree1c7e681a5b4bd1dea65de388931d4ac1ed9d9de8
parentdf61c616e7e639d5782599c65de44464c2c50367 (diff)
feat(png): add benchmark markers to png decoding
-rw-r--r--bench/bench.h17
-rw-r--r--bench/src/format/image/png.c6
-rw-r--r--src/format/image/png.c14
3 files changed, 24 insertions, 13 deletions
diff --git a/bench/bench.h b/bench/bench.h
index 9496df9..fc226d9 100644
--- a/bench/bench.h
+++ b/bench/bench.h
@@ -24,18 +24,15 @@ typedef struct {
// These need to be inline so they are fast
-static inline ff_bench ff_bench_start(const char* label) {
- ff_bench b;
- b.label = label;
- b._start = clock();
- b._end = 0;
-
- // Markers
- b._mcount = 0;
-
- return b;
+static inline void ff_bench_start(ff_bench *b, const char* label) {
+ b->label = label;
+ b->_start = clock();
+ b->_end = 0;
+ b->_mcount = 0;
+
}
+
static inline void ff_bench_end(ff_bench *b) {
b->_end = clock();
}
diff --git a/bench/src/format/image/png.c b/bench/src/format/image/png.c
new file mode 100644
index 0000000..016f686
--- /dev/null
+++ b/bench/src/format/image/png.c
@@ -0,0 +1,6 @@
+#include "bench.h"
+
+int main(void)
+{
+
+}
diff --git a/src/format/image/png.c b/src/format/image/png.c
index 43cab04..e8aefcb 100644
--- a/src/format/image/png.c
+++ b/src/format/image/png.c
@@ -47,8 +47,10 @@ static ff_result ff_png_dispatch(ff_ctx* ctx, ff_stream* stream, ff_png_ctx *png
for (int i = 0; ff_png_chunk_handlers[i].type != NULL; i++) {
if (ff_memcmp(chunk_type, ff_png_chunk_handlers[i].type, 4) == 0) {
- if (ff_png_chunk_handlers[i].handler != NULL)
+ if (ff_png_chunk_handlers[i].handler != NULL) {
+ FF_BENCH_MARK(ctx, ff_png_chunk_handlers[i].type);
ff_png_chunk_handlers[i].handler(ctx, chunk_data, length, png_ctx);
+ }
break;
}
}
@@ -81,7 +83,9 @@ static ff_result ff_png_dispatch(ff_ctx* ctx, ff_stream* stream, ff_png_ctx *png
}
ff_result ff_png_isvalid(ff_ctx* ctx, ff_stream *stream)
-{
+{
+ FF_BENCH_MARK(ctx, "ff_png_isvalid");
+
ff_dprintf(ctx, "png: validating signature\n");
char raw_sig[8];
@@ -106,7 +110,9 @@ ff_result ff_png_isvalid(ff_ctx* ctx, ff_stream *stream)
}
ff_result ff_open_png(ff_ctx* ctx, ff_stream *stream, ff_png_ctx **out_ctx, ff_flag require_valid)
-{
+{
+ FF_BENCH_START(ctx, "png");
+ FF_BENCH_MARK(ctx, "ff_open_png");
ff_png_ctx *png_ctx = ctx->allocator.ff_alloc(sizeof(ff_png_ctx));
if (!png_ctx) {
@@ -470,6 +476,8 @@ ff_result ff_close_png(ff_ctx* ctx, ff_png_ctx *png_ctx)
ctx->allocator.ff_free(png_ctx);
ff_dprintf(ctx, "png: successfully freed png context\n");
+ FF_BENCH_END(ctx);
+
return FF_RESULT_OK;
}