[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[news.eclipse.tools.hyades] Re: api for parsing trcxml file

Hi Luca,

Please try the attached standalone trace model test.

Import in your workspace ModelTests project,
org.eclipse.hyades.models.hierarchy and org.eclipse.hyades.models.trace,
modify WORKSPACE_PATH and FILE_SEPARATOR then run it. Place myTrace.trcxml
in your / folder or C: drive.

To check if the model was created correctly just pass one argument: "-load"
to the program.

If you want to run it outside Eclipse then you need to add all the required
runtime JARs (from required plugins: hierarchy, trace, emf, etc and the
plugin.xml files from hierarchy and trace) to the classpath.

Please let me know if you need more info.

Thanks,
Marius

"Luca Di Stefano" <luca.distefano@xxxxxxxxxxxxxxxxxx> wrote in message
news:cmfsrr$81k$1@xxxxxxxxxxxxxx
> Hi Marius,
>
> thanks for your hint!
>
> I have copied the code you suggested and removed any reference to ui.
> In my class remains only the run importFile and loadLine methods.
> There are some problems
>
> using
>         //create destination container
>          IContainer res = PDCoreUtil.createContainer(new
> Path("/phxrepository/eclipse-workspace/ProfileProject/"));
>
> //        //create monitor
>          fMonitor = PDCoreUtil.createMonitor(res, "DefaultMonitor");
> seems to have dependency with workbench and ui.plugin
>
> replacing them with
>          HierarchyPackageImpl.init();
>          HierarchyResourceSetImpl set =
> HierarchyResourceSetImpl.getInstance();
>          HierarchyFactory factory = new HierarchyFactoryImpl();
>
>          fMonitor = factory.createTRCMonitor();
>          fMonitor.setName("DefaultMonitor");
>
> I get
> Thread[main,5,main] - org.xml.sax.SAXParseException: The markup in the
> document preceding the root element must be well-formed.
> at
> org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown
> Source)
> at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)
> at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
> at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
> at org.apache.xerces.impl.XMLScanner.reportFatalError(Unknown Source)
> at
>
org.apache.xerces.impl.XMLDocumentScannerImpl$PrologDispatcher.dispatch(Unkn
own
> Source)
> at
> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown
> Source)
> at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
> at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
> at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
> at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
> at javax.xml.parsers.SAXParser.parse(SAXParser.java:345)
> at
>
com.wuerth.phoenix.profile.hyades.SAXFragmentHandler.parse(SAXFragmentHandle
r.java:265)
> at
>
com.wuerth.phoenix.profile.hyades.SAXFragmentHandler$1.run(SAXFragmentHandle
r.java:74)
>
>
> replacing the function importFile() with the following
>      private void importFileSimple(XMLLoader processor, InputStream
> readStream) {
>          BufferedReader reader = new BufferedReader(new
> InputStreamReader(readStream));
>          try {
>              while (true) {
>                  String line = reader.readLine();
>                  if (line == null)
>                      break;
>                  System.out.println("LINE: " + line);
>                  processor.loadEvent(line.getBytes(), line.length(),
true);
>              }
>          } catch (IOException e) {
>              e.printStackTrace();
>          } finally {
>              try {
>                  reader.close();
>              } catch (IOException e1) {
>                  e1.printStackTrace();
>              }
>              processor.cleanUp();
>          }
>      }
>
> parsing is going well but Hierarchy seems to be empty:
> context.getAgent() == null
> context.getGlobalForwardReferences().size()==0
>
> I tried to add System.setProperty("XMLLoader.debug", "true") to see what
> is going wrong
>   but in XMLLoader.writeToTextOutputFile the log filename is hardcoded
> String fileName = "c:/log_" + (new java.util.Date()).getTime() + ".xml";
> and on a linux box not works.
>
> Sorry for the confusion.. :-)
>
> thanks,
>
> Luca
>
>
>
> Marius Slavescu wrote:
> > Hi Luca,
> >
> > The parsing/loading of trcxml file is done at import profiling file time
> > using the event (fragment) loader infrastructure. The resulting model is
the
> > EMF based Hyades model (in this case Hierarchy/Trace package are used,
see
> >
http://dev.eclipse.org/viewcvs/indextools.cgi/~checkout~/hyades-home/docs/components/data_models/data_models.html).
> >
> > The loader infrastructure is:
> >     - in org.eclipse.hyades.models.hierarchy plugin
> >         - XMLLoader is the controller (parses the fragments, discovers
and
> > employs the loaders), after initialization loadEvent methods are called
with
> > each event, the same approach is used in both live or off-line
scenarios.
> >         - other services required in the loading process are available
in
> > this plugin
> >     - in each model plugin there are loaders registered for specific
events,
> > for example in the org.eclipse.hyades.models.trace plugin you'll find
all
> > the loaders for events found in trcxml files.
> >
> > To name of the loaders follows this pattern:
> > XMLfragmentRootElementNameLoader where fragmentRootElementName is the
root
> > element name in the fragment (usually the fragment has only one
element).
> >
> > In Hyades workbench you could use the Import->Profiling File wizard to
> > import the trace files in workspaces then in your own plugin you can
> > manipulate/view the persisted Trace models (resulted from import).
> >
> > If you want to have this function in headless mode then you'll need to
write
> > the import code (look at
> > org.eclipse.hyades.trace.ui.internal.wizard.ImportTracePage1.run method)
> > then you could build the graphs that you need on top of the resulting
Trace
> > model.
> >
> > Please let me know if you need more info.
> >
> > Thanks,
> > Marius
> >
> > "Luca Di Stefano" <luca.distefano@xxxxxxxxxxxxxxxxxx> wrote in message
> > news:clqsfl$v5e$1@xxxxxxxxxxxxxx
> >
> >>Hi,
> >>
> >>I need to parse several trcxm files to join the data and build some
> >
> > graphs.
> >
> >>There are hyades API for parse trcxm files and get the data?
> >>
> >>Thanks,
> >>
> >>Luca
> >
> >
> >
>
>
>


----------------------------------------------------------------------------
----


> <?xml version="1.0"?>
> <TRACE>
> <node nodeId="" hostname="phxl0007" ipaddress="127.0.0.1,127.0.0.1"
timezone="-60" time="1099651312.827835083"/>
> <processCreate processId="" pid="14906" nodeIdRef=""
time="1099651312.827835083"/>
> <agentCreate agentId="UUID-1099651312-872530-997682102-1023616539"
version="1.000" processIdRef="" agentName="Java Profiling Agent"
agentType="Profiler"
agentParameters="server=standalone,filters=config/myfilters.txt,file=mytest.
trcxml,profile=config/jvmpi.pro" time="1099651312.827835083"/>
> <traceStart traceId="UUID-1099651312-896434-296081298-987511110"
agentIdRef="UUID-1099651312-872530-997682102-1023616539"
time="1099651312.896468400"/>
> <filter pattern="#profile" mode="INCLUDE" genericPattern="SUFFIX"
methodPattern="setUp" methodMode="EXCLUDE" methodGenericPattern="NONE"/>
> <filter pattern="#profile" mode="INCLUDE" genericPattern="SUFFIX"
methodPattern="tearDown" methodMode="EXCLUDE" methodGenericPattern="NONE"/>
> <filter pattern="profile" mode="INCLUDE" genericPattern="SUFFIX"
methodPattern="test" methodMode="INCLUDE" methodGenericPattern="SUFFIX"/>
> <filter pattern="" mode="EXCLUDE" genericPattern="PREFIX" methodPattern=""
methodMode="EXCLUDE" methodGenericPattern="PREFIX"/>
> <option key="CLASS_LOAD_DETAILS" value="false"/>
> <option key="METHOD_DETAILS" value="false"/>
> <option key="COLLATION_VALUES" value="false"/>
> <option key="CONTEXT_FLOW" value="false"/>
> <option key="FILTERS" value="true"/>
> <option key="TRACK_GC_EVENT_TYPES" value="none"/>
> <option key="ID_STYLE" value="static"/>
> <option key="OBJ_REF_MODE" value="filterOwner"/>
> <option key="METHOD_COUNTS" value="true"/>
> <option key="OBJ_ALLOC_IS_ARRAY" value="true"/>
> <option key="OPTIONS" value="true"/>
> <option key="STACK_INFORMATION" value="normal"/>
> <option key="TRACE_MODE" value="full"/>
> <option key="TICKET" value="true"/>
> <option key="TIMESTAMPS" value="true"/>
> <option key="TRACE_IDREFS" value="false"/>
> <option key="UNREFERENCED_SYMBOLS" value="false"/>
> <option key="THREAD_CPU_TIME" value="false"/>
> <option key="LLDATA_ENABLED" value="false"/>
> <option key="HEAP_INFO_FILE_PREFIX" value="optHeap"/>
> <option key="MONITOR_MODE" value="none"/>
> <option key="EXTENSION_LIBRARY" value=""/>
> <threadStart threadId="2" time="1099651312.904853343" threadName="main"
groupName="main" parentName="system" objIdRef="0"/>
> <runtimeInitDone threadIdRef="2" time="1099651312.944803237"/>
> <classDef threadIdRef="4" name="java.lang.Class" sourceName="Class.java"
classId="124" time="1099651312.912096500"/>
> <objAlloc threadIdRef="4" time="1099651312.945412874" objId="617"
classIdRef="124" isArray="0" size="88"/>
> <classDef threadIdRef="4" name="java.lang.Thread" sourceName="Thread.java"
classId="616" objIdRef="617" time="1099651312.934934854"/>
> <objAlloc threadIdRef="4" time="1099651312.945412397" objId="3658"
classIdRef="616" isArray="0" size="96"/>
> <threadStart threadId="4" time="1099651312.945411205" threadName="Signal
Dispatcher" groupName="system" parentName="" objIdRef="3658"/>
> <objAlloc threadIdRef="5" time="1099651313.502094030" objId="9440"
classIdRef="124" isArray="0" size="88"/>
> <classDef threadIdRef="5"
name="org.eclipse.jdt.internal.junit.runner.RemoteTestRunner$ReaderThread"
sourceName="RemoteTestRunner.java" classId="9439" objIdRef="9440"
time="1099651313.496024847"/>
> <objAlloc threadIdRef="5" time="1099651313.502093315" objId="9441"
classIdRef="9439" isArray="0" size="96"/>
> <threadStart threadId="5" time="1099651313.502091884"
threadName="ReaderThread" groupName="main" parentName="system"
objIdRef="9441"/>
> <objAlloc threadIdRef="2" time="1099651315.600643634" objId="9708"
classIdRef="124" isArray="0" size="88"/>
> <classDef threadIdRef="2" name="profile.test.MyTest"
sourceName="MyTest.java" classId="9843" objIdRef="9708"
time="1099651313.559551715"/>
> <methodDef name="test1" signature="()V" startLineNumber="45"
endLineNumber="46" methodId="9838" classIdRef="9843"/>
> <objAlloc threadIdRef="2" time="1099651315.600725889" objId="9844"
classIdRef="9843" isArray="0" size="16"/>
> <methodEntry threadIdRef="2" time="1099651315.600641727"
methodIdRef="9838" objIdRef="9844" classIdRef="9843" ticket="171027"
stackDepth="16"/>
> <methodExit threadIdRef="2" methodIdRef="9838" objIdRef="9844"
classIdRef="9843" ticket="171027" time="1099651317.602828502"
overhead="0.000169382"/>
> <methodDef name="test2" signature="()V" startLineNumber="48"
endLineNumber="49" methodId="9837" classIdRef="9843"/>
> <objAlloc threadIdRef="2" time="1099651317.604080438" objId="9902"
classIdRef="9843" isArray="0" size="16"/>
> <methodEntry threadIdRef="2" time="1099651317.604057073"
methodIdRef="9837" objIdRef="9902" classIdRef="9843" ticket="171441"
stackDepth="16"/>
> <methodExit threadIdRef="2" methodIdRef="9837" objIdRef="9902"
classIdRef="9843" ticket="171441" time="1099651317.604611873"
overhead="0.000056719"/>
> <threadEnd threadIdRef="5" time="1099651317.606651782"/>
> <threadEnd threadIdRef="2" time="1099651317.636883735"/>
> <runtimeShutdown threadIdRef="1" time="1099651317.636932611"/>
> <traceEnd time="1099651317.638990163"/>
> <agentDestroy agentIdRef="UUID-1099651312-872530-997682102-1023616539"
time="1099651317.639014959"/>
> </TRACE>
>


begin 666 ModelTests.zip
M4$L#!!0`" `(`&>)93$````````````````5````36]D96Q497-T<R\N8VQA
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
M9>,3Z2[Z/E2XG;;2#^AN95YP/CQ_J,R9Z5Y1KW85UL$1N*-@xxxxxxx']J#G
M7=#S8#/>A_;0(RWEE;8A>C*#:FWJC$_CC)6#]).$U+@VTXT9/V,:HE\B0&4-
MT"?NK"'Z-=IVM_TQVK^5WG3;'Z7]M0Y%X750<#N&Z'=,"2+R_G:<0O8`#;BS
M%85'Z9U:IUKUKJQR#M$?4U?A_?WX*M<`];I=UJH/:G6UZB-9I0_17V65I12W
M#H[1]X_XRIP!.L:=8ZW\=(@^0U]NA3O7M.@R=^X@,\;9QK3MP&O8PVQ=!Q[-
MUG*<UVQE%W(6MJBX+Z'X*Y52U@&;SH3'>H%!ZV$*W321?#2##/A?#SR\%^K?
M`-7[80QG848(K3!=1%&ZAF)T+6VB6V@S[:$M]!2=1\_0^?0R74 ?T)?H8[H0
MH/!ESJ"O\%BZB"<B'3\&[Y5T'I]$,:ZG#7PJ7<&G@1,QEAM-E5O&DL-+V,X.
MF$01UW$V.]7_>*IA%^LPCAE<P3F<"Y-9P(6<QV-PBA;.Y'PN`#*LIC^@=RS0
MR4^O*HQT@-L=7(31;/![(Q?S.&#84W0.EZ#/!9Y7L1M4D+E2)8]'7P[6Y_$$
MF#1VD6M-"\^:+3S++Q_DR85\S"#/V$J9MGLR[AD&:E=!H%?C2->D@%J^=3BT
MN)1GRC4&EW%YTOXA'(&W/!Q'+CW"W+R7J[O*=_/QS15[N&8KS:X8Y+E[>5Y7
MO'\W+V@9H'&5@[RXUE;FM@WR$H!29?,`S4)?X[8#[P[03'.116B W"V58H.%
M?*IR&6X1\^,VV :R;;CT2FZWCK(0D8B@98VN@Y2N1Z2Y`4>YD:;#@6?2-JJF
MFV@V?8=JZ6;8RU; R*V CMM XPY:17=2$+ AQZ]3<2&<.'X8$>)NM5N0.[@3
MS^DTF9?S"HBNFG*5<&R@4$3S>"7Z;/+IR<+^:_$NU Z89P`D1,NM,]"L\B%>
MQU#LVV;C4?8VF].Z,:TB,<WL,Z1OB%$S#O'9*7Z846?U*B>T#= DP1%Q0@[6
M9DYT9P[)_Q-0:\ZLPY#I8:^;1",@.C%!RNR+F1N=.WPC<W2S.7K^R*-?,D>_
M,GPTB>!U*FGX`9*#N^&\/X3S_@CA_5[JHOMH#>V@LVDGG4OWTV5H7T.[H)I!
M>IQVTQMPV\_IP10%'4@HZ !?!--GT'H%[G4Q=EI#M_,EL. ,P$$I7PH7L8%J
M'E_&E\-6;5+.IMCQUT15ML5P/"0H_+BMSE9CRZC)+.2OUV059=78B^P/.6H=
MZC<[^R1G1HU>]@!?/9:_$;QR3DY)CL2QR\^>DR.=5\[)D] UQG<+%97DC>5O
MAN?DE:@NS,C+J,G/J"D8H-?P6^%V#/+U-?H`/>'.+LJ_))_=CJ*"69U%^47V
M[33%G5U;6&0ORCK3VC[;79CASLXHRM_#VP;HFS+WD@*>-<:YG2ZY)(/=V;99
M8^;?0I%B9U'^I=Z3G,7.*TOR;O@NE<KNX.N&K32QD+\SR-MK"\O=A>["??"^
M[XFOW477[RB;*/-S2O(&^0<U& =#1848'Z#)M84R29$U3G(.4+'943;(/W07
M/C)1))5?5%"DWWI@;I&NW7Y@1I%MXBU4+G,*^5[H_BZJV3% XQ$M(-$=<-T!
MRC%?[A<_?HK:9.X`-=9F#M#BVJ*[*,M=]$CM6-.B=B63FD+>C5^XSX,)N\+J
M,>AXV*2065O\_;%W'7AZ!^#R8<[%WR/J>30TG,DK\->NGMUT+Y_#F_#7#@OX
MF"_ [R?<+D\X^ 7JN8\?4\_[^4'\61 #8%V*N0_C;1_LZ%%8S&- SL=A:3^&
M[3P!BWX2%OH4`.-IY"0_`=P\@T3P660KSR%S>!Y@_S-D&R\@B+V(X/5S!*U?
M($B]1.?0+Q&$7J9+Z5=T!;T"RW\5`/8:`.K7\(#]\(7?()=Y'3N_@1U^AY$W
M\?L6\IFWZ4/Z/7V"(,+T+H+,'Q$8_H1P\!X\XGT^FO[,D^D#GD8?`J0^X@J<
MLQIA_'AZ"9G.BSR?_LD-]"DWTK^XE?X-2/N,5]'GD- !^=^A'&0-DK)!4IF0
MBX,O1W"[FYU\+T+;_0AJ#T*Z#R&0[</88_ R\<[_(/&%%\6]DQ_G1_DQ2;G1
M,N%3X_/X<>6=F:#\8[1LY. 6?H*?A%1SN)&?0E\6XDX#DN=\A,9Q/)]_PL] 
MWA-Y#C^+5C9Y$&"?`YHXZ1B>Q<]CGDY5`..?\L^@D_D\CE] *P_R_I1?Q&@^
MI/YW_CF>!9#Q!/X%J!1"B@7\DK0@OQS^)3@HA 3S`.4OHS697/PK?@6M5=A;
MX#V3#=5Z%:TME,&OJ;Z'<"9I%0-;!O@N*_R>+^?"<_R$,?;;)>Z6EMANN(GT
MTI*L&V\>%H>+)89";UE<!%F,HV(NH1(>KR1Z@xxxxxxxxxxxxxxx:CV',VJJ
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
MH<*.CZ8>RYJQ9N?$J<!?4IEJ/X@xxxxx]A6(2=[E&_'>06]K@)I,DGCG>4F:
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
%*@``````
`
end