From 07abaaec4c94de478f038c4bb9b805d859026b0e Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Sat, 14 Oct 2017 16:07:46 +0200 Subject: [PATCH] Add plot and message log documentation. --- README.md | 12 ++++++++++++ doc/messages.png | Bin 0 -> 4704 bytes doc/plot.png | Bin 0 -> 9534 bytes 3 files changed, 12 insertions(+) create mode 100644 doc/messages.png create mode 100644 doc/plot.png diff --git a/README.md b/README.md index e81b4bb8..7319f73e 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,18 @@ The standard `std::lock_guard` and `std::unique_lock` wrappers should use the `L To mark the location of lock being held, use the `LockMark( varname )` macro, after you have obtained the lock. Note that the varname must be a lock variable (a reference is also valid). This step is optional. +#### Plotting data + +Tracy is able to capture and draw value changes over time. You may use it to analyse memory usage, draw call count, etc. To report data, use the `TracyPlot( name, value )` macro. + +![](doc/plot.png) + +#### Message log + +Fast navigation in large data set and correlation of zones with what was happening in application may be difficult. To ease these issues tracy provides a message log functionality. You can send messages (for example, your typical debug output) using the `TracyMessage( text, size )` macro (tracy will allocate memory for message storage). Messages are displayed on a chronological list and on the zone view. + +![](doc/messages.png) + #### Running the server The easiest way to get going is to build the standalone server, available in the `standalone` directory. You can connect to localhost or remote clients and view the collected data right away. diff --git a/doc/messages.png b/doc/messages.png new file mode 100644 index 0000000000000000000000000000000000000000..0c1e68fe00851062ca37075ad1d93e59159a20d2 GIT binary patch literal 4704 zcmaJ_c{r5c+qaAi!q^feGuC0ojIopO*cyZ(+t`h*Oj?)$mUIoExzb3dQY=X#!#Ofb91$u7*!z`($1gx9xZ zU|<61&x=rIx_2LVZ$=Mn0eE6C0|Q3?ln`(DMI%#!?F}wLdiE~DB`X8^Vs=ihliV8fMas%0$|}VwDkUl^r7Egg zB-K(?)iPDJGIceonmScoygehMdir|CriOT9LsJ6& zk{RCI(#XWb#LUdZ((00F)+N(yQ?o2nvurbSf|+@)nYEocAp@7fV-i1r0U z`&y!XoxQ_7dsmXZtA~R_y@O-Dqho`kQ==n^?Bqmqc6s1T_Hl7}=;B)J;@afm;pOVu z?CRF+=GNlo*6K!TC6U@l?(OdG1@7)0?&L@A6koEBuZM4-r)RgPSGT8krl)t7pI@=R ze~JIqs({e2z_5s*;L_mmh~V(Z&}(I(kx|#KM~6pLhDXQ5CM4cSyamQTymk9d@}0Dl zl-88A^wf;Z)Qqh3?3|3;yP27f^76V0N=k}K%czxAl{K~1b@ys&p4T-rwzhXXdfeIB z)!o%K+}+#z^x5;i{+C0;!*AbCzI*rX{rmT0x!*HSA`FuG+kWajmOGHOP{Yh_@8xt$9MAggX5uJ4?J0GL2DsuVy~XE{T?P&N31 zV-l1!i&>~d<1G9juUaD9)Qh}wThSSExk@g2A5W>YXb((af1IdlBN@KF8$+N4jSvv4 z(=5a?treTGjndncIHfaWsmiT*c%9HZX%pLI3wy1gA30xDRH149PKjf6R?2i*ejwlZ z%Npu)P}xv++XA9zu$|3b|9we3>~8o+nTR9x%~uvG?`Ndz@MSkwTHF(_cj=kHwvv|;pYA8SAxjy8x8?(VTef&vU3FvLE`Ln$0UHQNb zT1csZU(FMR0EBXzH_O=*8r&XlsiWL-`VtAaqhZ!Xk2JpihkkwgXg$K1D{xnfGJj5w zu;(T+>>A&un-;L_%reUlF>Qc<#e^lclm|mco2?N*p&GQX(|GDK?Ie1@@*_X51l+qG zMQM<@Vbf?2D9M3nPIIk;wfj|zx3p5PT8-KO2%Ayn9oEdyz0--4m3F!pD`0?<&2YfB z(RB#1M~86vISyl^11tNNY;8w9C1r2uS|XL9l7KSoC)?VS&4gFACj~%Z8D!ZMI{=01 zUb+DfGBu5-N__zKV$Zye8B6h_Q_pF{6(>ovd)Diw{q={k32$roN$`}dEZ*5x?{VFU zCw(Voyt*#|&%5_co~%);$Cs%8>J;9{g074!x0b={&I08<%+@(Bw&IqvmQ#P&Xm&=R zZj@kme5S?G>2-YCS*yEL*lcoetrXswVzA2w8uM9cl>0DnMq*9?i)`#GBCnLScLi{~ zhtgw!B>OXK9+)`$vs@zGvm*kW?%-Z>gHHmW&5$6NJ?_7S0uF&7;B{zV#jd{lr+*(t zidz6i<|Du1R=^&KxLGlSn(70^qE(%^`^xEYaMKK&HnOOs&gsIrIQW1CtB6v|CDIH7 z4DuNA11$!PgV!xT&L?arWK;Dj9QYJ72n)gxkNvTz)ChWM)9aFZtcGvmedG8_|D^!WspKHRBI z>rMBTIwnaMb$$204dC}$Z=uO{_CBKlh5*wwN!V~vAI&nveo*x+;dmi-^?te z=6y&?ZYMoCd=Yl6F?H%_tFr6}Cu;yB3A6MZXdfT+c{_xEe{#Hk3hEOec{s0~+L`Eb z7`1FH+!C&vFS=D?q5AVzx@!!hGmfaHFVpPbTR1mgSNI~NE(H4h)c7isJ#9eD*Ayj?oVGL;so4pJ$QK0XQCc_Gq={Ppxp>AM$Q zJ8Rkx8yw{8V zJ%C=|ZC(9GlX@kl;Ds`k0VqN3EC!CZGdFaD!=Ii!9P}Hz{VCD`KG+KvMtbjSDPumx z-nSh|>zU47TV?8OUk!M=h0XtL!T=TX(N*u-5JHba8_<7kc|4(d$kfe^{!oOew z6O$={y5ug#@;HbSJzZTLb$I>!O=_AmaQ^#hzu+ja%^GdN7~)a;kcwd14$cQ>_JDhPE-d&<5Vq80U`^n34Nfl1eFI*t_q3RInd03&KFJ!dS;qLjXT zTM`^I%;7a*qW?EU=+HIq-!|gPlm0amrX&E)soD5{gl$o~Pc{tk8gW${);b{dhBUaVs3_?cn5BwN}|I@66ulD)R(`UW8u zciI(Ju{Grop4>l5lu^*kl%+)D5q$MRa2A%~?-vs<=kJ_X9Zc4g=Z`Z|ejs*(2=`+3 zmD~U?GVURKH9G4vW$_E&^#KMj3Z;_~8&+$UFJ)CPm z(>u~xZ0(IqQnRi8eJWYwzTWQkUgSg+zRJ_Am+%SE`<*<=)_mAx7n>P5%j+Kc&4lV- zO}k(!?q)0Dt;g>D90m?V*_3(`dr#>fu2P+a7GdP$_m%BU=gikvBKs!ZpW65xHx?}> z{&tJ6s+!-4o^qhqOTSGZ#8Gzn5ki(SuUxGQYJS7+iFS&!wmE?dVnMmKg>aWZcjl*I zq+$>q@vs!MDIH-6c{W%sOW70%@rqDZCJ<@)$~?Tpjbf>%YNsaNL&~T;!5Iw#!D~X} z)+2-B=~{cs;hVJ`V_E%Mo$)CirH@wf8tZx)X~_20+$ zTy34g;@8ftJekBjeyx3`alJPIk^w}S;5pb)3s(l zgDX-TP~-2^5Z=o=p#;GZUpdeGmFz1An?vl-X6BAz{>@8k8$)=%owDQV_Dz$IrHP0- zR`2$6ifM zH0^UBd_WA(RM_L)V>?pF;S*&Qt{QRS+E^R*2HPOxkn^K{l=tr4>m59j`gS0{&iZWg zXB5&t?5HQ;4SD=O!z(i^5;1h zBNKF$G4lEpcgQOPLI2FSZm?qU%EZ-vf%(9m2sxDpE-jj}Qczr^FXthf?tfl;#Xazd ZTVdyg0sJ!YH2rpm!N|Z&|Gus(_+NnxDn9@K literal 0 HcmV?d00001 diff --git a/doc/plot.png b/doc/plot.png new file mode 100644 index 0000000000000000000000000000000000000000..f2d7970dd8ee6d4413e0f0398cac50a0fd204829 GIT binary patch literal 9534 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 JDwZ(t{U3@Ei8ufN literal 0 HcmV?d00001