From 9af0e82b25db25650e5a4710b0a8e0214a5c2815 Mon Sep 17 00:00:00 2001 From: Hendy Irawan Date: Thu, 30 Apr 2015 16:41:20 +0700 Subject: [PATCH] File and function name compression support. Fixed #1. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added test files by @john-huang and @derickr. Thank you Stéphane Boisvert. --- .gitignore | 59 ++++++ RegExpr/RegExpr.dcu | Bin 53297 -> 53659 bytes WinCacheGrind.dof | 136 +++++++++++++ WinCacheGrind.ini | 18 ++ cachegrind.out File Format.md | 8 + ...hegrind.out._mnt_hgfs_www_www_www_test_php | 183 ++++++++++++++++++ test/cachegrind.out.bug00631 | 34 ++++ test/cachegrind.out.test1 | 34 ++++ test/cachegrind.out.test1compressed | 34 ++++ uCacheGrind.pas | 52 ++++- uMain.ddp | Bin 0 -> 51 bytes uMain.dfm | 20 +- uMain.pas | 11 +- 13 files changed, 567 insertions(+), 22 deletions(-) create mode 100644 .gitignore create mode 100644 WinCacheGrind.dof create mode 100644 WinCacheGrind.ini create mode 100644 test/cachegrind.out._mnt_hgfs_www_www_www_test_php create mode 100644 test/cachegrind.out.bug00631 create mode 100644 test/cachegrind.out.test1 create mode 100644 test/cachegrind.out.test1compressed create mode 100644 uMain.ddp diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bdebfa2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,59 @@ +.directory + +# Uncomment these types if you want even more clean repository. But be careful. +# It can make harm to an existing project source. Read explanations below. +# +# Resource files are binaries containing manifest, project icon and version info. +# They can not be viewed as text or compared by diff-tools. Consider replacing them with .rc files. +#*.res +# +# Type library file (binary). In old Delphi versions it should be stored. +# Since Delphi 2009 it is produced from .ridl file and can safely be ignored. +#*.tlb +# +# Diagram Portfolio file. Used by the diagram editor up to Delphi 7. +# Uncomment this if you are not using diagrams or use newer Delphi version. +#*.ddp +# +# Visual LiveBindings file. Added in Delphi XE2. +# Uncomment this if you are not using LiveBindings Designer. +#*.vlb +# +# Deployment Manager configuration file for your project. Added in Delphi XE2. +# Uncomment this if it is not mobile development and you do not use remote debug feature. +#*.deployproj +# + +# Delphi compiler-generated binaries (safe to delete) +*.exe +*.dll +*.bpl +*.bpi +*.dcp +*.so +*.apk +*.drc +*.map +*.dres +*.rsm +*.tds +*.dcu +*.lib + +# Delphi autogenerated files (duplicated info) +*.cfg +*Resource.rc + +# Delphi local files (user-specific info) +*.local +*.identcache +*.projdata +*.tvsconfig +*.dsk + +# Delphi history and backups +__history/ +*.~* + +# Castalia statistics file +*.stat diff --git a/RegExpr/RegExpr.dcu b/RegExpr/RegExpr.dcu index d703b892c683c73bb629f7f4fd72f4b441d6e865..5049365038aaa0cdc1a87c5ec53179e4eddab213 100644 GIT binary patch delta 18266 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 delta 17955 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 diff --git a/WinCacheGrind.dof b/WinCacheGrind.dof new file mode 100644 index 0000000..849dc40 --- /dev/null +++ b/WinCacheGrind.dof @@ -0,0 +1,136 @@ +[FileVersion] +Version=7.0 +[Compiler] +A=8 +B=0 +C=1 +D=1 +E=0 +F=0 +G=1 +H=1 +I=1 +J=0 +K=0 +L=1 +M=0 +N=1 +O=1 +P=1 +Q=0 +R=0 +S=0 +T=0 +U=0 +V=1 +W=0 +X=1 +Y=1 +Z=1 +ShowHints=1 +ShowWarnings=1 +UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +NamespacePrefix= +SymbolDeprecated=1 +SymbolLibrary=1 +SymbolPlatform=1 +UnitLibrary=1 +UnitPlatform=1 +UnitDeprecated=1 +HResultCompat=1 +HidingMember=1 +HiddenVirtual=1 +Garbage=1 +BoundsError=1 +ZeroNilCompat=1 +StringConstTruncated=1 +ForLoopVarVarPar=1 +TypedConstVarPar=1 +AsgToTypedConst=1 +CaseLabelRange=1 +ForVariable=1 +ConstructingAbstract=1 +ComparisonFalse=1 +ComparisonTrue=1 +ComparingSignedUnsigned=1 +CombiningSignedUnsigned=1 +UnsupportedConstruct=1 +FileOpen=1 +FileOpenUnitSrc=1 +BadGlobalSymbol=1 +DuplicateConstructorDestructor=1 +InvalidDirective=1 +PackageNoLink=1 +PackageThreadVar=1 +ImplicitImport=1 +HPPEMITIgnored=1 +NoRetVal=1 +UseBeforeDef=1 +ForLoopVarUndef=1 +UnitNameMismatch=1 +NoCFGFileFound=1 +MessageDirective=1 +ImplicitVariants=1 +UnicodeToLocale=1 +LocaleToUnicode=1 +ImagebaseMultiple=1 +SuspiciousTypecast=1 +PrivatePropAccessor=1 +UnsafeType=0 +UnsafeCode=0 +UnsafeCast=0 +[Linker] +MapFile=0 +OutputObjs=0 +ConsoleApp=1 +DebugInfo=0 +RemoteSymbols=0 +MinStackSize=16384 +MaxStackSize=1048576 +ImageBase=4194304 +ExeDescription= +[Directories] +OutputDir= +UnitOutputDir= +PackageDLLOutputDir= +PackageDCPOutputDir= +SearchPath= +Packages= +Conditionals= +DebugSourceDirs= +UsePackages=0 +[Parameters] +RunParams= +HostApplication= +Launcher= +UseLauncher=0 +DebugCWD= +[Language] +ActiveLang= +ProjectLang= +RootDir= +[Version Info] +IncludeVerInfo=0 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1057 +CodePage=1252 +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= diff --git a/WinCacheGrind.ini b/WinCacheGrind.ini new file mode 100644 index 0000000..af59476 --- /dev/null +++ b/WinCacheGrind.ini @@ -0,0 +1,18 @@ +[Main] +WorkingDir= +[Display] +TimeDisplay=0 +HideFastFuncs=0 +FastThreshold=1 +HideLibFuncs=0 +ShowFullPath=0 +[Privacy] +TrackMRU=1 +ClearMRUOnExit=0 +MaxMRUCount=4 +[Editor] +EditorPath= +[MRU] +Count=1 +Entry0=C:\Users\ceefour\git\wincachegrind\test\cachegrind.out.test1compressed +Title0=/home/data/www/htdocs/example.php diff --git a/cachegrind.out File Format.md b/cachegrind.out File Format.md index 61ddf0b..33ed655 100644 --- a/cachegrind.out File Format.md +++ b/cachegrind.out File Format.md @@ -73,3 +73,11 @@ Why it's not included in "main program" is because these are called not by main program but by PHP mechanism. The entries here are identical to *BODY PART*. + +## File and Function Name Compresssion + +See http://valgrind.org/docs/manual/cl-format.html#cl-format.overview.compression1 + +Original issue: https://github.com/ceefour/wincachegrind/issues/1 + +Thanks to Stéphane Boisvert for donation. :) diff --git a/test/cachegrind.out._mnt_hgfs_www_www_www_test_php b/test/cachegrind.out._mnt_hgfs_www_www_www_test_php new file mode 100644 index 0000000..ac4bd12 --- /dev/null +++ b/test/cachegrind.out._mnt_hgfs_www_www_www_test_php @@ -0,0 +1,183 @@ +version: 1 +creator: xdebug 2.3.2 +cmd: E:/www/www/www/test.php +part: 1 +positions: line + +events: Time + +fl=(1) E:/www/www/www/test.php +fn=(1) B->_sayEnd +12 3 + +fl=(1) +fn=(2) A->say +3 54 +cfl=(1) +cfn=(1) +calls=1 0 0 +6 3 + +fl=(1) +fn=(1) +12 0 + +fl=(1) +fn=(2) +3 24 +cfl=(1) +cfn=(1) +calls=1 0 0 +6 0 + +fl=(1) +fn=(1) +12 0 + +fl=(1) +fn=(2) +3 22 +cfl=(1) +cfn=(1) +calls=1 0 0 +6 0 + +fl=(1) +fn=(1) +12 0 + +fl=(1) +fn=(2) +3 20 +cfl=(1) +cfn=(1) +calls=1 0 0 +6 0 + +fl=(1) +fn=(1) +12 1 + +fl=(1) +fn=(2) +3 21 +cfl=(1) +cfn=(1) +calls=1 0 0 +6 1 + +fl=(1) +fn=(1) +12 1 + +fl=(1) +fn=(2) +3 20 +cfl=(1) +cfn=(1) +calls=1 0 0 +6 1 + +fl=(1) +fn=(1) +12 0 + +fl=(1) +fn=(2) +3 46 +cfl=(1) +cfn=(1) +calls=1 0 0 +6 0 + +fl=(1) +fn=(1) +12 0 + +fl=(1) +fn=(2) +3 22 +cfl=(1) +cfn=(1) +calls=1 0 0 +6 0 + +fl=(1) +fn=(1) +12 0 + +fl=(1) +fn=(2) +3 20 +cfl=(1) +cfn=(1) +calls=1 0 0 +6 0 + +fl=(1) +fn=(1) +12 0 + +fl=(1) +fn=(2) +3 20 +cfl=(1) +cfn=(1) +calls=1 0 0 +6 0 + +fl=(1) +fn=(3) thisIsFun +17 309 +cfl=(1) +cfn=(2) +calls=1 0 0 +20 57 +cfl=(1) +cfn=(2) +calls=1 0 0 +20 25 +cfl=(1) +cfn=(2) +calls=1 0 0 +20 23 +cfl=(1) +cfn=(2) +calls=1 0 0 +20 21 +cfl=(1) +cfn=(2) +calls=1 0 0 +20 22 +cfl=(1) +cfn=(2) +calls=1 0 0 +20 22 +cfl=(1) +cfn=(2) +calls=1 0 0 +20 47 +cfl=(1) +cfn=(2) +calls=1 0 0 +20 23 +cfl=(1) +cfn=(2) +calls=1 0 0 +20 21 +cfl=(1) +cfn=(2) +calls=1 0 0 +20 21 + +fl=(1) +fn=(4) {main} + +summary: 708 + +1 108 +cfl=(1) +cfn=(3) +calls=1 0 0 +23 600 + diff --git a/test/cachegrind.out.bug00631 b/test/cachegrind.out.bug00631 new file mode 100644 index 0000000..f47c1f8 --- /dev/null +++ b/test/cachegrind.out.bug00631 @@ -0,0 +1,34 @@ +version: 1 +creator: xdebug 3.%s +cmd: %sbug00631.php +part: 1 +positions: line + +events: Time + +fl=(1) php:internal +fn=(1) php::register_shutdown_function +%d %d + +fl=(1) +fn=(2) php::strlen +%d %d + +fl=(2) %sbug00631.php +fn=(3) {main} + +summary: %d + +%d %d +cfl=(1) +cfn=(1) +calls=1 0 0 +%d %d +cfl=(1) +cfn=(2) +calls=1 0 0 +%d %d + +fl=(1) +fn=(4) php::xdebug_get_profiler_filename +%d %d diff --git a/test/cachegrind.out.test1 b/test/cachegrind.out.test1 new file mode 100644 index 0000000..1c3b145 --- /dev/null +++ b/test/cachegrind.out.test1 @@ -0,0 +1,34 @@ +version: 0.9.6 +cmd: /home/data/www/htdocs/example.php +part: 1 + +events: Time Memory Cycles Peakmemory + +fl=/home/data/www/htdocs/example.php +fn=test3 +11 16 40 0 0 + +fl=/home/data/www/htdocs/example.php +fn=test3 +12 7 0 0 0 + +fl=/home/data/www/htdocs/example.php +fn=test2 +7 141 120 0 0 +cfn=test3 +calls=1 0 0 +11 16 40 0 0 +cfn=test3 +calls=1 0 0 +12 7 0 0 0 + +fl=/home/data/www/htdocs/example.php +fn=test1 +3 60 120 0 0 +cfn=test2 +calls=1 0 0 +7 165 160 0 0 + +fl=/home/data/www/htdocs/example.php +fn=test4 +4 6 0 0 0 diff --git a/test/cachegrind.out.test1compressed b/test/cachegrind.out.test1compressed new file mode 100644 index 0000000..d9e54e0 --- /dev/null +++ b/test/cachegrind.out.test1compressed @@ -0,0 +1,34 @@ +version: 0.9.6 +cmd: /home/data/www/htdocs/example.php +part: 1 + +events: Time Memory Cycles Peakmemory + +fl=(1) /home/data/www/htdocs/example.php +fn=(1) test3 +11 16 40 0 0 + +fl=(1) +fn=(1) +12 7 0 0 0 + +fl=(1) +fn=(2) test2 +7 141 120 0 0 +cfn=(1) +calls=1 0 0 +11 16 40 0 0 +cfn=(1) +calls=1 0 0 +12 7 0 0 0 + +fl=(1) +fn=test1 +3 60 120 0 0 +cfn=(2) +calls=1 0 0 +7 165 160 0 0 + +fl=(1) +fn=test4 +4 6 0 0 0 diff --git a/uCacheGrind.pas b/uCacheGrind.pas index ed6753b..d2c1b01 100644 --- a/uCacheGrind.pas +++ b/uCacheGrind.pas @@ -19,7 +19,7 @@ interface -uses Classes, SysUtils, JclStrHashMap; +uses Classes, SysUtils, JclStrHashMap, RegExpr; type // Types @@ -697,6 +697,37 @@ TCallBuffer = record CurInst, LastInst: TProfInstance; Stack, Buffer: TList; I, P, ParserLine: Integer; + Compresseds: TStringHashMap; + +function Uncompress(section: string; raw: string): string; +var + id: string; + key: string; + _content: PString; +begin + with TRegExpr.Create do try + // check if this is an assignment of compression + Expression := '\((\d+)\)\s*(.*)'; + if Exec(raw) then begin + id := Match[1]; + key := section + '-' + id; + if Match[2] <> '' then begin + // this is an assignment + New(_content); + _content^ := Match[2]; + Compresseds.Add(key, _content); + Result := Match[2]; + end else begin + // this is an uncompression + Result := PString(Compresseds.Data[key])^; + end; + end else begin + // otherwise just return as-is + Result := raw; + end; + finally Free; + end; +end; procedure Error(Msg: string); var @@ -752,6 +783,12 @@ procedure ClearBuffer; Buffer.Clear; end; + function FreeHashData(AUserData: Pointer; AStr: string; var APtr: PString): Boolean; + begin + Dispose(APtr); + Result := True; + end; + var CurBuf: PCallBuffer; Target: TProfInstance; @@ -777,6 +814,7 @@ procedure ClearBuffer; FSummaryExists := False; Stack := TList.Create; Buffer := TList.Create; + Compresseds := TStringHashMap.Create(TCaseSensitiveTraits.Create, 100000); ParserLine := 1; try while not Eof(F) do begin @@ -799,10 +837,10 @@ procedure ClearBuffer; State := stBody; end; stBody: begin - if Copy(S, 1, 3) = 'fl=' then - CurFL := Copy(S, 3 + 1, Length(S) - 3) - else if Copy(S, 1, 3) = 'fn=' then begin - CurFN := Copy(S, 3 + 1, Length(S) - 3); + if Copy(S, 1, 3) = 'fl=' then begin + CurFL := Uncompress('fl', Copy(S, 3 + 1, Length(S) - 3) ) + end else if Copy(S, 1, 3) = 'fn=' then begin + CurFN := Uncompress('fn', Copy(S, 3 + 1, Length(S) - 3) ); if CurFL = '' then Error('Parser error: fl is not valid.'); if CurFN = '' then Error('Parser error: fn is not valid.'); CurInst := CreateInstance(CurFN, CurFL); // TODO: SLOW! @@ -831,7 +869,7 @@ procedure ClearBuffer; // must have inst first if CurInst = nil then Error('Parser error: Parsing '+ S +': Current instance is NULL.'); // get function name - A := Copy(S, 4 + 1, Length(S) - 4); + A := Uncompress('fn', Copy(S, 4 + 1, Length(S) - 4) ); // add to call buffer New(CurBuf); Buffer.Add(CurBuf); @@ -925,6 +963,8 @@ procedure ClearBuffer; Stack.Clear; end; finally + Compresseds.Iterate(nil, @FreeHashData); + Compresseds.Free; Stack.Free; Buffer.Free; end; diff --git a/uMain.ddp b/uMain.ddp new file mode 100644 index 0000000000000000000000000000000000000000..4370276c196a7fa73d6f8917622cba1c4e033dee GIT binary patch literal 51 zcmZRVaB=ks@bJ`g@pN<#a`e>;@DB=c^Y`)e=VxGe;K0Pl$;KI)SCUzhlbT}4#=r!G E07ZHWvj6}9 literal 0 HcmV?d00001 diff --git a/uMain.dfm b/uMain.dfm index 32bb452..5ecd353 100644 --- a/uMain.dfm +++ b/uMain.dfm @@ -1,6 +1,6 @@ object fMain: TfMain - Left = 855 - Top = 272 + Left = 637 + Top = 224 Width = 635 Height = 431 ActiveControl = lvExplorer @@ -24,16 +24,16 @@ object fMain: TfMain TextHeight = 13 object sExplorer: TSplitter Left = 0 - Top = 270 - Width = 627 + Top = 257 + Width = 619 Height = 4 Cursor = crVSplit Align = alBottom end object sb: TStatusBar Left = 0 - Top = 366 - Width = 627 + Top = 353 + Width = 619 Height = 19 AutoHint = True Panels = < @@ -45,7 +45,7 @@ object fMain: TfMain object ToolBar1: TToolBar Left = 0 Top = 0 - Width = 627 + Width = 619 Height = 28 AutoSize = True BorderWidth = 1 @@ -112,8 +112,8 @@ object fMain: TfMain end object lvExplorer: TListView Left = 0 - Top = 274 - Width = 627 + Top = 261 + Width = 619 Height = 92 Align = alBottom Columns = < @@ -151,7 +151,7 @@ object fMain: TfMain object tbTabs: TJvTabBar Left = 0 Top = 28 - Width = 627 + Width = 619 Images = ilIcons Tabs = < item diff --git a/uMain.pas b/uMain.pas index 4a4bc66..993e313 100644 --- a/uMain.pas +++ b/uMain.pas @@ -305,15 +305,14 @@ procedure TfMain.aHelpAboutExecute(Sender: TObject); try MessageDlg( 'WinCacheGrind version '+ VI.BinFileVersion + #13#10 + - 'Copyright (C) 2005 Hendy Irawan'#13#10 + + 'Copyright (C) 2005-2015 Hendy Irawan'#13#10 + #13#10 + 'Contact information:'#13#10 + - 'E-mail: ceefour@gauldong.net'#13#10 + - 'Web: http://wincachegrind.sourceforge.net/'#13#10 + + 'Web: http://ceefour.github.io/wincachegrind/'#13#10 + + 'E-mail: hendy@hendyirawan.com'#13#10 + #13#10 + - 'This program is licensed under GNU General Public License version ' + - '2 or later.'#13#10 + - 'See GPL.txt for more information.', mtInformation, [mbOK], 0); + 'This program is licensed under GNU General Public License version v3.'#13#10 + + 'See LICENSE file for more information.', mtInformation, [mbOK], 0); finally FreeAndNil(VI); end;