=head1 NAME

Changes - List of significant changes to Devel::NYTProf

(As of $Date: 2010-11-30 22:16:59 +0000 (Tue, 30 Nov 2010) $ $Revision: 1406 $)

=cut

=head2 Changes in Devel::NYTProf 4.06 (svn r1406) 30th Nov 2010

Fixed risk of nytprofhtml failure due to over-long filenames RT#62319

Improved handling of Class::MOP/Moose generated methods. Improved handling of embedded filenames, e.g., "(eval N)[$path]" Updated and clarified usecputime=1 docs. Updated tests for (expected) new functionality in Sub::Name. Updated tests for changes in perl 5.13.x.

Added special handling for the perl built-in accept() Effectively the clock stops ticking while in accept(). This makes profiles of pure-perl web servers more useful. Added --no-mergeevals option to nytprofhtml. Added "If Statement and Subroutine Timings Don't Match" and "If Headline Subroutine Timings Don't Match the Called Subs" sections to the DATA COLLECTION AND INTERPRETATION docs. Added note to the docs re profiling applications that use Coro.

=head2 Changes in Devel::NYTProf 4.05 (svn 1359) 15th Sept 2010

Fixed tests to work with a new optimization in perl 5.13.4. Fixed handling of negative values for subroutine line ranges (that may be added to %DB::sub by buggy software). Fixed handling of negative times from unstable clocks that caused spikes in statement times. Fixed risk of bad line numbers hanging report generation.

=head2 Changes in Devel::NYTProf 4.04 (svn 1332) 9th July 2010

Profile now reports presence of the slow regex match vars ($& $' $`). The (cumulative inclusive) recursion time measured for subs that are involved in recursion is now reported as 'recursion: ... sum of overlapping time'. Trace log messages are now flushed immediately. Reduced risk of crashes in embedded applications that don't handle PL_endav carefully, like current versions of mod_perl.

=head2 Changes in Devel::NYTProf 4.03 (svn 1316) 19th June 2010

Fixed another nytprofhtml performance problem for profiles with many files/evals. Much faster merging of evals now.

For subs that recurse, show max depth and time in subroutine table.

=head2 Changes in Devel::NYTProf 4.02 (svn 1309) 17th June 2010

Fixed nytprofhtml performance problem for profiles with many files/evals.

Added progress reporting to nytprofhtml.

=head2 Changes in Devel::NYTProf 4.01 (svn 1296) 10th June 2010

Fixed links from block/sub level report pages to string eval report pages. RT#58284

Restored ordering of line - block - sub links on index page.

Clarified that saving the source code of string evals requires perl version 5.8.9+, 5.10.1+, 5.12 or later. RT#58283

=head2 Changes in Devel::NYTProf 4.00 (svn 1291) 8th June 2010

Major changes:

Added profile reporting of code executed in string evals. Each string eval executed gets it's own report page. You can 'see' the code that was executed, with profile info. String evals may be collapsed/merged in some cases.

Improved many sub-optimal behaviours related to string evals.

Subroutine calls that couldn't be associated with a specific line, such as calls made by perl to END blocks, are now shown in reports.

Subroutine definitions that couldn't be associated with a specific file, such as xsubs in packages with no perl source, are now shown in reports.

Enabled savesrc=1 by default.

The data file format has changed so v3.x files can't be read. The Devel::NYTProf::ReadStream interface has also changed.

Other changes:

Fixed off-by-1 error in number of Files an xsub/opcode was called from. Fixed Devel::NYTProf::Apache to work in more situations and enable the addpid option by default. Fixed that END blocks defined at runtime are included in the profile thanks to Nicholas Clark.

Compilation-only checks (perl -c) can be profiled thanks to Nicholas Clark. Improved behaviour for 'duplicate' anon-subs defined in separate invocations of a particular string eval. Multiple BEGINs (e.g., use) on the same line get distinct names.

Added --minimal option to nytprofhtml to disable generation of graphviz .dot files and block/sub-level statement report files. Added automatic detection of calls to POSIX::exit() by the sub profiler so finishprofile() gets called and a usable profile is produced. Added posix_exit=1 option to do the same thing (in a different way) when the sub profiler is not being used (i.e., subs=0).

Documentation Changes:

Sequences of blank lines are skipped in generated reports. Relevant for savesrc mode in which perl doesn't store pod sections. Corrected typos in nytprofhtml docs thanks to chocolate@cpan.org. Documented how to use Devel::NYTProf::Apache with virtual hosts that use the PerlOptions +Parent or +Clone configuration.

=head2 Changes in Devel::NYTProf 3.11 (svn 1171) 12th March 2010

Fixed assorted issues on Windows thanks to Jan Dubois. Fixed assorted issues 64bit systems thanks to Jan Dubois.

Refactored I/O to create an API that encapsulates the data file format, thanks to Nicholas Clark. Updated and optimized nytprofmerge to use the new API yielding a significant speed boost, thanks to Nicholas Clark.

=head2 Changes in Devel::NYTProf 3.02 (svn 1094) 5th March 2010

Fixed handling of usecputime=1 option and updated docs to note the significant limitations. Fixed association of XS subs to source files in some edge cases thanks to Nicholas Clark. Fixed nytprofmerge edge cases thanks to Nicholas Clark.

Added high-resolution (100ns) timer for Mac OS X many thanks to Markus Peter.
Added assorted optimizations thanks to Nicholas Clark.

Changed subroutine profiler to be slightly more efficient. Changed some tests to be more informative on failure. Changed nytprofhtml to be smarter when source isn't available. Changed nytprofhtml to show sort arrow on sortable tables.

Removed Devel::NYTProf::PgPLPerl module. That's now a separate PostgreSQL::PLPerl::NYTProf distribution.

Updated docs to include a note about timing on Windows. Updated docs to include a section about making NYTProf faster.

=head2 Changes in Devel::NYTProf 3.01 (svn r1005) 28th Dec 2009

Fixed (removed) use of vfscanf() which broke on Windows. Fixed version number in nytprofmerge.

Added documentation to nytprofcg and nytprofmerge.

Updated NYTProf docs, including noting major contributors. Updated docs to fix assorted typos, thanks to Jonathan Yu. Updated nytprofcsv documentation.

=head2 Changes in Devel::NYTProf 3.00 (svn r998) 24th Dec 2009

Note: The file format has changed. Old files can't be read.

Fixed (rare) overflow bug for 32bit perls. Fixed discarding of (rare) negative intervals. Fixed risk of infinite recursion if trace enabled and $SIG{__WARN__} was set to a code reference. Fixed subroutine recursion depth measurement. Fixed missing embedded eval source code for some older perls. Fixed assorted compiler warnings for various configurations.

Changed ReadStream SUB_LINE_RANGE tag to SUB_INFO.

Added log=F option to write trace log to a file. Added warning when reading a file with a minor version higher than expected.

Added slowops=N option which enables profiling of potentially slow perl opcodes (e.g., system calls and regexs). They're treated like xsubs. slowops=0 disables profiling of 'slowops' slowops=1 puts timings into one package ("CORE::", eg CORE::sleep) slowops=2 (the default) puts timings into into the package that made the call, e.g., "Foo::CORE:sleep" (note the single colon).

Added sigexit=1 option to enable a useable profile when the process exits due to a signals (catches INT HUP PIPE BUS SEGV by default) Can also do sigexit=TRAP,ABRT,SYS,... to hook specific signals. Thanks to Andrew Sterling Hanenkamp for the seed of this idea.

Added forkdepth=N option to enable profiling to be turned off after N generations of fork().

Added nameevals=0 and nameanonsubs=0 options to make NYTProf less visible to code that may assume the default perl naming behaviour. Note that using these will limit the usefulness of reports.

Added initial support for profiling PostgreSQL PL/Perl code via Devel::NYTProf::PgPLPerl module.

Added nytprofmerge utility:
Reads multiple nytprof data files and writes a new merged file. Many thanks to Nicholas Clark!

Changes to subroutine profiler:

Rewritten. Captures more data more accurately and robustly. Added profiling of calls to xsubs that exit via an exception. Added profiling of goto ⊂
Added recording the name of the calling subroutine to enable proper linking of call trees. Previously only the calling file and line were recorded. (This is more significant than it sounds :) Added docs describing how the subroutine profiler works. Multiple BEGIN blocks (including "use") within a package are now distinguished by appending the number of the line they start on (for perl 5.8.9+ and 5.10.1+)

Changes to nytprofhtml:

Added interactive treemap view of package and subroutine times. Left-click to zoom in (drill-down) one level, right-click to zoom out.

Added generation of GraphViz dot language files to visualize the call graph. A top-level link on the index page provides an inter-package graph, and per-source-file links provide a graph of sub calls in to, out of, and between the subs in the file. See http://en.wikipedia.org/wiki/Graphviz

Added columns to the main source code reports to show a count of sub calls and time spent in those calls.

Assorted cosmetic improvements.
Changed colors on report pages to be less saturated.

=head2 Changes in Devel::NYTProf 2.10 (svn r774) 18th June 2009

Fixed call count for XSubs that was one too high. Fixed enable_profile() after fork thanks to delamonpansie http://code.google.com/p/perl-devel-nytprof/issues/detail?id=15 Fixed to use correct scripts during test and so avoid permissions issues, thanks to David Golden.
Fixed spurious "Unable to determine line number" warnings when using options like -p, -n, -Mfoo.

Changed enable_profile() to discard the time spent since profile was disabled.
Changed NYTPROF env var parsing to allow backslash to escape colons, for Windows, thanks to Joshua ben Jore.

Added license, homepage, bugtracker, repository and MailingList resources to META.yml thanks to Michael G Schwern. Added nytprofcg utility to generate callgrind data for viewing via Kcachegrind, thanks to Chia-liang Kao.

=head2 Changes in Devel::NYTProf 2.09 (svn r733) 29th March 2009

Added support for modules using AutoLoader, e.g., POSIX & Storable, to fix the "Unable to open '... (autosplit into ...)'" warnings. Fixed report filename generation to remove colons, for Windows, reported by Adam Kennedy in rt bug #43798. Fixed report filename generation to remove dots, for VMS. Fixed savesrc option which wasn't safe and reliable. Added missing t/test22-strevala.t to MANIFEST. Extended testing to exercise compress and savesrc options.

Ported to VMS, thanks to Peter (Stig) Edwards:

Renamed t/\d\d.test.t files to t/\d\d_test.t

          t/test.pm.x     files to t/test.pm_x 
          t/testfork.\d. files to t/testfork-\d.
          .js and .css     file to only have one period/dot

for greater portability. VMS ODS-2 files can only have one period/dot.
Added t/92-file_port.t as a developer-only and request-using-ENV test, to help maintain portable files, currently .indent.pro and .perltidyrc fall foul of portable filename characters as defined by ANSI C and perlport. NYTProf.xs's open_output_file use mode 'wb' and not 'wbx' to avoid unsupported error when on VMS.

=head2 Changes in Devel::NYTProf 2.08 (svn r685) 15th Feb 2009

Core

Added optimize=0 option to disable the perl optimizer so you can see more accurate statement execution counts for some kinds of constructs.

Added savesrc=1 option to copy source code into the profile so reports are not affected by changes to the source files.

Added ability for DB::enable_profile() to specify a new file for profile data to be written to.

Reporting

Time spent within nested string evals is accounted for.

Fixed searching @INC for source files for reports.

Dramatically increased performance of nytprofhtml relative to the 2.07 version.

Many tables in html reports are sortable by clicking on header columns (requires JavaScript, uses jQuery and tablesorter.js)

Statement timings are now shown as integers in appropriate units: seconds, milliseconds, microseconds or nanoseconds.

Hovering over times in subroutine or file summary tables now shows the percentage time.

Added tables showing timings rolled up per package name depth.

Improved HTML conformance thanks to Leland Johnson.

=head2 Changes in Devel::NYTProf 2.07 (svn r583) 1st Nov 2008

Core

NOTE: The file format has changed. Files from 2.04 and 2.05 can still be read by this version.

Subroutine inclusive time no longer counts time spent recursed into the same subroutine. That time is now recorded separately, along with the max recursion depth.

Added stmts=0 option to disable the statement profiler so just the subroutine profiler runs. That reduces the profiler overhead and gives you much smaller data files.

Now builds on Windows, with thanks to Jan Dubois!

Removed use of vfscanf() to improve portability to Windows and old unix systems, thanks to Jan Dubois.

The profiler takes more care to avoid changing $!.

Reports

Fixed significant error in time reported as spent in a subroutine, which was showing the sum of the inclusive and exclusive time instead of just the inclusive time.

Subroutine calls made within string evals are now shown in reports. Subroutine caller details now includes calls from within string evals.

XS subs (xsubs) are now automatically associated with a source file that defines normal subs in the same package. Callers and timing information for xsubs are now shown at the bottom of the corresponding source file. References to xsubs in reports now include a working link if the xsub is in a package that contains profiled perl code.

The html global subroutine index pages no longer list subs that were never called.

Assorted report formating enhancements thanks to Gisle Aas.

Exclusive and Inclusive time column positions have been switched to be consistent with how the times are presented elsewhere.

nytprofhtml includes a --open option to open the generated html

Documentation

Greatly expanded description of the clocks used for profiling and their issues, especially on multi-processor systems.

Other

Added Devel::NYTProf::ReadStream module which provides a perl interface for reading the raw profile data, thanks to Gisle Aas.

=head2 Changes in Devel::NYTProf 2.05 (svn r498) 8th Oct 2008

Fixed alteration of $! during profiling thanks to Slaven Rezic. Fixed clock_gettime() clock selection to fallback to CLOCK_REALTIME if CLOCK_MONOTONIC is not available, e.g, on linux 2.4. Fixed error when application ends after DB::disable_profile().

Added some docs to Devel::NYTProf::Apache Added clock=N option to enable user to select the clock.

=head2 Changes in Devel::NYTProf 2.04 (svn r483) 1st Oct 2008

Fixed rare divide-by-zero error in reporting code. Fixed rare core dump in reporting code. Fixed detection of #line directives to be more picky. Fixed some compiler warnings thanks to Richard Foley.

Added on-the-fly ~90% zip compression thanks to Nicholas Clark. Reduces data file size per million statements executed from approx ~13MB to ~1MB (depends on code being profiled).

Added extra table of all subs sorted by inclusive time.

No longer warns about '/loader/0x800d8c/...' synthetic file names perl assigns reading code from a CODE ref in @INC

=head2 Changes in Devel::NYTProf 2.03 (svn r405) 15 Aug 2008

NOTES
  1. File format changed. Old profiles can't be read.
  2. Perl 5.8.1 is the oldest perl version supported.

Fixed accounting for time spent executing subs that were compiled in string evals.
Fixed risk of file corruption by names containing newlines.

Changed to also profile compile-time activity by default. Improved formating of stats for subs called by a statement.

Added start=begin|init|end|no option to NYTPROF env var. Added addpid=1 option to NYTPROF env var. Added support for .pmc files.
Added detection of #line directives in source code currently just warns that they are not handled.

Known issues:
Perl 5.8.8 can report garbage file names for XS subs. (Perl 5.8.6 and 5.10 don't seem to have this problem.) Where a subroutine is called from code compiled in a string evals, the artificial "eval file names" are not yet merged. (You're unlikely to notice this obscure case anyway.)

=head2 Changes in Devel::NYTProf 2.02 (svn r361) 24 Jul 2008

Fixed colors to use the median (not average) deviation from the median value. Fixed sub name resolution to work in more, perhaps all, unusual cases.

Improved accuracy of subroutine timing by deducting statement measurement overheads. Improved readability of subroutine caller lists. Replaced use of fpurge() with a more portable approach.

Added exclusive subroutine time (time in sub excluding subs it called). Added recording of xsub filenames (i.e. DBI.c) Added use of clock_gettime(), if available, for 100ns resolution. Uses CLOCK_MONOTONIC or else CLOCK_REALTIME. Thanks to Steve Peters.

=head2 Changes in Devel::NYTProf 2.01

Fixed and unified module version numbers.

=head2 Changes in Devel::NYTProf 2.00

Major changes. Much extra functionality and performance. See http://blog.timbunce.org/2008/07/15/nytprof-v2-a-major-advance-in-perl-profilers/

=head2 Changes in and before 1.50

1.50 ? ? ? 0:00:00 2008

1.13 Wed Mar 26 9:35:00 2008

1.12 Tue Mar 25 11:05:00 2008

1.11 Mon Mar 24 11:26:00 2008

1.10 Web Mar 19 21:02:00 2008

0.09 Wed Mar 19 13:05:00 2008

0.08 Mon Mar 10 17:35:00 2008

0.05 Fri Mar 7 10:29:00 2008

0.03 Thu Mar 6 09:12:00 2008

0.02 Wed Mar 5 14:20:00 2008

0.01 Tue Feb 12 10:34:03 2008

=cut

# vim: ts=8 sw=2 sts=2 expandtab: