X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Fmodules%2Fgui%2Flttvwindow%2Flttvwindow%2Flttvwindowtraces.h;h=fffb3025cf29558b0299a32efdd700ac781679c8;hb=3710295e1cd7cd1d4ec53bd4950f0f078914b7e0;hp=20ea0c43f599279495224963cc8e655c6f0ae7d8;hpb=313bd6fc2be6b0b81b4dde2c9355e1e2edc21291;p=lttv.git diff --git a/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/lttvwindowtraces.h b/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/lttvwindowtraces.h index 20ea0c43..fffb3025 100644 --- a/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/lttvwindowtraces.h +++ b/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/lttvwindowtraces.h @@ -18,6 +18,53 @@ /* This file is the API used to launch any background computation on a trace */ +/* lttvwindowtraces + * + * This API consists in two main parts. The first one is for the background + * computation provider and the second is for the viewer which needs this + * information. + * + * A computation provider, i.e. a statistics computation module or a state + * computation module, have two things in common : they append data to a trace + * in an extensible container (LttvAttributes). This extended information, once + * computed, can be kept all along with the trace and does not need to be + * recomputed : a computation done on a trace must result in a identical result + * each time it is done. + * + * This API provides functions for computation provider to register their + * computation functions (or computation functions insertion and removal + * functions). Once the computation provider is registered with its module name, + * extended computation for a trace can be requested by any viewer by specifying + * the module name, as we will describe in a moment. + * + * A viewer which needs extended information about a trace must ask for it to be + * computed by doing a background computation request. It may also ask to be + * notified of the completion of its request by doing a notify request. + * + * Before asking for the computation, it must check for its readiness. If it is + * ready, the information has already been computed, so it is ready to use. If + * the information is not ready, in must check whether or not the processing of + * this task is in progress. If it is, it must not do any background computation + * request. It must only do a background notification request of the current + * processing to be informed of its completion. If the information is not ready + * and not being processed, then the viewer may do a background computation + * request and add a notify request to the notify queue. + * + * When a context takes control of a trace, it must lock the trace. This is a + * way of ensuring that not conflict will occur between two traceset contexts + * and shared traces. It will generate an error if a context try to get a lock + * on a trace what is not unlocked. Upon every trace locking, + * lttv_process_traceset_synchronize_tracefiles should be used to resynchronize + * the traces with the trace context information. + * + * The usefulness of the lock in this framework can be questionable in a + * single threaded environment, but can be great in the eventuality of + * multiple threads. + * + */ + + + #ifndef LTTVWINDOWTRACES_H #define LTTVWINDOWTRACES_H @@ -47,7 +94,8 @@ extern LttvTraceInfo LTTV_TRACES, LTTV_HOOK_ADDER, LTTV_HOOK_REMOVER, LTTV_IN_PROGRESS, - LTTV_READY; + LTTV_READY, + LTTV_LOCK; @@ -231,4 +279,30 @@ void lttvwindowtraces_unregister_computation_hooks void lttvwindowtraces_unregister_requests(LttvAttributeName module_name); +/** + * Lock a trace so no other instance can use it. + * + * @param trace The trace to lock. + * @return 0 on success, -1 if cannot get lock. + */ +gint lttvwindowtraces_lock(LttvTrace *trace); + + +/** + * Unlock a trace. + * + * @param trace The trace to unlock. + * @return 0 on success, -1 if cannot unlock (not locked ?). + */ +gint lttvwindowtraces_unlock(LttvTrace *trace); + +/** + * Verify if a trace is locked. + * + * @param trace The trace to verify. + * @return TRUE if locked, FALSE is unlocked. + */ +gint lttvwindowtraces_get_lock_state(LttvTrace *trace); + + #endif //LTTVWINDOWTRACES_H