Hi!
So I’ve been trying to use python with EASE scripting to make custom TimeGraphs but I run into two problems:
The first, minor, one is that every time I change the script, I have to change the name of the Analysis to make the changes appear. Is there a way around that?
My second issue is that even though I create arrows and hand them over to the TimeGraphProvider, they do not appear. I have been heavily relying on the script given in the tutorial here [1]. Here is the script I’ve been
using:
loadModule('/TraceCompass/Analysis');
loadModule('/TraceCompass/Trace');
loadModule('/TraceCompass/View');
loadModule('/TraceCompass/DataProvider');
loadModule('/TraceCompass/Utils');
from py4j.java_gateway
import JavaClass
import time
trace = getActiveTrace()
analysis = createScriptedAnalysis(trace,
"Tasking")
if analysis
is
None:
print("Trace
is null")
exit()
ss = analysis.getStateSystem(False)
def
strToVarargs(str):
object_class = java.lang.String
object_array = gateway.new_array(object_class,
1)
object_array[0]
= str
return object_array
tgArrows = createListWrapper();
tgEntries = createListWrapper();
def
runAnalysis():
iter = analysis.getEventIterator()
last =
None
lastTime =
0
event =
None
while iter.hasNext():
if
not(event
is
None):
gateway.detach(event)
event = iter.next();
# Custom events
if event.getName() ==
"pushed_channel":
name = getEventFieldValue(event,
"channel")
if (not(name
is
None)):
quark = ss.getQuarkAbsoluteAndAdd(strToVarargs(str(name)))
ss.modifyAttribute(event.getTimestamp().toNanos(),
"Push", quark)
if event.getName()
== "unpushed_channel":
name = getEventFieldValue(event,
"channel")
if (not(name
is
None)):
quark = ss.getQuarkAbsoluteAndAdd(strToVarargs(str(name)))
ss.removeAttribute(event.getTimestamp().toNanos(), quark)
if event.getName()
== "activated_task":
name = getEventFieldValue(event,
"task")
if (not(name
is
None)):
quark = ss.getQuarkAbsoluteAndAdd(strToVarargs(str(name)))
ss.modifyAttribute(event.getTimestamp().toNanos(),
"Activated", quark)
if event.getName()
== "start_executing_task":
name = getEventFieldValue(event,
"task")
if(not(name
is
None)):
quark = ss.getQuarkAbsoluteAndAdd(strToVarargs(str(name)))
ss.modifyAttribute(event.getTimestamp().toNanos(),
"Executing", quark)
if event.getName()
== "stop_executing_task":
name = getEventFieldValue(event,
"task")
if(not(name
is
None)):
quark = ss.getQuarkAbsoluteAndAdd(strToVarargs(str(name)))
ss.removeAttribute(event.getTimestamp().toNanos(), quark)
last = quark;
lastTime = event.getTimestamp().toNanos();
if event.getName() ==
"sched_switch":
name = getEventFieldValue(event,
"next_comm")
if(not(name
is
None)
and
not(last
is
None)):
quark = ss.getQuarkAbsoluteAndAdd(strToVarargs(str(name)))
ss.removeAttribute(event.getTimestamp().toNanos(), quark)
duration = lastTime - event.getTimestamp().toNanos();
# Arrows created and added to list here
tgArrows.getList().add(createArrow(last, quark, lastTime, duration,
1))
if
not(event
is
None):
ss.closeHistory(event.getTimestamp().toNanos())
if
not(ss.waitUntilBuilt(0)):
runAnalysis()
quarks = ss.getQuarks(strToVarargs("*"))
entries = []
#get all entries
for quark
in quarks:
entries.append(ss.getAttributeName(quark))
# put all entries into wrapper list
for entry
in entries:
quark = ss.getQuarkAbsolute(strToVarargs(str(entry)))
listEntry = createEntry(entry, {"quark"
: quark})
tgEntries.getList().add(listEntry)
class
EntryFunction(object):
def
apply(self, parameters):
return tgEntries.getList();
class
Java:
implements = ['java.util.function.Function']
class
ArrowFunction(object):
def
apply(self, parameters):
return tgArrows.getList();
class
Java:
implements = ['java.util.function.Function']
entryFunction = EntryFunction()
arrowFunction = ArrowFunction()
provider = createScriptedTimeGraphProvider(analysis, entryFunction,
None, arrowFunction);
if
not(provider
is
None):
openTimeGraphView(provider)
monitor = getScriptEngine().getMonitor()
while
not monitor.isCanceled():
time.sleep(5)
Is there something obvious, that I missed, that causes the arrows not to appear in the TimeGraph?
Best regards,
Lea
[1]
https://github.com/tuxology/tracevizlab/tree/master/labs/204-scripted-analysis-for-custom-instrumentation