"""
This script demonstrates usage of profiler with isystem.connect API.
"""
from __future__ import print_function
import os
import time
import isystem.connect as ic
if __name__ == '__main__':
winidea_id = ''
print('isystem.connect version: ' + ic.getModuleVersion())
cmgr = ic.ConnectionMgr()
cmgr.connect(ic.CConnectionConfig().instanceId(winidea_id))
debugCtrl = ic.CDebugFacade(cmgr)
ideCtrl = ic.CIDEController(cmgr)
debugCtrl.download()
debugCtrl.runUntilFunction("main")
debugCtrl.waitUntilStopped()
profiler = ic.CProfilerController2(cmgr, 'sample_profiler.trd', 'w')
profiler.removeTrigger('testTrigger')
triggerIdx = profiler.createTrigger('testTrigger')
profiler.select(triggerIdx)
profiler.setProfilingSections(triggerIdx, True, True, False, False);
profiler.setTriggerOption(triggerIdx, 'HW.Recorder.BufferSize', '32 MB')
profiler.setFunctionTrigger(triggerIdx, "target_init")
profiler.addFunction(triggerIdx, "get_random")
profiler.addFunction(triggerIdx, "fibonacci")
profiler.addVariable(triggerIdx, "main_loop_counter", ic.CProfilerController2.EDATRegular)
profiler.addStateVariable(triggerIdx,
"g_enumA",
ic.CProfilerController2.EStateDefEnum,
"enumA")
print('Target is running, profiler is recording data...')
profiler.waitUntilLoaded()
profiler.start()
debugCtrl.run()
time.sleep(3)
debugCtrl.stop()
print('Target stopped, loading profiler data...')
profiler.waitUntilLoaded()
exportCfg = ic.CProfilerExportConfig()
exportCfg.setFileName('profilerSample-1.xml') \
.setAreaScope(ic.CProfilerExportConfig.EAreaAll) \
.setAreaExportSections(True, True, True) \
.setSaveTimeline(True)
print('-------------------------\nWriting export file with settings:\n')
print(exportCfg.toString())
print('-------------------------\n\n')
profiler.exportData(exportCfg)
exportCfg.setFileName('profilerSample-bin.xml')
formatter = ic.CProfilerXMLExportFormat()
formatter.setTimelineBinary(True)
formatter.setUseIndent(False)
exportCfg.setFormatter(formatter)
print('Writing XML export file with binary timeline ...')
profiler.exportData(exportCfg)
debugCtrl.reset()
debugCtrl.runUntilFunction("main")
debugCtrl.waitUntilStopped()
print('One function and variable will be removed from trigger configuration.')
profiler.removeFunction(triggerIdx, "get_random")
profiler.removeVariable(triggerIdx, "fibonacci")
print('New recording started: Target is running, profiler is recording data ...')
profiler.start()
debugCtrl.run()
time.sleep(3)
debugCtrl.stop()
print('Target stopped, loading profiler data...')
profiler.waitUntilLoaded()
exportCfg = ic.CProfilerExportConfig()
exportFile = 'profilerSample-2.csv'
exportCfg.setFileName(exportFile) \
.setSaveTimeline(True) \
.setAreaScope(ic.CProfilerExportConfig.EAreaFilter) \
.setFunctionsFilter('*') \
.setVariablesFilter('*')
exportCfg.setFileName('profilerSample.btf')
formatter = ic.CProfilerBTFExportFormat()
exportCfg.setFormatter(formatter)
print('Writing BTF export file with binary timeline ...')
profiler.exportData(exportCfg)
print('Demonstration of some other profiler methods:')
print(' Number of triggers: ', profiler.getNumberOfTriggers())
print(" Profiler recording start: ", profiler.getTriggerOption(triggerIdx, 'HW.Recorder.Start'))
print('\n\n\nProfiler measurements')
profilerExportFile = 'profilerSample-3.xml'
profilerData = ic.CProfilerData2.createInstance(profiler,
profilerExportFile,
True,
'*', '*')
warnings = profilerData.getParserWarnings()
if warnings:
print('WARNING(S): ', warnings)
def printAreas(profilerData, areaType):
areaIterator = profilerData.getAreaIterator(areaType)
while areaIterator.hasNext():
area = areaIterator.next()
print('Area:')
print(' Id: ', hex(area.getAreaId()))
print(' Handle: ', area.getHandle())
print(' Path: ', area.getPath())
print(' Name: ', area.getAreaName())
print(' Value: ', area.getValue())
print(' Value Unit:', area.getValueUnit())
print(' Value Type:', area.getValueType())
print(' Parent h.: ', area.getParentHandle())
print(' Parent a.: ', area.getParentAreaName())
print('\nFunction areas: ')
printAreas(profilerData, ic.CProfilerArea2.EFunctions)
print('\nVariable areas: ')
printAreas(profilerData, ic.CProfilerArea2.EVariables)
print('\nTimeline: ')
timeIter = profilerData.getTimelineIterator()
counter = 0
while timeIter.hasNext():
timeEvent = timeIter.next()
print(' time: ', timeEvent.getTime())
if counter > 100:
break
counter += 1
profilerData.closeParser()
print("\n\n\nRun script 'profilerData.py' to print ALL the recorded results.")