This is an automated email from the git hooks/post-receive script.
git pushed a commit to branch master
in repository evisum.
View the commit online.
commit 5ea23273a9b876aa71400043cf4a40138056b321
Author: Alastair Poole <[email protected]>
AuthorDate: Tue Apr 28 22:58:36 2026 +0100
engine: add API to check for available snapshot.
Cheaply check for available data at timestamp.
Indicate to the user a timestamp has no snapshot.
---
src/bin/engine/evisum_engine.c | 23 ++++++++++++++
src/bin/engine/evisum_engine.h | 1 +
src/bin/ui/evisum_ui_process_list.c | 61 ++++++++++++++++++++++++++++---------
3 files changed, 71 insertions(+), 14 deletions(-)
diff --git a/src/bin/engine/evisum_engine.c b/src/bin/engine/evisum_engine.c
index 284a597..8fc3046 100644
--- a/src/bin/engine/evisum_engine.c
+++ b/src/bin/engine/evisum_engine.c
@@ -704,6 +704,29 @@ evisum_engine_history_bounds_get(uint32_t *start_time, uint32_t *end_time)
return evisum_engine_history_bounds_since_get(0, start_time, end_time);
}
+Eina_Bool
+evisum_engine_history_time_available_get(uint32_t time)
+{
+ Eina_List *logs, *l;
+ Evisum_Engine_History_Log *log;
+ Eina_Bool available = EINA_FALSE;
+
+ if (!time) return EINA_FALSE;
+ if (!evisum_engine_ensure_started()) return EINA_FALSE;
+
+ logs = _engine_history_logs_get(EINA_FALSE, 0);
+ EINA_LIST_FOREACH(logs, l, log) {
+ if ((time >= log->start_time) && (time <= log->end_time)) {
+ available = EINA_TRUE;
+ break;
+ }
+ }
+
+ _engine_history_logs_free(logs);
+
+ return available;
+}
+
Eina_Bool
evisum_engine_history_time_set(uint32_t time)
{
diff --git a/src/bin/engine/evisum_engine.h b/src/bin/engine/evisum_engine.h
index 38ec3a6..d159b57 100644
--- a/src/bin/engine/evisum_engine.h
+++ b/src/bin/engine/evisum_engine.h
@@ -32,6 +32,7 @@ pid_t evisum_engine_daemon_pid_get(void);
Eina_Bool evisum_engine_history_bounds_get(uint32_t *start_time, uint32_t *end_time);
Eina_Bool evisum_engine_history_bounds_since_get(uint32_t since, uint32_t *start_time, uint32_t *end_time);
Eina_Bool evisum_engine_history_contiguous_bounds_since_get(uint32_t since, uint32_t *start_time, uint32_t *end_time);
+Eina_Bool evisum_engine_history_time_available_get(uint32_t time);
Eina_Bool evisum_engine_history_time_set(uint32_t time);
void evisum_engine_history_live_set(void);
Eina_Bool evisum_engine_history_live_get(void);
diff --git a/src/bin/ui/evisum_ui_process_list.c b/src/bin/ui/evisum_ui_process_list.c
index 14dd38f..92ec6cd 100644
--- a/src/bin/ui/evisum_ui_process_list.c
+++ b/src/bin/ui/evisum_ui_process_list.c
@@ -86,6 +86,8 @@ typedef struct {
uint32_t start_time;
uint32_t end_time;
uint32_t requested_time;
+ uint32_t tooltip_time;
+ Eina_Bool tooltip_available;
} history;
Elm_Layout *indicator;
@@ -689,11 +691,20 @@ static void
_evisum_ui_process_list_history_tooltip_set(Evisum_Ui_Process_List_View *view, uint32_t t) {
char time_buf[32];
char tip[128];
+ Eina_Bool available;
if (!view->summary.history_slider) return;
+ if (view->history.tooltip_time == t) available = view->history.tooltip_available;
+ else {
+ available = evisum_engine_history_time_available_get(t);
+ view->history.tooltip_time = t;
+ view->history.tooltip_available = available;
+ }
+
_evisum_ui_process_list_history_time_format(t, time_buf, sizeof(time_buf));
- snprintf(tip, sizeof(tip), _("Process history: %s"), time_buf);
+ if (available) snprintf(tip, sizeof(tip), _("Process history: %s"), time_buf);
+ else snprintf(tip, sizeof(tip), _("Process history: %s (no snapshot)"), time_buf);
elm_object_tooltip_text_set(view->summary.history_slider, tip);
}
@@ -810,9 +821,14 @@ _evisum_ui_process_list_history_apply_timer_cb(void *data) {
return EINA_FALSE;
}
-static void
+static Eina_Bool
_evisum_ui_process_list_history_request_deferred(Evisum_Ui_Process_List_View *view, uint32_t t) {
- if (!view->history.lock_init) return;
+ if (!view->history.lock_init) return EINA_FALSE;
+ if (!evisum_engine_history_time_available_get(t)) {
+ _evisum_ui_process_list_history_tooltip_set(view, t);
+ _evisum_ui_process_list_history_tooltip_pinned_set(view, EINA_TRUE);
+ return EINA_FALSE;
+ }
if (view->history.apply_timer) {
ecore_timer_del(view->history.apply_timer);
@@ -829,6 +845,8 @@ _evisum_ui_process_list_history_request_deferred(Evisum_Ui_Process_List_View *vi
/* Coalesce slider/key repeats so dragging or holding an arrow key loads the
* final requested timestamp instead of every intermediate second. */
view->history.apply_timer = ecore_timer_add(0.5, _evisum_ui_process_list_history_apply_timer_cb, view);
+
+ return EINA_TRUE;
}
static void
@@ -1043,8 +1061,11 @@ _evisum_ui_process_list_history_slider_mouse_move_cb(void *data, Evas *e EINA_UN
if (!ev) return;
t = _evisum_ui_process_list_history_time_at_x_get(view, ev->cur.canvas.x);
- if (view->history.sliding) _evisum_ui_process_list_history_preview_set(view, t);
- else _evisum_ui_process_list_history_tooltip_set(view, t);
+ if (view->history.sliding) {
+ if (evisum_engine_history_time_available_get(t)) _evisum_ui_process_list_history_preview_set(view, t);
+ else _evisum_ui_process_list_history_tooltip_set(view, t);
+ } else
+ _evisum_ui_process_list_history_tooltip_set(view, t);
}
static void
@@ -1064,20 +1085,23 @@ _evisum_ui_process_list_history_slider_mouse_down_cb(void *data, Evas *e EINA_UN
void *event_info) {
Evisum_Ui_Process_List_View *view = data;
Evas_Event_Mouse_Down *ev = event_info;
+ uint32_t t;
if (!ev || ev->button != 1) return;
if (!view->history.lock_init) return;
+ t = _evisum_ui_process_list_history_time_at_x_get(view, ev->canvas.x);
+ if (!evisum_engine_history_time_available_get(t)) {
+ _evisum_ui_process_list_history_tooltip_set(view, t);
+ _evisum_ui_process_list_history_tooltip_pinned_set(view, EINA_TRUE);
+ return;
+ }
+
view->history.sliding = EINA_TRUE;
/* While the mouse is down, only preview the selected time. The actual
* snapshot load is queued on mouse-up so dragging stays responsive. */
- eina_lock_take(&view->history.lock);
- view->history.live = EINA_FALSE;
- view->history.pending = EINA_FALSE;
- view->history.requested_time = 0;
- eina_lock_release(&view->history.lock);
_evisum_ui_process_list_history_tooltip_pinned_set(view, EINA_TRUE);
if (view->history.apply_timer) {
@@ -1085,8 +1109,7 @@ _evisum_ui_process_list_history_slider_mouse_down_cb(void *data, Evas *e EINA_UN
view->history.apply_timer = NULL;
}
- _evisum_ui_process_list_history_preview_set(
- view, _evisum_ui_process_list_history_time_at_x_get(view, ev->canvas.x));
+ _evisum_ui_process_list_history_preview_set(view, t);
}
static void
@@ -1102,6 +1125,11 @@ _evisum_ui_process_list_history_slider_mouse_up_cb(void *data, Evas *e EINA_UNUS
view->history.sliding = EINA_FALSE;
t = _evisum_ui_process_list_history_time_at_x_get(view, ev->canvas.x);
+ if (!evisum_engine_history_time_available_get(t)) {
+ _evisum_ui_process_list_history_tooltip_set(view, t);
+ _evisum_ui_process_list_history_tooltip_pinned_set(view, EINA_TRUE);
+ return;
+ }
_evisum_ui_process_list_history_preview_set(view, t);
_evisum_ui_process_list_history_request_deferred(view, t);
}
@@ -2131,9 +2159,14 @@ _evisum_ui_process_list_history_key_step(Evisum_Ui_Process_List_View *view, Evas
else t++;
}
+ if (!evisum_engine_history_time_available_get(t)) {
+ _evisum_ui_process_list_history_tooltip_set(view, t);
+ _evisum_ui_process_list_history_tooltip_pinned_set(view, EINA_TRUE);
+ return EINA_TRUE;
+ }
+
_evisum_ui_process_list_history_preview_set(view, t);
- _evisum_ui_process_list_history_request_deferred(view, t);
- view->skip_wait = 1;
+ if (_evisum_ui_process_list_history_request_deferred(view, t)) view->skip_wait = 1;
return EINA_TRUE;
}
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.