X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=plugins%2Fctf%2Ffs%2Ffs.h;h=4c165676b287eaa6fab2f9adf1f59245208cb373;hb=d3eb6e8fd59ebff26cb99a70d375e542d49575a3;hp=7a67b48abddc021436168254a316098221a72d47;hpb=413bc2c417a706e7e2cc331077421e89e36daea0;p=babeltrace.git diff --git a/plugins/ctf/fs/fs.h b/plugins/ctf/fs/fs.h index 7a67b48a..4c165676 100644 --- a/plugins/ctf/fs/fs.h +++ b/plugins/ctf/fs/fs.h @@ -1,5 +1,5 @@ -#ifndef BABELTRACE_PLUGIN_CTF_FS_INTERNAL_H -#define BABELTRACE_PLUGIN_CTF_FS_INTERNAL_H +#ifndef BABELTRACE_PLUGIN_CTF_FS_H +#define BABELTRACE_PLUGIN_CTF_FS_H /* * BabelTrace - CTF on File System Component @@ -29,13 +29,16 @@ */ #include -#include +#include +#include "data-stream.h" -#define CTF_FS_COMPONENT_NAME "fs" #define CTF_FS_COMPONENT_DESCRIPTION \ "Component used to read a CTF trace located on a file system." -static bool ctf_fs_debug; +BT_HIDDEN +extern bool ctf_fs_debug; + +struct bt_notification_heap; struct ctf_fs_file { struct ctf_fs_component *ctf_fs; @@ -55,19 +58,39 @@ struct ctf_fs_metadata { struct ctf_fs_stream { struct ctf_fs_file *file; struct bt_ctf_stream *stream; + /* FIXME There should be many and ctf_fs_stream should not own them. */ struct bt_ctf_notif_iter *notif_iter; + /* A stream is assumed to be indexed. */ + struct index index; void *mmap_addr; + /* Max length of chunk to mmap() when updating the current mapping. */ + size_t mmap_max_len; + /* Length of the current mapping. */ size_t mmap_len; + /* Length of the current mapping which *exists* in the backing file. */ + size_t mmap_valid_len; + /* Offset in the file where the current mapping starts. */ off_t mmap_offset; + /* + * Offset, in the current mapping, of the address to return on the next + * request. + */ off_t request_offset; -}; - -struct ctf_fs_data_stream { - GPtrArray *streams; + bool end_reached; }; struct ctf_fs_iterator { - int dummy; + struct bt_notification_heap *pending_notifications; + struct bt_notification *current_notification; + /* + * struct ctf_fs_data_stream* which have not yet been associated to a + * bt_ctf_stream. The association is performed on the first packet + * read by the stream (since, at that point, we have read a packet + * header). + */ + GPtrArray *pending_streams; + /* bt_ctf_stream -> ctf_fs_stream */ + GHashTable *stream_ht; }; struct ctf_fs_component_options { @@ -78,14 +101,28 @@ struct ctf_fs_component { GString *trace_path; FILE *error_fp; size_t page_size; - struct bt_notification *last_notif; - struct ctf_fs_metadata metadata; - struct ctf_fs_data_stream data_stream; struct ctf_fs_component_options options; + struct ctf_fs_metadata *metadata; }; BT_HIDDEN enum bt_component_status ctf_fs_init(struct bt_component *source, - struct bt_value *params); + struct bt_value *params, void *init_method_data); + +BT_HIDDEN +void ctf_fs_destroy(struct bt_component *component); + +BT_HIDDEN +enum bt_notification_iterator_status ctf_fs_iterator_init( + struct bt_component *source, + struct bt_notification_iterator *it); + +void ctf_fs_iterator_destroy(struct bt_notification_iterator *it); + +enum bt_notification_iterator_status ctf_fs_iterator_next( + struct bt_notification_iterator *iterator); + +struct bt_notification *ctf_fs_iterator_get( + struct bt_notification_iterator *iterator); -#endif /* BABELTRACE_PLUGIN_CTF_FS_INTERNAL_H */ +#endif /* BABELTRACE_PLUGIN_CTF_FS_H */