blob: 0dbe34575008e81b3fd81a23fcd88058d726f9ef [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<tmfxml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="xmlDefinition.xsd">
<!-- ***************************************************************************
* Copyright (c) 2018 École Polytechnique de Montréal
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*************************************************************************** -->
<pattern version="0" id="xml.core.tests.simple.pattern">
<head>
<traceType id="org.eclipse.linuxtools.tmf.core.tests.xmlstub" />
<label value="XML simple pattern test" />
</head>
<!-- the pattern handler specifies the FSM that will be instanciated at the beginning of the analysis -->
<patternHandler initial="testTimeConditions">
<!-- CONDITIONS -->
<test id="sameCpu">
<if>
<condition>
<stateAttribute type="constant" value="#CurrentScenario" />
<stateAttribute type="constant" value="cpu" />
<stateValue type="eventField" value="cpu" />
</condition>
</if>
</test>
<test id="timeRange">
<if>
<condition>
<timerange unit="ns">
<in begin="5" end="20" />
</timerange>
</condition>
</if>
</test>
<test id="smallExec">
<if>
<condition>
<elapsedTime unit="ns">
<less since="waitEnd" value="4" />
</elapsedTime>
</condition>
</if>
</test>
<!-- ACTIONS -->
<action id="startEvent">
<stateChange>
<stateAttribute type="constant" value="#CurrentScenario" />
<stateAttribute type="constant" value="cpu" />
<stateValue type="eventField" value="cpu" />
</stateChange>
<stateChange>
<stateAttribute type="constant" value="CPU" />
<stateAttribute type="eventField" value="cpu" />
<stateValue type="int" value="1" />
</stateChange>
</action>
<action id="incrementEvents">
<stateChange>
<stateAttribute type="constant" value="CPU" />
<stateAttribute type="eventField" value="cpu" />
<stateValue type="int" value="1" increment="true"/>
</stateChange>
</action>
<action id="doSegment">
<!-- Generate a pattern segment with the name 'test2' and with three fields 'field1', 'field2' and 'field2'-->
<segment>
<segType>
<segName>
<stateValue type="query">
<stateAttribute type="constant" value="CPUs" />
<stateAttribute type="query" >
<stateAttribute type="constant" value="#CurrentScenario" />
<stateAttribute type="constant" value="cpu" />
</stateAttribute>
</stateValue>
</segName>
</segType>
</segment>
</action>
<action id="resetCount">
<stateChange>
<stateAttribute type="constant" value="CPU" />
<stateAttribute type="eventField" value="cpu" />
<stateValue type="delete" />
</stateChange>
</action>
<!-- FSMs -->
<!-- test fsm
Declare a test FSM that that will generate two segments for each event received
-->
<fsm id="testTimeConditions" multiple="true" initial="waitBegin">
<state id="waitBegin">
<!-- wait for an entry event within time range -->
<transition event="entry" cond="timeRange" target="waitEnd" action="startEvent" />
</state>
<state id="waitEnd">
<!-- wait for exit, will create segment only longer than 5 -->
<transition event="action" cond="sameCpu" target="waitEnd" action="incrementEvents" />
<transition event="exit" cond="sameCpu:smallExec" target="endTest" action="doSegment:resetCount" />
<transition event="exit" cond="sameCpu" target="endTest" action="resetCount" />
</state>
<final id="endTest"/>
</fsm>
</patternHandler>
</pattern>
</tmfxml>