<div dir="ltr"><div>Phil,</div><div><br></div><div>Thanks very much for your suggestion.  I tried it and it does work exactly as you say, but I agree it is a bit ugly and non-portable. It is nice to have a temporary option while awaiting babeltrace 2.0.</div><div><br></div><div>Using the command line to combine traces is perhaps the cleaner option.  However, it does not appear that I can output in CTF format with this version:</div><div><br></div><div>$ babeltrace -w combined -o ctf PET1 PET2</div><div>[error] Only CTF traces with a single clock description are supported by this babeltrace version.</div><div>[error] Opening CTF traces for output is not supported yet.</div><div>Error opening trace "combined" for writing.</div><div><br></div><div>Thanks,</div><div>Rocky</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Apr 7, 2017 at 3:03 PM, Philippe Proulx <span dir="ltr"><<a href="mailto:eeppeliteloop@gmail.com" target="_blank">eeppeliteloop@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Fri, Apr 7, 2017 at 4:15 PM, Rocky Dunlap <<a href="mailto:rsdunlapiv@gmail.com">rsdunlapiv@gmail.com</a>> wrote:<br>
> Phil,<br>
><br>
> This relates to my previous question about multi-process tracing. The<br>
> workaround I am attempting is to have each process write its own trace with<br>
> a single stream, but then to pull all the stream files together into a<br>
> single trace with one metadata file. For this reason the uuids would need to<br>
> match.<br>
><br>
> Do you think this will work?<br>
<br>
</span>First question: why not having multiple traces (multiple directories<br>
with multiple `metadata` files)? babeltrace(1) and Trace Compass can<br>
merge them easily.<br>
<br>
In the meantime, if you really want a single trace, here's a hack.<br>
Please don't tell anyone that I suggested this. Choose any generated<br>
`metadata` file which contains all the `event` blocks that you need.<br>
Note that, across all your traces, the order in which you add the event<br>
class objects to your single stream class object needs to remain the<br>
same so that they have the same IDs whatever the trace. Then, this<br>
works, as long as you use the Babeltrace 1.5.2 release:<br>
<br>
    #include <babeltrace/ctf-writer/writer.<wbr>h><br>
    #include <string.h><br>
    #include <assert.h><br>
<br>
    typedef unsigned char uuid_t[16];<br>
<br>
    struct bt_ref {<br>
        long count;<br>
        void *release;<br>
    };<br>
<br>
    struct bt_object {<br>
        struct bt_ref ref_count;<br>
        void *release;<br>
        void *parent;<br>
    };<br>
<br>
    struct bt_ctf_trace {<br>
        struct bt_object base;<br>
        int frozen;<br>
        unsigned char uuid[16];<br>
    };<br>
<br>
    struct bt_ctf_writer {<br>
        struct bt_object base;<br>
        int frozen;<br>
        struct bt_ctf_trace *trace;<br>
    };<br>
<br>
    int main(void)<br>
    {<br>
        struct bt_ctf_writer *writer;<br>
        const unsigned char my_custom_uuid[16] = {<br>
            0xb3, 0x38, 0x4d, 0x7b, 0x77, 0x8a, 0x4f, 0xf0,<br>
            0x99, 0xbd, 0x43, 0x54, 0x9e, 0xc0, 0x54, 0x1b,<br>
        };<br>
<br>
        writer = bt_ctf_writer_create("/tmp/my-<wbr>trace");<br>
        assert(writer);<br>
        memcpy(writer->trace->uuid, my_custom_uuid, 16);<br>
<br>
        /* do stuff with writer here */<br>
<br>
        bt_ctf_writer_put(writer);<br>
        return 0;<br>
    }<br>
<br>
Again, I don't condone this: it's not portable, it's ugly, but it does<br>
what you ask.<br>
<br>
Another hack: search the byte sequences c1 fc 1f c1 (big endian) or<br>
c1 1f fc c1 (little endian) in all your stream files and replace the<br>
_next_ 16 bytes with your favorite UUID. Also replace the `uuid`<br>
attribute in the chosen `metadata` file with the canonical<br>
representation of your favorite UUID.<br>
<br>
Phil<br>
<div class="HOEnZb"><div class="h5"><br>
><br>
> Rocky<br>
><br>
> On Apr 7, 2017 1:57 PM, "Philippe Proulx" <<a href="mailto:eeppeliteloop@gmail.com">eeppeliteloop@gmail.com</a>> wrote:<br>
>><br>
>> On Fri, Apr 7, 2017 at 3:18 PM, Rocky Dunlap <<a href="mailto:rsdunlapiv@gmail.com">rsdunlapiv@gmail.com</a>> wrote:<br>
>> > Is it possible to explicitly set a uuid for a trace using the Babeltrace<br>
>> > CTF<br>
>> > writer?  I did not see a straightforward way to do it with the API.<br>
>><br>
>> It's not possible as of Babeltrace 1. We'll add trace UUID accessors to<br>
>> the upcoming Babeltrace 2 API.<br>
>><br>
>> That said, may I ask you why you need this? Two different CTF traces<br>
>> should not share the same UUID.<br>
>><br>
>> Phil<br>
>><br>
>> ><br>
>> > Rocky<br>
>> ><br>
>> > ______________________________<wbr>_________________<br>
>> > lttng-dev mailing list<br>
>> > <a href="mailto:lttng-dev@lists.lttng.org">lttng-dev@lists.lttng.org</a><br>
>> > <a href="https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev" rel="noreferrer" target="_blank">https://lists.lttng.org/cgi-<wbr>bin/mailman/listinfo/lttng-dev</a><br>
>> ><br>
</div></div></blockquote></div><br></div>