Hi all,
Some
news on a topic that
was discussed a few
months ago : how to add new state system
with a declarative language in TMF.
The defined XML structure has been used in several
cases without significant
loss of performance.
Complicated
cases such as Linux
Kernel and Windows Kernel (with ETW) are available.
Linux Kernel :
http://secretaire.dorsal.polymtl.ca/~fwininger/XmlStateProvider/kernel-0.6.state-schema.xml
However
I think it is more
interesting to present an XML created for a
simple use case.
This use
case has been done by Simon Marchi to debug
a problem with
gdb. He
added 4 tracepoints
(Lttng UST) to monitor start/stop of a
gdb instance and he want to visualize the result in a view in
TMF.
It's very easy in this
case to convert the events in states
with XML syntax, and
you can have in less than 30 minutes your own state system in TMF.
<tmfxml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://secretaire.dorsal.polymtl.ca/~fwininger/XmlStateProvider/0.6.state-schema.xsd">
<stateprovider analysisid="polymtl.gdb.debug">
<stateValue name="INF_RUNNING" value="1" />
<stateValue name="INF_STOPPED" value="0" />
<eventHandler eventname="gdb:inf_forked">
<stateChange>
<attribute constant="gdb" />
<attribute eventfield="pid" />
<attribute constant="Status" />
<value int="$INF_RUNNING" />
</stateChange>
</eventHandler>
<eventHandler eventname="gdb:inf_stop">
<stateChange>
<attribute constant="gdb" />
<attribute eventfield="pid" />
<attribute constant="Status" />
<value int="$INF_STOPPED" />
</stateChange>
</eventHandler>
<eventHandler eventname="gdb:inf_cont">
<stateChange>
<attribute constant="gdb" />
<attribute eventfield="pid" />
<attribute constant="Status" />
<value int="$INF_RUNNING" />
</stateChange>
</eventHandler>
<eventHandler eventname="gdb:inf_step">
<stateChange>
<attribute constant="gdb" />
<attribute eventfield="pid" />
<attribute constant="Status" />
<value int="$INF_RUNNING" />
</stateChange>
</eventHandler>
</stateprovider>
</tmfxml>
I am
currently working on a generic view to
display the state system.
It is
based on the AbstractTimeGraphView and you can
choose which branches
to display with a
XML.
Example :
for the Resources View, you want to display the Thread/*
branch in the state system :
<tmfxml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://secretaire.dorsal.polymtl.ca/~fwininger/XmlStateProvider/0.6.state-schema.xsd">
<view id="polymtl.kernel.view">
<head>
<analysis id="polymtl.kernel.sp"/>
</head>
<!-- StateValues -->
<stateValue name="PROCESS_STATUS_UNKNOWN" value="0" color="#EEEEEE"/>
<stateValue name="PROCESS_STATUS_WAIT_BLOCKED" value="1" color="#CCCCCC"/>
<stateValue name="PROCESS_STATUS_RUN_USERMODE" value="2" color="#118811"/>
<stateValue name="PROCESS_STATUS_RUN_SYSCALL" value="3" color="#0000EE"/>
<stateValue name="PROCESS_STATUS_INTERRUPTED" value="4" color="#DDDD00"/>
<stateValue name="PROCESS_STATUS_WAIT_FOR_CPU" value="5" color="#AA0000"/>
<!-- Resouces View -->
<line id="Threads/*" display="Status" name="Exec_name" parent="PPID">
<!-- Options -->
<option name="PPID" path="PPID"/>
<option name="TID" path=""/>
</line>
</view>
</tmfxml>
All
specifications can be found
here:
http://secretaire.dorsal.polymtl.ca/~fwininger/XmlStateProvider/0.6.state-schema.xsd
The
prototype of the xml provider can be found in the
xml_analysis branch here:
http://git.dorsal.polymtl.ca/~fwininger?p=linuxtools.git;a=shortlog;h=refs/heads/xml_analysis
The
contribution comes with the analysis framework
developed by Genevieve
Bastien.
To be use you must add the XML file in this directory :
runtimeWorkspace/.metadata/.plugins/org.eclipse.linuxtools.tmf.analysis.xml/xml_files/
A easy way to import the XML files will come as soon as
possible.
I am very
interested to have new use cases to have more
feedback on the usability
and performance of this system.
Cheers,
Florian