X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=plugins%2Fctf%2Ffs%2Ffs.h;h=43977d286ba137d1b109a0fada8f45e4ac73cabe;hb=b2e0c9076135f47110af2d96dfaee397c597bc90;hp=151e28eda5d5c2d8f8f801e9ff5523e8a1509e91;hpb=e7a4393bc8bd4ac95ce121b34d932620ebc386cd;p=babeltrace.git diff --git a/plugins/ctf/fs/fs.h b/plugins/ctf/fs/fs.h index 151e28ed..43977d28 100644 --- a/plugins/ctf/fs/fs.h +++ b/plugins/ctf/fs/fs.h @@ -29,13 +29,14 @@ */ #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; @@ -59,15 +60,36 @@ struct ctf_fs_stream { 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; bool end_reached; }; struct ctf_fs_iterator { struct bt_notification_heap *pending_notifications; + /* + * 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 +100,29 @@ struct ctf_fs_component { GString *trace_path; FILE *error_fp; size_t page_size; - struct bt_notification *current_notification; - struct ctf_fs_metadata metadata; struct ctf_fs_component_options options; - GPtrArray *streams; /* struct ctf_fs_data_stream * */ + struct ctf_fs_metadata *metadata; }; BT_HIDDEN -enum bt_component_status ctf_fs_init(struct bt_component *source, - struct bt_value *params); +enum bt_component_status ctf_fs_init(struct bt_private_component *source, + struct bt_value *params, void *init_method_data); + +BT_HIDDEN +void ctf_fs_finalize(struct bt_private_component *component); + +BT_HIDDEN +enum bt_notification_iterator_status ctf_fs_iterator_init( + struct bt_private_notification_iterator *it, + struct bt_private_port *port); + +void ctf_fs_iterator_finalize(struct bt_private_notification_iterator *it); + +struct bt_notification_iterator_next_return ctf_fs_iterator_next( + struct bt_private_notification_iterator *iterator); + +BT_HIDDEN +struct bt_value *ctf_fs_query(struct bt_component_class *comp_class, + const char *object, struct bt_value *params); #endif /* BABELTRACE_PLUGIN_CTF_FS_H */