Version 0.3.0 (2013-09-14) -------------------------- * GNU profiler compatible call graph report: index % time self children calls name 0.00 0.53 1/1 [1] 100.0 0.00 0.53 1 demo$_run_closure1.doCall [1] 0.00 0.53 1/1 demo$_run_closure1.fib [2] ----------------------------------------------------------------------------- 0.00 0.53 1/1 demo$_run_closure1.doCall [1] [2] 99.9 0.00 0.53 1 demo$_run_closure1.fib [2] 0.29 0.24 2/2 demo.fib [3] 0.00 0.00 2/21890 java.lang.Integer.minus [4] 0.00 0.00 1/10945 java.lang.Integer.plus [5] ----------------------------------------------------------------------------- 0.29 0.24 2/2 demo$_run_closure1.fib [2] [3] 99.6 0.29 0.24 2+21888 demo.fib [3] 0.16 0.00 21888/21890 java.lang.Integer.minus [4] 0.08 0.00 10944/10945 java.lang.Integer.plus [5] ----------------------------------------------------------------------------- 0.00 0.00 2/21890 demo$_run_closure1.fib [2] 0.16 0.00 21888/21890 demo.fib [3] [4] 30.4 0.16 0.00 21890 java.lang.Integer.minus [4] ----------------------------------------------------------------------------- 0.00 0.00 1/10945 demo$_run_closure1.fib [2] 0.08 0.00 10944/10945 demo.fib [3] [5] 15.0 0.08 0.00 10945 java.lang.Integer.plus [5] ----------------------------------------------------------------------------- * GNU profiler compatible and improved flat report: % cumulative self self total self total self total time seconds seconds calls ms/call ms/call min ms min ms max ms max ms name 54.3 0.29 0.29 2 145.86 267.78 38.14 58.56 253.57 477.00 demo.fib 30.4 0.45 0.16 21890 0.00 0.00 0.00 0.00 0.80 0.80 java.lang.Integer.minus 15.0 0.53 0.08 10945 0.00 0.00 0.00 0.00 0.83 0.83 java.lang.Integer.plus 0.1 0.53 0.00 1 1.05 537.10 1.05 537.10 1.05 537.10 demo$_run_closure1.fib 0.0 0.53 0.00 1 0.13 537.23 0.13 537.23 0.13 537.23 demo$_run_closure1.doCall * Reduced overhead costs * API to profile particular segments of code: + start: starts profiling + stop: stops profiling + reset: resets the result of profiling def prof = new Profiler() prof.start() // code to profile prof.stop() prof.report.prettyPrint() * Changed the package structure: from gprof.* to groovyx.gprof.* * Changed the versioning scheme: from $major.$minor.$maintenance to $major.$minor.$maintenance-groovy-$groovyVersion * Bug fixes: + Methods which are added dynamically are not profiled + Hangs up until all of profiled threads (except for a profiler thread) die Version 0.2.0 (2013-04-14) -------------------------- * Support for multi-threaded applications * Support for using Grape * Added includeMethods and excludeMethods options that filter by the name of packages, classes and methods: It supports the following wildcards: | * | zero or more characters | | ? | exactly one character | The following example profile only methods which are of "java.*" or "groovy.*" package but are not constructors: profile( includeMethods: [ "java.*", "groovy.*" ], excludeMethods: [ "*.ctor" ]) { // code to be profiled } * Added includeThreads and excludeThreads options that filter by the name of threads: It supports the following wildcards: | * | zero or more characters | | ? | exactly one character | The following example profile only methods which are called in the "thread-*" thread but not in "thread-2" or "thread-3": profile( includeThreads: [ "thread-*" ], excludeThreads: [ "thread-2", "thread-3" ]) { // code to be profiled } * Bug fixes: + GProf fails to profile a multi-threaded application + Contains the time of children if the depth is more than two + There are classes that are not profiled Version 0.1.0 (2013-04-03) --------------------------