aboutsummaryrefslogtreecommitdiff
path: root/src/buffers.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/buffers.c')
-rw-r--r--src/buffers.c129
1 files changed, 78 insertions, 51 deletions
diff --git a/src/buffers.c b/src/buffers.c
index a932712..1e42bfc 100644
--- a/src/buffers.c
+++ b/src/buffers.c
@@ -719,9 +719,8 @@ int ecex_buffer_set_renderer(buffer_t *buffer,
ecex_buffer_userdata_free_fn free_fn,
int flags) {
if (ecex_trace_callbacks_enabled()) {
- fprintf(stderr, "ecex-log: buffer_set_renderer buffer=%p fn=%p userdata=%p free=%p flags=%d\n",
- (void *)buffer, (void *)fn, userdata, (void *)free_fn, flags);
- fflush(stderr);
+ ecex_logf("buffer_set_renderer buffer=%p fn=%p userdata=%p free=%p flags=%d",
+ (void *)buffer, (void *)fn, userdata, (void *)free_fn, flags);
}
if (!buffer) return ECEX_ERR;
if (buffer->render_userdata_free && buffer->render_userdata && buffer->render_userdata != userdata) {
@@ -736,10 +735,9 @@ int ecex_buffer_set_renderer(buffer_t *buffer,
int ecex_buffer_clear_renderer(buffer_t *buffer) {
if (ecex_trace_callbacks_enabled()) {
- fprintf(stderr, "ecex-log: buffer_clear_renderer buffer=%p userdata=%p free=%p\n",
- (void *)buffer, buffer ? buffer->render_userdata : NULL,
- buffer ? (void *)buffer->render_userdata_free : NULL);
- fflush(stderr);
+ ecex_logf("buffer_clear_renderer buffer=%p userdata=%p free=%p",
+ (void *)buffer, buffer ? buffer->render_userdata : NULL,
+ buffer ? (void *)buffer->render_userdata_free : NULL);
}
if (!buffer) return ECEX_ERR;
if (buffer->render_userdata_free && buffer->render_userdata) {
@@ -766,9 +764,8 @@ int ecex_buffer_set_mouse_handler(buffer_t *buffer,
void *userdata,
ecex_buffer_userdata_free_fn free_fn) {
if (ecex_trace_callbacks_enabled()) {
- fprintf(stderr, "ecex-log: buffer_set_mouse_handler buffer=%p fn=%p userdata=%p free=%p\n",
- (void *)buffer, (void *)fn, userdata, (void *)free_fn);
- fflush(stderr);
+ ecex_logf("buffer_set_mouse_handler buffer=%p fn=%p userdata=%p free=%p",
+ (void *)buffer, (void *)fn, userdata, (void *)free_fn);
}
if (!buffer || !fn) return ECEX_ERR;
if (buffer->mouse_userdata_free && buffer->mouse_userdata && buffer->mouse_userdata != userdata) {
@@ -782,10 +779,9 @@ int ecex_buffer_set_mouse_handler(buffer_t *buffer,
int ecex_buffer_clear_mouse_handler(buffer_t *buffer) {
if (ecex_trace_callbacks_enabled()) {
- fprintf(stderr, "ecex-log: buffer_clear_mouse_handler buffer=%p userdata=%p free=%p\n",
- (void *)buffer, buffer ? buffer->mouse_userdata : NULL,
- buffer ? (void *)buffer->mouse_userdata_free : NULL);
- fflush(stderr);
+ ecex_logf("buffer_clear_mouse_handler buffer=%p userdata=%p free=%p",
+ (void *)buffer, buffer ? buffer->mouse_userdata : NULL,
+ buffer ? (void *)buffer->mouse_userdata_free : NULL);
}
if (!buffer) return ECEX_ERR;
if (buffer->mouse_userdata_free && buffer->mouse_userdata) {
@@ -811,9 +807,8 @@ int ecex_buffer_set_animation(buffer_t *buffer,
ecex_buffer_userdata_free_fn free_fn,
double fps) {
if (ecex_trace_callbacks_enabled()) {
- fprintf(stderr, "ecex-log: buffer_set_animation buffer=%p fn=%p userdata=%p free=%p fps=%.3f\n",
- (void *)buffer, (void *)fn, userdata, (void *)free_fn, fps);
- fflush(stderr);
+ ecex_logf("buffer_set_animation buffer=%p fn=%p userdata=%p free=%p fps=%.3f",
+ (void *)buffer, (void *)fn, userdata, (void *)free_fn, fps);
}
if (!buffer || !fn) return ECEX_ERR;
@@ -841,9 +836,8 @@ int ecex_buffer_set_animation_ms(buffer_t *buffer,
ecex_buffer_userdata_free_fn free_fn,
int fps) {
if (ecex_trace_callbacks_enabled()) {
- fprintf(stderr, "ecex-log: buffer_set_animation_ms buffer=%p fn=%p userdata=%p free=%p fps=%d\n",
- (void *)buffer, (void *)fn, userdata, (void *)free_fn, fps);
- fflush(stderr);
+ ecex_logf("buffer_set_animation_ms buffer=%p fn=%p userdata=%p free=%p fps=%d",
+ (void *)buffer, (void *)fn, userdata, (void *)free_fn, fps);
}
if (!buffer || !fn) return ECEX_ERR;
@@ -867,10 +861,9 @@ int ecex_buffer_set_animation_ms(buffer_t *buffer,
int ecex_buffer_clear_animation(buffer_t *buffer) {
if (ecex_trace_callbacks_enabled()) {
- fprintf(stderr, "ecex-log: buffer_clear_animation buffer=%p userdata=%p free=%p\n",
- (void *)buffer, buffer ? buffer->tick_userdata : NULL,
- buffer ? (void *)buffer->tick_userdata_free : NULL);
- fflush(stderr);
+ ecex_logf("buffer_clear_animation buffer=%p userdata=%p free=%p",
+ (void *)buffer, buffer ? buffer->tick_userdata : NULL,
+ buffer ? (void *)buffer->tick_userdata_free : NULL);
}
if (!buffer) return ECEX_ERR;
if (buffer->tick_userdata_free && buffer->tick_userdata) {
@@ -899,25 +892,37 @@ int ecex_tick_animations(ecex_t *ed, double now_seconds) {
if (!ed) return 0;
int dirty = 0;
+ int frame_group_open = 0;
+ int trace_callbacks = ecex_trace_callbacks_enabled();
for (size_t i = 0; i < ed->buffer_count; i++) {
buffer_t *buffer = ed->buffers[i];
if (!buffer || !buffer->tick_enabled) continue;
if (buffer->tick_uses_ms) {
if (!buffer->tick_ms_fn) {
- if (ecex_trace_callbacks_enabled()) {
- fprintf(stderr, "ecex-log: animation_tick_skip_ms_null buffer=%p userdata=%p\n",
- (void *)buffer, buffer->tick_userdata);
- fflush(stderr);
+ if (trace_callbacks) {
+ if (!frame_group_open) {
+ char frame_msg[128];
+ snprintf(frame_msg, sizeof(frame_msg), "animation frame start now=%.6f", now_seconds);
+ ecex_log_group_begin(frame_msg);
+ frame_group_open = 1;
+ }
+ ecex_logf("animation_tick_skip_ms_null buffer=%p userdata=%p",
+ (void *)buffer, buffer->tick_userdata);
}
buffer->tick_enabled = 0;
continue;
}
} else {
if (!buffer->tick_fn) {
- if (ecex_trace_callbacks_enabled()) {
- fprintf(stderr, "ecex-log: animation_tick_skip_null buffer=%p userdata=%p\n",
- (void *)buffer, buffer->tick_userdata);
- fflush(stderr);
+ if (trace_callbacks) {
+ if (!frame_group_open) {
+ char frame_msg[128];
+ snprintf(frame_msg, sizeof(frame_msg), "animation frame start now=%.6f", now_seconds);
+ ecex_log_group_begin(frame_msg);
+ frame_group_open = 1;
+ }
+ ecex_logf("animation_tick_skip_null buffer=%p userdata=%p",
+ (void *)buffer, buffer->tick_userdata);
}
buffer->tick_enabled = 0;
continue;
@@ -935,30 +940,48 @@ int ecex_tick_animations(ecex_t *ed, double now_seconds) {
buffer->tick_last_time = now_seconds;
int tick_dirty = 0;
+ if (!frame_group_open) {
+ char frame_msg[128];
+ snprintf(frame_msg, sizeof(frame_msg), "animation frame start now=%.6f", now_seconds);
+ ecex_log_group_begin(frame_msg);
+ frame_group_open = 1;
+ }
if (buffer->tick_uses_ms) {
int now_ms = (int)(now_seconds * 1000.0);
- if (ecex_trace_callbacks_enabled()) {
- fprintf(stderr, "ecex-log: animation_tick_ms_enter buffer=%p fn=%p userdata=%p now_ms=%d\n",
- (void *)buffer, (void *)buffer->tick_ms_fn, buffer->tick_userdata, now_ms);
- fflush(stderr);
+ if (trace_callbacks) {
+ char tick_msg[256];
+ snprintf(tick_msg,
+ sizeof(tick_msg),
+ "animation tick ms start buffer=%p fn=%p userdata=%p now_ms=%d",
+ (void *)buffer,
+ (void *)buffer->tick_ms_fn,
+ buffer->tick_userdata,
+ now_ms);
+ ecex_log_group_begin(tick_msg);
}
tick_dirty = buffer->tick_ms_fn(ed, buffer, now_ms, buffer->tick_userdata);
- if (ecex_trace_callbacks_enabled()) {
- fprintf(stderr, "ecex-log: animation_tick_ms_leave buffer=%p result=%d\n",
- (void *)buffer, tick_dirty);
- fflush(stderr);
+ if (trace_callbacks) {
+ char tick_msg[128];
+ snprintf(tick_msg, sizeof(tick_msg), "animation tick ms end buffer=%p result=%d", (void *)buffer, tick_dirty);
+ ecex_log_group_end(tick_msg);
}
} else {
- if (ecex_trace_callbacks_enabled()) {
- fprintf(stderr, "ecex-log: animation_tick_enter buffer=%p fn=%p userdata=%p now=%.6f\n",
- (void *)buffer, (void *)buffer->tick_fn, buffer->tick_userdata, now_seconds);
- fflush(stderr);
+ if (trace_callbacks) {
+ char tick_msg[256];
+ snprintf(tick_msg,
+ sizeof(tick_msg),
+ "animation tick start buffer=%p fn=%p userdata=%p now=%.6f",
+ (void *)buffer,
+ (void *)buffer->tick_fn,
+ buffer->tick_userdata,
+ now_seconds);
+ ecex_log_group_begin(tick_msg);
}
tick_dirty = buffer->tick_fn(ed, buffer, now_seconds, buffer->tick_userdata);
- if (ecex_trace_callbacks_enabled()) {
- fprintf(stderr, "ecex-log: animation_tick_leave buffer=%p result=%d\n",
- (void *)buffer, tick_dirty);
- fflush(stderr);
+ if (trace_callbacks) {
+ char tick_msg[128];
+ snprintf(tick_msg, sizeof(tick_msg), "animation tick end buffer=%p result=%d", (void *)buffer, tick_dirty);
+ ecex_log_group_end(tick_msg);
}
}
if (tick_dirty != 0) {
@@ -966,6 +989,10 @@ int ecex_tick_animations(ecex_t *ed, double now_seconds) {
}
}
+ if (frame_group_open) {
+ ecex_log_group_end(dirty ? "animation frame end dirty=1" : "animation frame end dirty=0");
+ }
+
return dirty;
}
@@ -983,17 +1010,17 @@ int ecex_buffer_text_len(buffer_t *buffer) {
return buffer->len > (size_t)2147483647 ? 2147483647 : (int)buffer->len;
}
-int ecex_buffer_scroll_line(buffer_t *buffer) {
+int ecex_buffer_scroll_line_index(buffer_t *buffer) {
if (!buffer) return 0;
return buffer->scroll_line > (size_t)2147483647 ? 2147483647 : (int)buffer->scroll_line;
}
-int ecex_buffer_line_count_i(buffer_t *buffer) {
+int ecex_buffer_line_count_int(buffer_t *buffer) {
size_t n = buffer_line_count(buffer);
return n > (size_t)2147483647 ? 2147483647 : (int)n;
}
-int ecex_buffer_line_copy(buffer_t *buffer, int line, char *out, int out_cap) {
+int ecex_buffer_line_copy_text(buffer_t *buffer, int line, char *out, int out_cap) {
size_t current = 0;
size_t pos = 0;
size_t start;