Polish docs and bump version for 0.03.
Tim Bunce [Fri, 5 Oct 2012 12:39:01 +0000 (13:39 +0100)]
README
bin/sizeme_graph.pl
bin/sizeme_store.pl
lib/Devel/SizeMe.pm
t/basic.t

diff --git a/README b/README
index 0500042..847f09b 100644 (file)
--- a/README
+++ b/README
 
+Devel::SizeMe is a variant of Devel::Size that can stream out detailed
+information about the size of individual data-structures and the links
+between them.
 
-=pod
+It can do this the entire perl interpreter as well as specific data structures.
 
-Devel::SizeMe - Perl extension for finding the memory usage of Perl variables
+It comes with scripts for storing this data in a database and visualizing it in
+various forms, including graphs and an interactive treemap.
 
-=head1 SYNOPSIS
+Current implementation is all very alpha and rather hackish.
 
-  use Devel::SizeMe qw(size total_size);
 
-  my $size = size("A string");
-  my @foo = (1, 2, 3, 4, 5);
-  my $other_size = size(\@foo);
-  my $total_size = total_size( $ref_to_data );
-
-=head1 DESCRIPTION
-
-Acts like Devel::Size 0.77 is the PERL_DMEM env var is not set.
-
-Except that it also provides perl_size() and heap_size() functions.
-
-If PERL_DMEM env var is set to an empty string then all the *_size functions
-dump a textual representation of the memory data to stderr.
-
-If PERL_DMEM env var is set to a string that starts with "|" then the
-remainder of the string is taken to be a command name and popen() is used to
-start the command and the raw memory data is piped to it.
-
-If PERL_DMEM env var is set to anything else it is treated as the name of a
-file the raw memory data should be written to.
-
-The dmemtree.pl script can be used to process the raw memory data.
-Typically run via the PERL_DMEM env var. For example:
-
-    export PERL_DMEM='|./dmemtree.pl --text'
-    export PERL_DMEM='|./dmemtree.pl --dot=dmemtree.dot'
-    export PERL_DMEM='|./dmemtree.pl --db=dmemtree.db'
-
-The --text output is similar to the textual representation output by the module
-when the PERL_DMEM env var is set to an empty string.
-
-The --dot output is suitable for feeding to Graphviz.
-
-The --db output is a SQLite database. (Very subject to change.)
-
-Example usage:
-
-  PERL_DMEM='|./dmemtree.pl --db=dmemtree.db' perl -MDevel::Size=:all -e 'total_size(sub { })'
-
-The dmemview.pl script is a Mojolicious::Lite application that serves data to
-an interactive treemap visualization of the memory use. It can be run as:
-
-    dmemview.pl daemon
-
-and then open http://127.0.0.1:3000
-
-
-=head1 Build and Install
-
-To build and install this module, you need:
-
-     Perl
-     a working C or C++ compiler
-     a make (or namke on Windows) utility
-
-Follow these steps:
-
-On Linux, Cygwin, or Unix:
-
-    perl Makefile.PL
-    make
-    make test
-    sudo make install
-    
-On Windows:
-
-    perl Makefile.PL
-    nmake
-    nmake test
-    nmake install
-
-=head1 BUGREPORTS
-
-Please report bugs to:
-
-    http://rt.cpan.org/NoAuth/Bugs.html?Dist=Devel-SizeMe
-
-=head1 COPYRIGHT
-
-Copyright (C) 2005 Dan Sugalski,
-Copyright (C) 2007-2008 Tels,
-Copyright (C) 2008 BrowserUK,
-Copyright (C) 2011-2012 Nicholas Clark,
-Copyright (C) 2012 Tim Bunce.
-
-This module is free software; you can redistribute it and/or modify it
-under the same terms as Perl v5.8.8.
-
-=head1 TODO
-
-Random notes...
-
-Refactoring:
+TODO:
 
+    Remove log scale checkboc from the treemp as it doesn't work yet
     Devel::SizeMe::Core - loads XS and sets options
     Devel::SizeMe - loads Devel::SizeMe::Core
         -d:SizeMe=opts?
@@ -115,17 +27,10 @@ Refactoring:
     Support multiple runs to same sizeme_store process, generating separate files
     Name runs to allow total_size (for example) of multiple data structures
 
-Issues:
-
     two cases where PERL_SUBVERSION is checked with a plain || (marked XXX)
 
-Future
-
-
     Add addr to leaf to enable visualization of memory layout
 
     Add token for ptr to node already seen (identified by addr I presume)
         so we can move from a Tree to a DAG and see alternative name paths
         and reference loops
-
-=cut
index 927e989..8eef472 100755 (executable)
@@ -1,38 +1,57 @@
 #!/usr/bin/env perl
 
-use strict;
-use warnings;
+=head1 NAME
 
-use Mojolicious::Lite;
-use JSON::XS;
-use Getopt::Long;
-use Storable qw(dclone);
-use Devel::Dwarn;
-use Devel::SizeMe::Graph;
+sizeme_graph.pl - web server providing an interactive treemap of Devel::SizeMe data
 
-require ORLite;
+=head1 SYNOPSIS
+
+    sizeme_graph.pl --db sizeme.db daemon
+
+    sizeme_graph.pl daemon # same as above
+
+Then open a web browser on http://127.0.0.1:3000
+
+=head1 DESCRIPTION
+
+Reads a database created by sizeme_store.pl and provides a web interface with
+an interactive treemap of the data.
 
-=pod NOTE
+=head2 TODO
 
-    Needs to be run from the static/. directory.
-    For example:
+Current implementation is all very alpha and rather hackish.
 
-        sizeme_graph.pl daemon
+Split out the db and tree code into a separate module.
 
-=pod TODO
+Use a history management library so the back button works and we can have
+links to specific nodes.
 
-    Move all the static files into the DATA section of ths script so the script
-    is entirely self-contained and doesn't need any static files installed.
-    Or, work out how to install the static files and reference them from the script.
+Better tool-tip and/or add a scrollable information area below the treemap
+that could contain details and links.
 
-    Make the treemap resize to fit the browser window (as NYTProf does).
+Make the treemap resize to fit the browser window (as NYTProf does).
 
-    Protect against nodes with thousands of children
-        perhaps replace all with single merged child that has no children itself
-        but just a warning as a title.
+Protect against nodes with thousands of children
+    perhaps replace all with single merged child that has no children itself
+    but just a warning as a title.
+
+Implement other visualizations, such as a space-tree
+http://thejit.org/static/v20/Jit/Examples/Spacetree/example2.html
 
 =cut
 
+use strict;
+use warnings;
+
+use Mojolicious::Lite;
+use JSON::XS;
+use Getopt::Long;
+use Storable qw(dclone);
+use Devel::Dwarn;
+use Devel::SizeMe::Graph;
+
+require ORLite;
+
 my $j = JSON::XS->new;
 
 GetOptions(
index 59fc49e..94a7b85 100755 (executable)
@@ -8,7 +8,7 @@ sizeme_store.pl - process and store the raw data stream from Devel::SizeMe
 
     sizeme_store.pl [--text] [--dot=sizeme.dot] [--db=sizeme.db]
 
-Typically used via the C<SIZEME> env var:
+Typically used with Devel::SizeMe via the C<SIZEME> env var:
 
     export SIZEME='|./sizeme_store.pl --text'
     export SIZEME='|./sizeme_store.pl --dot=sizeme.dot'
@@ -17,8 +17,8 @@ Typically used via the C<SIZEME> env var:
 =head1 DESCRIPTION
 
 Reads the raw memory data from Devel::SizeMe and processes the tree
-via a stack, propagating data such as totals, up the tree nodes.
-Output completed nodes in the request formats.
+via a stack, propagating data such as totals, up the tree nodes
+as the data streams through.  Output completed nodes in the request formats.
 
 The --text output is similar to the textual representation output by the module
 when the SIZEME env var is set to an empty string.
@@ -30,6 +30,17 @@ The --db output is a SQLite database. The db schema is very subject to change.
 This output is destined to be the primary one. The other output types will
 probably become separate programs that read the db.
 
+=head1 TODO
+
+Current implementation is all very alpha and rather hackish.
+
+Refactor to separate the core code into a module.
+
+Move the output formats into separate modules, which should probably read from
+the db so the db becomes the canonical source of data.
+
+Import constants from XS.
+
 =cut
 
 # Needs to be generalized to support pluggable output formats.
index 77f4ef0..2307118 100644 (file)
@@ -27,7 +27,7 @@ require 5.005;
 require Exporter;
 require XSLoader;
 
-$VERSION = '0.020_082';
+$VERSION = '0.03';
 @ISA = qw(Exporter);
 
 @EXPORT_OK = qw(size total_size perl_size heap_size);
@@ -117,8 +117,8 @@ Please report bugs to:
 =head2 Automatic Mode
 
 If loaded using the perl C<-d> option (i.e., C<perl -d:SizeMe ...>)
-then perl memory usage data will be written to a C<sizeme.db> file in the
-current directory when the script ends.
+and it's the first module loaded then perl memory usage data will be written to
+a C<sizeme.db> file in the current directory when the script ends.
 
 =head1 FUNCTIONS
 
@@ -146,9 +146,16 @@ to calling C<total_size( \%main:: )> but also includes all the perl internals.
 
     $size_in_bytes = heap_size();
 
-Measures and returns the size of the entire process heap space.
+Measures and returns the size of the entire process heap space, with nodes
+within that representing things like free space within malloc (if the malloc
+implementation can report that).
 
-Not accurate yet.
+The goal here is for the returned 'total heap size' to be taken directly from
+the operating system and for a subnode called "unknown" to 'contain' the
+difference between everything we can measure and the total heap size reported
+by the operating system.
+
+Far from accurate yet.
 
 =head1 COPYRIGHT
 
@@ -163,6 +170,6 @@ under the same terms as Perl v5.8.8.
 
 =head1 SEE ALSO
 
-perl(1), L<Devel::Size>.
+L<sizeme_store.pl>, L<sizeme_graph.pl>, perl(1), L<Devel::Size>.
 
 =cut
index 63b23d6..8ab8c06 100644 (file)
--- a/t/basic.t
+++ b/t/basic.t
@@ -10,7 +10,7 @@ can_ok ('Devel::SizeMe', qw/
   /);
 
 die ("Uhoh, test uses an outdated version of Devel::SizeMe")
-    unless is ($Devel::SizeMe::VERSION, '0.020_082', 'VERSION MATCHES');
+    unless is ($Devel::SizeMe::VERSION, '0.03', 'VERSION MATCHES');
 
 #############################################################################
 # some basic checks: