Giter VIP home page Giter VIP logo

gprof2dot's Introduction

About gprof2dot

This is a Python script to convert the output from many profilers into a dot graph.

It can:

If you want an interactive viewer for the graphs generated by gprof2dot, check xdot.py.

Status

gprof2dot currently fulfills my needs, and I have little or no time for its maintenance. So I'm afraid that any requested features are unlikely to be implemented, and I might be slow processing issue reports or pull requests.

Build Status codecov

Example

This is the result from the example data in the Linux Gazette article with the default settings:

Sample

Requirements

  • Python: known to work with version 2.7 and 3.3; it will most likely not work with earlier releases.
  • Graphviz: tested with version 2.26.3, but should work fine with other versions.

Windows users

Linux users

On Debian/Ubuntu run:

apt-get install python3 graphviz

On RedHat/Fedora run

yum install python3 graphviz

Download

Documentation

Usage

Usage: 
	gprof2dot.py [options] [file] ...

Options:
  -h, --help            show this help message and exit
  -o FILE, --output=FILE
                        output filename [stdout]
  -n PERCENTAGE, --node-thres=PERCENTAGE
                        eliminate nodes below this threshold [default: 0.5]
  -e PERCENTAGE, --edge-thres=PERCENTAGE
                        eliminate edges below this threshold [default: 0.1]
  -f FORMAT, --format=FORMAT
                        profile format: axe, callgrind, collapse, dtrace,
                        hprof, json, oprofile, perf, prof, pstats, sleepy,
                        sysprof or xperf [default: prof]
  --total=TOTALMETHOD   preferred method of calculating total time: callratios
                        or callstacks (currently affects only perf format)
                        [default: callratios]
  -c THEME, --colormap=THEME
                        color map: bw, color, gray, pink or print [default:
                        color]
  -s, --strip           strip function parameters, template parameters, and
                        const modifiers from demangled C++ function names
  --color-nodes-by-selftime
                        color nodes by self time, rather than by total time
                        (sum of self and descendants)
  -w, --wrap            wrap function names
  --show-samples        show function samples
  --node-label=MEASURE  measurements to on show the node (can be specified
                        multiple times): self-time, self-time-percentage,
                        total-time or total-time-percentage [default: total-
                        time-percentage, self-time-percentage]
  --list-functions=LIST_FUNCTIONS
                        list functions available for selection in -z or -l,
                        requires selector argument ( use '+' to select all).
                        Recall that the selector argument is used with
                        Unix/Bash globbing/pattern matching, and that entries
                        are formatted '<pkg>:<linenum>:<function>'. When
                        argument starts with '%', a dump of all available
                        information is performed for selected entries,  after
                        removal of leading '%'.
  -z ROOT, --root=ROOT  prune call graph to show only descendants of specified
                        root function
  -l LEAF, --leaf=LEAF  prune call graph to show only ancestors of specified
                        leaf function
  --depth=DEPTH         prune call graph to show only descendants or ancestors
                        until specified depth
  --skew=THEME_SKEW     skew the colorization curve.  Values < 1.0 give more
                        variety to lower percentages.  Values > 1.0 give less
                        variety to lower percentages
  -p FILTER_PATHS, --path=FILTER_PATHS
                        Filter all modules not in a specified path

Examples

Linux perf

perf record -g -- /path/to/your/executable
perf script | c++filt | gprof2dot.py -f perf | dot -Tpng -o output.png

oprofile

opcontrol --callgraph=16
opcontrol --start
/path/to/your/executable arg1 arg2
opcontrol --stop
opcontrol --dump
opreport -cgf | gprof2dot.py -f oprofile | dot -Tpng -o output.png

xperf

If you're not familiar with xperf then read this excellent article first. Then do:

  • Start xperf as

    xperf -on Latency -stackwalk profile
    
  • Run your application.

  • Save the data. ` xperf -d output.etl

  • Start the visualizer:

    xperf output.etl
    
  • In Trace menu, select Load Symbols. Configure Symbol Paths if necessary.

  • Select an area of interest on the CPU sampling graph, right-click, and select Summary Table.

  • In the Columns menu, make sure the Stack column is enabled and visible.

  • Right click on a row, choose Export Full Table, and save to output.csv.

  • Then invoke gprof2dot as

    gprof2dot.py -f xperf output.csv | dot -Tpng -o output.png
    

VTune Amplifier XE

  • Collect profile data as (also can be done from GUI):

    amplxe-cl -collect hotspots -result-dir output -- your-app
    
  • Visualize profile data as:

    amplxe-cl -report gprof-cc -result-dir output -format text -report-output output.txt
    gprof2dot.py -f axe output.txt | dot -Tpng -o output.png
    

See also Kirill Rogozhin's blog post.

gprof

/path/to/your/executable arg1 arg2
gprof path/to/your/executable | gprof2dot.py | dot -Tpng -o output.png

python profile

python -m profile -o output.pstats path/to/your/script arg1 arg2
gprof2dot.py -f pstats output.pstats | dot -Tpng -o output.png

python cProfile (formerly known as lsprof)

python -m cProfile -o output.pstats path/to/your/script arg1 arg2
gprof2dot.py -f pstats output.pstats | dot -Tpng -o output.png

Java HPROF

java -agentlib:hprof=cpu=samples ...
gprof2dot.py -f hprof java.hprof.txt | dot -Tpng -o output.png

See Russell Power's blog post for details.

DTrace

dtrace -x ustackframes=100 -n 'profile-97 /pid == 12345/ { @[ustack()] = count(); } tick-60s { exit(0); }' -o out.user_stacks
gprof2dot.py -f dtrace out.user_stacks | dot -Tpng -o output.png

# Notice: sometimes, the dtrace outputs format may be latin-1, and gprof2dot will fail to parse it.
# To solve this problem, you should use iconv to convert to UTF-8 explicitly.
# TODO: add an encoding flag to tell gprof2dot how to decode the profile file.
iconv -f ISO-8859-1 -t UTF-8 out.user_stacks | gprof2dot.py -f dtrace

stackcollapse

Brendan Gregg's FlameGraph tool takes as its input a text file containing one line per sample. This format can be generated from various other inputs using the stackcollapse scripts in the FlameGraph repository. It can also be generated by tools such as py-spy.

Example usage:

  • Perf

    perf record -g -- /path/to/your/executable
    perf script | FlameGraph/stackcollapse-perf.pl > out.collapse
    gprof2dot.py -f collapse out.collapse | dot -Tpng -o output.png
    
  • Py-spy

    py-spy record -p <pidfile> -f raw -o out.collapse
    gprof2dot.py -f collapse out.collapse | dot -Tpng -o output.png
    

Output

A node in the output graph represents a function and has the following layout:

+------------------------------+
|        function name         |
| total time % ( self time % ) |
|         total calls          |
+------------------------------+

where:

  • total time % is the percentage of the running time spent in this function and all its children;
  • self time % is the percentage of the running time spent in this function alone;
  • total calls is the total number of times this function was called (including recursive calls).

An edge represents the calls between two functions and has the following layout:

           total time %
              calls
parent --------------------> children

Where:

  • total time % is the percentage of the running time transfered from the children to this parent (if available);
  • calls is the number of calls the parent function called the children.

Note that in recursive cycles, the total time % in the node is the same for the whole functions in the cycle, and there is no total time % figure in the edges inside the cycle, since such figure would make no sense.

The color of the nodes and edges varies according to the total time % value. In the default temperature-like color-map, functions where most time is spent (hot-spots) are marked as saturated red, and functions where little time is spent are marked as dark blue. Note that functions where negligible or no time is spent do not appear in the graph by default.

Listing functions

The flag --list-functions permits listing the function entries found in the gprof input. This is intended as a tool to prepare for utilisations with the --leaf (-l) or --root (-z) flags.

prof2dot.py -f pstats /tmp/myLog.profile  --list-functions "test_segments:*:*" 
  
test_segments:5:<module>,
test_segments:206:TestSegments,
test_segments:46:<lambda>
  • The selector argument is used with Unix/Bash globbing/pattern matching, in the same fashion as performed by the -l and -z flags.

  • Entries are formatted '<pkg>:<linenum>:<function>'.

  • When selector argument starts with '%', a dump of all available information is performed for selected entries, after removal of selector's leading '%'. If selector is "+" or "*", the full list of functions is printed.

Frequently Asked Questions

How can I generate a complete call graph?

By default gprof2dot.py generates a partial call graph, excluding nodes and edges with little or no impact in the total computation time. If you want the full call graph then set a zero threshold for nodes and edges via the -n / --node-thres and -e / --edge-thres options, as:

gprof2dot.py -n0 -e0

The node labels are too wide. How can I narrow them?

The node labels can get very wide when profiling C++ code, due to inclusion of scope, function arguments, and template arguments in demangled C++ function names.

If you do not need function and template arguments information, then pass the -s / --strip option to strip them.

If you want to keep all that information, or if the labels are still too wide, then you can pass the -w / --wrap, to wrap the labels. Note that because dot does not wrap labels automatically the label margins will not be perfectly aligned.

Why there is no output, or it is all in the same color?

Likely, the total execution time is too short, so there is not enough precision in the profile to determine where time is being spent.

You can still force displaying the whole graph by setting a zero threshold for nodes and edges via the -n / --node-thres and -e / --edge-thres options, as:

gprof2dot.py -n0 -e0

But to get meaningful results you will need to find a way to run the program for a longer time period (aggregate results from multiple runs).

Why don't the percentages add up?

You likely have an execution time too short, causing the round-off errors to be large.

See question above for ways to increase execution time.

Which options should I pass to gcc when compiling for profiling?

Options which are essential to produce suitable results are:

  • -g : produce debugging information
  • -fno-omit-frame-pointer : use the frame pointer (frame pointer usage is disabled by default in some architectures like x86_64 and for some optimization levels; it is impossible to walk the call stack without it)

If you're using gprof you will also need -pg option, but nowadays you can get much better results with other profiling tools, most of which require no special code instrumentation when compiling.

You want the code you are profiling to be as close as possible as the code that you will be releasing. So you should include all options that you use in your release code, typically:

  • -O2 : optimizations that do not involve a space-speed tradeoff
  • -DNDEBUG : disable debugging code in the standard library (such as the assert macro)

However many of the optimizations performed by gcc interfere with the accuracy/granularity of the profiling results. You should pass these options to disable those particular optimizations:

  • -fno-inline-functions : do not inline functions into their parents (otherwise the time spent on these functions will be attributed to the caller)
  • -fno-inline-functions-called-once : similar to above
  • -fno-optimize-sibling-calls : do not optimize sibling and tail recursive calls (otherwise tail calls may be attributed to the parent function)

If the granularity is still too low, you may pass these options to achieve finer granularity:

  • -fno-default-inline : do not make member functions inline by default merely because they are defined inside the class scope
  • -fno-inline : do not pay attention to the inline keyword Note however that with these last options the timings of functions called many times will be distorted due to the function call overhead. This is particularly true for typical C++ code which expects that these optimizations to be done for decent performance.

See the full list of gcc optimization options for more information.

Links

See the wiki for external resources, including complementary/alternative tools.

gprof2dot's People

Contributors

alainlich avatar avolkov avatar barakshelef avatar chelzy avatar chen3feng avatar depthdeluxe avatar felixonmars avatar foxcpp avatar grzanka avatar hartwork avatar jrfonseca avatar kalaxy avatar krogozh avatar krogozhi avatar mdengler avatar mgedmin avatar mintar avatar mtelka avatar mwtoews avatar ppolewicz avatar qulogic avatar rainerhausdorf avatar richvdh avatar robinst avatar siddontang avatar strizhechenko avatar timgates42 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gprof2dot's Issues

Error when run gprof2dot in python2.6

Hi!

Not sure if {(tuple) for ...} construction works in this old python version installed on CentOS 6 by default, but maybe it will work if replace it to dict((tuple) for ...). Or maybe you can "fix" it in setup.py by replacing:

        'Programming Language :: Python :: 2',

with

        'Programming Language :: Python :: 2.7',
# gprof2dot --help
Traceback (most recent call last):
  File "/usr/bin/gprof2dot", line 11, in <module>
    load_entry_point('gprof2dot==2017.9.19', 'console_scripts', 'gprof2dot')()
  File "/usr/lib/python2.6/site-packages/pkg_resources/__init__.py", line 561, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/lib/python2.6/site-packages/pkg_resources/__init__.py", line 2631, in load_entry_point
    return ep.load()
  File "/usr/lib/python2.6/site-packages/pkg_resources/__init__.py", line 2291, in load
    return self.resolve()
  File "/usr/lib/python2.6/site-packages/pkg_resources/__init__.py", line 2297, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/usr/lib/python2.6/site-packages/gprof2dot.py", line 337
    frontier = frontier.union({(new_node, node_depth - 1) for new_node in newNodes})
                                                            ^
SyntaxError: invalid syntax

Problems in printing gprof2dot output on stdout in Python 3.5.1

I had issues with using gprof2dot without "-o" option (printing on stdout) in following setup:

  • clean docker image debian:testing
  • python 3.5.1
  • gprof2dot installed via pip

Due to problems with UTF character, I wasn't able to print output on screen (or redirect it using Unix pipes):

test@8b8234c48f0b:/home/test$ gprof ./a.out | gprof2dot 
digraph {
    graph [fontname=Arial, nodesep=0.125, ranksep=0.25];
    node [fontcolor=white, fontname=Arial, height=0, shape=box, style=filled, width=0];
    edge [fontname=Arial];
    1 [color="#ff0000", fontcolor="#ffffff", fontsize="10.00", label=Traceback (most recent call last):
  File "/usr/local/bin/gprof2dot", line 9, in <module>
    load_entry_point('gprof2dot==2015.12.1', 'console_scripts', 'gprof2dot')()
  File "/usr/local/lib/python3.5/dist-packages/gprof2dot.py", line 3186, in main
    dot.graph(profile, theme)
  File "/usr/local/lib/python3.5/dist-packages/gprof2dot.py", line 2922, in graph
    tooltip = function.filename,
  File "/usr/local/lib/python3.5/dist-packages/gprof2dot.py", line 2970, in node
    self.attr_list(attrs)
  File "/usr/local/lib/python3.5/dist-packages/gprof2dot.py", line 2995, in attr_list
    self.id(value)
  File "/usr/local/lib/python3.5/dist-packages/gprof2dot.py", line 3008, in id
    self.write(s)
  File "/usr/local/lib/python3.5/dist-packages/gprof2dot.py", line 3032, in write
    self.fp.write(s)
UnicodeEncodeError: 'ascii' codec can't encode character '\xd7' in position 31: ordinal not in range(128)

Here is the program I was profiling and compilation instructions:

test@8b8234c48f0b:/home/test$ cat hello.c 
void b(){
  int k;
  for( k = 0 ; k < 1000 ; k++){
    k*k*k;
  }

}

void a() {
  int j;
  for( j = 0 ; j < 1000 ; j++){
    j*j*j;
    b();
  }
}

int main(){
  int i;
  for( i = 0 ; i < 1000 ; i++ ){
    a();
  } 
  return 1;
}
test@8b8234c48f0b:/home/test$ gcc -pg hello.c 
test@8b8234c48f0b:/home/test$ gprof ./a.out 
Flat profile:

Each sample counts as 0.01 seconds.
  %   cumulative   self              self     total           
 time   seconds   seconds    calls  ms/call  ms/call  name    
101.23      1.97     1.97  1000000     0.00     0.00  b
  0.00      1.97     0.00     1000     0.00     1.97  a

 %         the percentage of the total running time of the
time       program used by this function.

cumulative a running sum of the number of seconds accounted
 seconds   for by this function and those listed above it.

 self      the number of seconds accounted for by this
seconds    function alone.  This is the major sort for this
           listing.

calls      the number of times this function was invoked, if
           this function is profiled, else blank.

 self      the average number of milliseconds spent in this
ms/call    function per call, if this function is profiled,
       else blank.

 total     the average number of milliseconds spent in this
ms/call    function and its descendents per call, if this
       function is profiled, else blank.

name       the name of the function.  This is the minor sort
           for this listing. The index shows the location of
       the function in the gprof listing. If the index is
       in parenthesis it shows where it would appear in
       the gprof listing if it were to be printed.


Copyright (C) 2012-2015 Free Software Foundation, Inc.

Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.


             Call graph (explanation follows)


granularity: each sample hit covers 2 byte(s) for 0.51% of 1.97 seconds

index % time    self  children    called     name
                1.97    0.00 1000000/1000000     a [2]
[1]    100.0    1.97    0.00 1000000         b [1]
-----------------------------------------------
                0.00    1.97    1000/1000        main [3]
[2]    100.0    0.00    1.97    1000         a [2]
                1.97    0.00 1000000/1000000     b [1]
-----------------------------------------------
                                                 <spontaneous>
[3]    100.0    0.00    1.97                 main [3]
                0.00    1.97    1000/1000        a [2]
-----------------------------------------------

 This table describes the call tree of the program, and was sorted by
 the total amount of time spent in each function and its children.

 Each entry in this table consists of several lines.  The line with the
 index number at the left hand margin lists the current function.
 The lines above it list the functions that called this function,
 and the lines below it list the functions this one called.
 This line lists:
     index  A unique number given to each element of the table.
        Index numbers are sorted numerically.
        The index number is printed next to every function name so
        it is easier to look up where the function is in the table.

     % time This is the percentage of the `total' time that was spent
        in this function and its children.  Note that due to
        different viewpoints, functions excluded by options, etc,
        these numbers will NOT add up to 100%.

     self   This is the total amount of time spent in this function.

     children   This is the total amount of time propagated into this
        function by its children.

     called This is the number of times the function was called.
        If the function called itself recursively, the number
        only includes non-recursive calls, and is followed by
        a `+' and the number of recursive calls.

     name   The name of the current function.  The index number is
        printed after it.  If the function is a member of a
        cycle, the cycle number is printed between the
        function's name and the index number.


 For the function's parents, the fields have the following meanings:

     self   This is the amount of time that was propagated directly
        from the function into this parent.

     children   This is the amount of time that was propagated from
        the function's children into this parent.

     called This is the number of times this parent called the
        function `/' the total number of times the function
        was called.  Recursive calls to the function are not
        included in the number after the `/'.

     name   This is the name of the parent.  The parent's index
        number is printed after it.  If the parent is a
        member of a cycle, the cycle number is printed between
        the name and the index number.

 If the parents of the function cannot be determined, the word
 `<spontaneous>' is printed in the `name' field, and all the other
 fields are blank.

 For the function's children, the fields have the following meanings:

     self   This is the amount of time that was propagated directly
        from the child into the function.

     children   This is the amount of time that was propagated from the
        child's children to the function.

     called This is the number of times the function called
        this child `/' the total number of times the child
        was called.  Recursive calls by the child are not
        listed in the number after the `/'.

     name   This is the name of the child.  The child's index
        number is printed after it.  If the child is a
        member of a cycle, the cycle number is printed
        between the name and the index number.

 If there are any cycles (circles) in the call graph, there is an
 entry for the cycle-as-a-whole.  This entry shows who called the
 cycle (as parents) and the members of the cycle (as children.)
 The `+' recursive calls entry shows the number of function calls that
 were internal to the cycle, and the calls entry for each member shows,
 for that member, how many times it was called from other members of
 the cycle.


Copyright (C) 2012-2015 Free Software Foundation, Inc.

Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.


Index by function name

   [2] a                       [1] b

unable to parse gprof 2.25 output

I'm on debian jessie and the gprof version there (2.25) produces output that gprof2dot can't seem to parse.

[debian-x1]$ gprof -v
GNU gprof (GNU Binutils for Debian) 2.25
Based on BSD gprof, copyright 1983 Regents of the University of California.
This program is free software.  This program has absolutely no warranty.
Flat profile:

Each sample counts as 0.01 seconds.
  %   cumulative   self              self     total           
 time   seconds   seconds    calls  Ts/call  Ts/call  name    
 61.39      4.10     4.10                             ai_best_move_rec
 17.52      5.27     1.17                             cmp_rev
  8.76      5.86     0.59                             grid_block_add
  6.89      6.32     0.46                             grid_block_apply_move
  3.89      6.58     0.26                             grid_block_drop
  0.75      6.63     0.05                             grid_clear_lines
  0.45      6.66     0.03                             block_move
  0.15      6.67     0.01                             grid_print
  0.15      6.68     0.01                             shape_stream_peek
  0.07      6.68     0.01                             grid_block_remove

 %         the percentage of the total running time of the
time       program used by this function.

cumulative a running sum of the number of seconds accounted
 seconds   for by this function and those listed above it.

 self      the number of seconds accounted for by this
seconds    function alone.  This is the major sort for this
           listing.

calls      the number of times this function was invoked, if
           this function is profiled, else blank.
 
 self      the average number of milliseconds spent in this
ms/call    function per call, if this function is profiled,
	   else blank.

 total     the average number of milliseconds spent in this
ms/call    function and its descendents per call, if this 
	   function is profiled, else blank.

name       the name of the function.  This is the minor sort
           for this listing. The index shows the location of
	   the function in the gprof listing. If the index is
	   in parenthesis it shows where it would appear in
	   the gprof listing if it were to be printed.

Copyright (C) 2012-2014 Free Software Foundation, Inc.

Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.

Traceback:

$ ./gprof2dot.py < prof
error: unexpected end of file
Traceback (most recent call last):
  File "./gprof2dot.py", line 3329, in <module>
    main()
  File "./gprof2dot.py", line 3290, in main
    profile = parser.parse()
  File "./gprof2dot.py", line 1275, in parse
    self.parse_cg()
  File "./gprof2dot.py", line 1257, in parse_cg
    while not self._cg_header_re.match(self.readline()):
  File "./gprof2dot.py", line 1097, in readline
    import traceback; traceback.print_exc()
  File "/usr/lib/python3.4/traceback.py", line 252, in print_exc
    print_exception(*sys.exc_info(), limit=limit, file=file, chain=chain)
  File "/usr/lib/python3.4/traceback.py", line 169, in print_exception
    for line in _format_exception_iter(etype, value, tb, limit, chain):
  File "/usr/lib/python3.4/traceback.py", line 146, in _format_exception_iter
    for value, tb in values:
  File "/usr/lib/python3.4/traceback.py", line 125, in _iter_chain
    context = exc.__context__
AttributeError: 'NoneType' object has no attribute '__context__'

problem with callgrind

is the are problem in gprof2dot with the callgrind parser? gprof2dot can't process a callgrind file (see start of file below). When gprof2dot is called with

python2.7 /usr/local/src/gprof2dot/gprof2dot.py --format=callgrind callgrind.out.8976-01
gprof2dot complains:

warning: line 2: unexpected line
version: 1
digraph {
	graph [fontname=Arial, nodesep=0.125, ranksep=0.25];
	node [fontcolor=white, fontname=Arial, height=0, shape=box, style=filled, width=0];
	edge [fontname=Arial];
}

This looks like a principal problem with the callgrind format parser. Using instead python3.5 changes nothing. This happens on debian buster/sid. Looks like something stupid, maybe on my side... I tried as well the version tags/2016.10.13.

-gn

Begin of callgrind.out.8976-01:

# callgrind format
version: 1
creator: callgrind-3.13.0
pid: 8976

unexpected end of file

I'm trying to do gprof2dot.exe c:\temp\profile.pstat

the error is
unexpected end of file

Any suggestions are appreciated

very (Very) minor command line bug, and unexpected result question

In a Ubuntu system I did

pip install gprof2dot

/path/to/MY/executable.exe arg1 arg2
gprof path/to/MY/executable.exe | gprof2dot.py | dot -Tpng -o output.png

and encountered two problems.

firstly my system could not find any gprof2dot.py.

Which was easy I changed it to;

/path/to/your/executable arg1 arg2
gprof path/to/your/executable | gprof2dot | dot -Tpng -o output.png

This produced an output.png that was "MAIN__100.00% (100.00%)"

I compiled /path/to/MY/executable.exe with

/usr//bin/gfortran-4.9 -g -pg -O3 -cpp -Wall -Wtabs -fbacktrace

  1. The instructions might want to include a line saying use

gprof path/to/your/executable | gprof2dot.py | dot -Tpng -o output.png
or
gprof path/to/your/executable | gprof2dot | dot -Tpng -o output.png

  1. Do I have the -g-pg flags misplaced?

License file in pypi archive

The pypi source archive isn't including the LICENSE.txt file. Would it be possible to add it? It is very helpful when packaging this for Linux distributions. Thank you.

See absolute time instead of percentage on nodes

Sometimes it's easier to reason about the performance of some code when you can see absolute times per node rather than percentage of total runtime. For example, you might know a query ought to take 10 ms and if a function that only issues a query is taking 50 ms, it might be the clue you needed. It's easier to detect stuff like this when absolute times are displayed rather than "this function was 0.5% of total runtime".

It would be nice to see total time in a function as well as average time per call.

RuntimeError: maximum recursion depth exceeded

Running: perf script | c++filt | gprof2dot -f perf | dot -Tpng -o output.png
causes a RuntimeError:
...
order = self._tarjan(callee, order, stack, data)
File "/usr/local/lib/python2.7/dist-packages/gprof2dot.py", line 418, in _tarjan
order = self._tarjan(callee, order, stack, data)
File "/usr/local/lib/python2.7/dist-packages/gprof2dot.py", line 418, in _tarjan
order = self._tarjan(callee, order, stack, data)
File "/usr/local/lib/python2.7/dist-packages/gprof2dot.py", line 418, in _tarjan
order = self._tarjan(callee, order, stack, data)
File "/usr/local/lib/python2.7/dist-packages/gprof2dot.py", line 418, in _tarjan
order = self._tarjan(callee, order, stack, data)
File "/usr/local/lib/python2.7/dist-packages/gprof2dot.py", line 418, in _tarjan
order = self._tarjan(callee, order, stack, data)
File "/usr/local/lib/python2.7/dist-packages/gprof2dot.py", line 405, in _tarjan
func_data = self._TarjanData(order)
RuntimeError: maximum recursion depth exceeded

gprof get empty gmon.out?

i run my code as :

./my_bin myconfig > a

i got a gmon.out, but its size is only 322byte, and contains no info. the code is time costly, cost 20s to run.

I am desperate about this, because i do as most blog, step by step.

but cant get my gmon.out well, can you help on this?

compiler: i use gcc, cmake, -O2 -std=c++11 -g -pg

exception with gprof callgraph as written by libxslt.

A long time ago a wrote a patch for libxslt to write xslt evaluation profiles in gprof compatible format. This makes gprof2dot an awesome tool to analyze xxslt slowness. Unfortunately I had to apply a little patch to gprof2dot - see below. This seems to be caused by special events: TIME and TOTAL_TIME. Do you have any insight here what goes wrong? I've uploaded a sample profile to: https://gist.github.com/ensonic/d78b65fc3d9067b97f82

๏ฟผdiff --git a/gprof2dot.py b/gprof2dot.py
index 7a11b3a..9a6e7b9 100755
--- a/gprof2dot.py
+++ b/gprof2dot.py
@@ -491,7 +491,12 @@ class Profile(Object):
             return function[outevent]

     def _integrate_call(self, call, outevent, inevent):
-        assert outevent not in call
+        if outevent not in call:
+            # outevent 'Total time' not in call, inevent 'Time'
+            sys.stderr.write ("outevent '%s' not in call, inevent '%s'\n" % (outevent.name, inevent.name))
+            return 0
+        #assert outevent not in call
         assert call.ratio is not None
         callee = self.functions[call.callee_id]
         subtotal = call.ratio *self._integrate_function(callee, outevent, inevent)

Assertion failure thrown due to computational inaccuracies

When running gprof2dot.py on my prof file the following assertion is thrown:

...
File "./gprof2dot.py", line 558, in _integrate_cycle
assert partial == max(partials.values())

After having modified the line 558 to:
assert partial == max(partials.values()) , "partial=%r, max(partials.values)=%r, partial=max(partials.values)=%r" % (str(partial), str(max(partials.values())), str(partial - max(partials.values())))

more details are shown:

File "./gprof2dot.py", line 558, in _integrate_cycle
assert partial == max(partials.values()) , "partial=%r, max(partials.values)=%r, partial=max(partials.values)=%r" % (str(partial), str(max(partials.values())), str(partial - max(partials.values())))
AssertionError: partial='2.50626729881e-07', max(partials.values)='2.50626729881e-07', partial-max(partials.values)='-5.29395592034e-23'

The result is shown on 95% of runs of gprof2dot.py script on the varying perf output file.

Please could we modify the script to be more resilient against roundoff errors? e.g.:

if partial != 0.0:
<tab>assert abs(partial - max(partials.values())) / abs(partial) <= 1e-7

Question: How to filter some no use functions

When I use

python gprof2dot.py -n0.0001 -e0.0001 ./callgrind.out.28362 -f callgrind > out.dot && dot -Tpng out.dot -o out.pn

I see a lot of function in C runtime and Os system calls, I don't want to see them. Can I filter these things?

Option to color nodes based on time spent in function rather than whole subtree

This is a feature request to add a flag to color graph nodes based on time spent in each function, rather than coloring based on time spend in the whole subtree.

Concrete example (from https://github.com/jrfonseca/gprof2dot/blob/master/sample.png): main is colored red (since it's the call tree root), yet it's likely not a good place to look for optimizations. Same goes with small functions on top of expensive calls (read_all_makefiles). They should probably not be colored "hot" if they're fast. The expensive function call should!

I will look into implementing this soon if I have some spare time.

parse sbcl profiler output?

Can gprof2dot understand sbcl output? I'm not too familiar with output formats, but the output below seems standard or pretty close to it/

I'm using the sbcl profiler for common lisp: http://www.sbcl.org/manual/#Deterministic-Profiler


Number of samples:   1892
Sample interval:     0.01 seconds
Total sampling time: 18.92 seconds
Number of cycles:    0
Sampled threads:
 #<SB-THREAD:THREAD "hunchentoot-worker-127.0.0.1:37962" FINISHED values: NIL {1003563043}>
 #<SB-THREAD:THREAD "hunchentoot-worker-127.0.0.1:35202" RUNNING {1005099783}>
 #<SB-THREAD:THREAD "hunchentoot-worker-127.0.0.1:37898" FINISHED values: NIL {1003543043}>
 #<SB-THREAD:THREAD "hunchentoot-worker-127.0.0.1:37834" FINISHED values: NIL {1003503043}>
 #<SB-THREAD:THREAD "hunchentoot-worker-127.0.0.1:55168" FINISHED values: NIL {100A2AA913}>
 #<SB-THREAD:THREAD "hunchentoot-worker-127.0.0.1:37770" FINISHED values: NIL {10034FB043}>
 #<SB-THREAD:THREAD "hunchentoot-worker-127.0.0.1:37706" FINISHED values: NIL {1002B43043}>
 #<SB-THREAD:THREAD "hunchentoot-worker-127.0.0.1:37642" FINISHED values: NIL {100348B043}>
 #<SB-THREAD:THREAD "hunchentoot-worker-127.0.0.1:37570" FINISHED values: NIL {1002A63043}>
 #<SB-THREAD:THREAD "hunchentoot-worker-127.0.0.1:37506" FINISHED values: NIL {1002A53043}>
 #<SB-THREAD:THREAD "auto-flush-thread" RUNNING {1002F8FDA3}>
 #<SB-THREAD:THREAD "hunchentoot-worker-127.0.0.1:37428" FINISHED values: NIL {1002953043}>
 #<SB-THREAD:THREAD "main thread" RUNNING {1001E06DD3}>
 #<SB-THREAD:THREAD "hunchentoot-worker-127.0.0.1:37364" FINISHED values: NIL {10029B3043}>
 #<SB-THREAD:THREAD "hunchentoot-worker-127.0.0.1:37300" FINISHED values: NIL {1001F8B043}>
 #<SB-THREAD:THREAD "hunchentoot-worker-127.0.0.1:37204" FINISHED values: NIL {1002AA5773}>
 #<SB-THREAD:THREAD "hunchentoot-worker-127.0.0.1:37256" FINISHED values: NIL {1002A72B63}>

                               Callers
                 Total.     Function
 Count     %  Count     %      Callees
------------------------------------------------------------------------
   256  13.5                   SB-IMPL::FLUSH-OUTPUT-BUFFER [96]
   256  13.5    256  13.5   "foreign function write" [1]
------------------------------------------------------------------------
    30   1.6                   SB-IMPL::SYSREAD-MAY-BLOCK-P [187]
   131   6.9                   SB-SYS:WAIT-UNTIL-FD-USABLE [125]
   161   8.5    161   8.5   "foreign function __poll" [2]
------------------------------------------------------------------------
     1   0.1                   STRING-EQUAL [3]
    85   4.5                   SB-KERNEL:%ASSOC-TEST [21]
    74   3.9     85   4.5   STRING-EQUAL [3]
     1   0.1                   STRING-EQUAL [3]
    11   0.6                   STRING [18]
------------------------------------------------------------------------
     1   0.1                   (SB-PCL::FAST-METHOD FLEXI-STREAMS::COMPUTE-NUMBER-OF-CHARS (FLEXI-STREAMS::FLEXI-UTF-8-FORMAT T T T)) [167]
     1   0.1                   (FLET SB-THREAD::WITH-MUTEX-THUNK :IN HUNCHENSOCKET::SEND-FRAME) [188]
     1   0.1                   SEND-HUNCHENSOCKET-MESSAGE [153]
     1   0.1                   (LAMBDA (FLEXI-STREAMS::ITEM FLEXI-STREAMS::PAIR) :IN FLEXI-STREAMS::NORMALIZE-EXTERNAL-FORMAT-NAME) [57]
     1   0.1                   (SB-PCL::FAST-METHOD (SETF HUNCHENTOOT:HEADER-OUT) (T SYMBOL)) [158]
     2   0.1                   (SB-PCL::FAST-METHOD ALLOCATE-INSTANCE (STANDARD-CLASS)) [67]
     4   0.2                   (SB-PCL::FAST-METHOD JONATHAN.ENCODE:%TO-JSON (MY-PACKAGE:GAME-MOVE)) [12]
     1   0.1                   SWANK::AUTO-FLUSH-LOOP [251]
     5   0.3                   (LABELS SB-IMPL::HANDLE-IT :IN SB-KERNEL:OUTPUT-OBJECT) [228]
    10   0.5                   (SB-PCL::FAST-METHOD SHARED-INITIALIZE (SB-PCL::SLOT-OBJECT T)) [30]
     3   0.2                   (SB-PCL::FAST-METHOD MAKE-INSTANCE (CLASS)) [42]
     2   0.1                   JSON-RESP [127]
     2   0.1                   HUNCHENSOCKET:SEND-TEXT-MESSAGE [122]
     2   0.1                   HUNCHENSOCKET::READ-APPLICATION-DATA [192]
     4   0.2                   HUNCHENSOCKET::READ-HANDLE-LOOP [154]
     3   0.2                   (SB-PCL::FAST-METHOD HUNCHENSOCKET:TEXT-MESSAGE-RECEIVED (SESSION T T)) [119]
    10   0.5                   HUNCHENSOCKET::HANDLE-FRAME [47]
    68   3.6     68   3.6   SB-VM::UNDEFINED-TRAMP [4]
------------------------------------------------------------------------
    51   2.7                   SB-IMPL::REFILL-INPUT-BUFFER [120]
    51   2.7     51   2.7   (FLET #:CLEANUP-FUN-2093 :IN SB-IMPL::REFILL-INPUT-BUFFER) [5]
------------------------------------------------------------------------
     2   0.1                   SB-IMPL::%WRITE-STRING [29]
     1   0.1                   PPRINT-DISPATCH [6]
     2   0.1                   (LABELS SB-IMPL::HANDLE-IT :IN SB-KERNEL:OUTPUT-OBJECT) [228]
    73   3.9                   (LABELS SB-IMPL::PRINT-IT :IN SB-KERNEL:OUTPUT-OBJECT) [77]
    34   1.8     77   4.1   PPRINT-DISPATCH [6]
     2   0.1                   SB-KERNEL:UB32-BASH-COPY [10]
     1   0.1                   "PPRINT-MACRO-CALL-P" [206]
     1   0.1                   PPRINT-DISPATCH [6]
     5   0.3                   SB-KERNEL:%COERCE-CALLABLE-TO-FUN [60]
    13   0.7                   "PPRINT-ARRAY-P" [27]
     5   0.3                   "PPRINT-DATA-LIST-P" [85]
     4   0.2                   SB-INT:COMMA-P [104]
     5   0.3                   CONSP [78]
     8   0.4                   "PPRINT-FUN-CALL-P" [56]
------------------------------------------------------------------------
     4   0.2                   SEND-HUNCHENSOCKET-MESSAGE [153]
     6   0.3                   JSON-RESP [127]
    24   1.3                   SB-INT:STRINGIFY-OBJECT [123]
    34   1.8     34   1.8   SB-IMPL::%MAKE-STRING-OUTPUT-STREAM [7]
------------------------------------------------------------------------
     2   0.1                   SB-PCL::CHECK-MI-INITARGS [90]
     4   0.2                   JSON-RESP [127]
     4   0.2                   (SB-PCL::FAST-METHOD SHARED-INITIALIZE (SB-PCL::SLOT-OBJECT T)) [30]
     2   0.1                   SEND-HUNCHENSOCKET-MESSAGE [153]
     9   0.5                   (SB-PCL::FAST-METHOD JONATHAN.ENCODE:%TO-JSON (MY-PACKAGE:GAME-MOVE)) [12]
    12   0.6                   (SB-PCL::FAST-METHOD MAKE-INSTANCE (CLASS)) [42]
    34   1.8     34   1.8   (LAMBDA (SB-PCL::.ARG0.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/dlisp3.fasl") [8]
------------------------------------------------------------------------
     1   0.1                   (SB-PCL::FAST-METHOD HUNCHENSOCKET:TEXT-MESSAGE-RECEIVED (SESSION T T)) [119]
     7   0.4                   (SB-PCL::FAST-METHOD MAKE-INSTANCE (CLASS)) [42]
     4   0.2                   FLEXI-STREAMS:OCTETS-TO-STRING [155]
     1   0.1                   FLEXI-STREAMS:STRING-TO-OCTETS [121]
    32   1.7     32   1.7   SB-C:RETURN-MULTIPLE [9]
------------------------------------------------------------------------
     2   0.1                   PPRINT-DISPATCH [6]
    16   0.8                   SB-IMPL::STRING-SOUT [24]
     8   0.4                   (LAMBDA (SB-IMPL::BUFFER SB-IMPL::FROM) :IN GET-OUTPUT-STREAM-STRING) [43]
    26   1.4     26   1.4   SB-KERNEL:UB32-BASH-COPY [10]
------------------------------------------------------------------------
     1   0.1                   (SB-PCL::FAST-METHOD MAKE-INSTANCE (CLASS)) [42]
    13   0.7                   (SB-PCL::FAST-METHOD SHARED-INITIALIZE (SB-PCL::SLOT-OBJECT T)) [30]
     5   0.3                   SB-PCL::SETF-SLOT-VALUE-USING-CLASS-DFUN [169]
     2   0.1                   (SB-PCL::EMF SB-MOP:CLASS-PROTOTYPE) [65]
     2   0.1                   (SB-PCL::FAST-METHOD ALLOCATE-INSTANCE (STANDARD-CLASS)) [67]
    26   1.4     26   1.4   (LAMBDA (SB-PCL::.ARG0.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/braid.fasl") [11]
------------------------------------------------------------------------
   175   9.2                   JSON-RESP [127]
   192  10.1                   SEND-HUNCHENSOCKET-MESSAGE [153]
    25   1.3    367  19.4   (SB-PCL::FAST-METHOD JONATHAN.ENCODE:%TO-JSON (MY-PACKAGE:GAME-MOVE)) [12]
     1   0.1                   MY-PACKAGE::GAME-MOVE-COL [200]
     4   0.2                   SB-VM::UNDEFINED-TRAMP [4]
     2   0.1                   MY-PACKAGE::GAME-MOVE-SHAPE-CODE [170]
     2   0.1                   MY-PACKAGE::GAME-MOVE-ROT [165]
     4   0.2                   (LAMBDA (SB-PCL::.PV. SB-PCL::.NEXT-METHOD-CALL. SB-KERNEL:INSTANCE) :IN SB-PCL::MAKE-STD-READER-METHOD-FUNCTION) [74]
     9   0.5                   (LAMBDA (SB-PCL::.ARG0.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/dlisp3.fasl") [8]
    27   1.4                   WRITE-CHAR [15]
   177   9.4                   PRINC-TO-STRING [40]
   115   6.1                   (SB-PCL::FAST-METHOD JONATHAN.ENCODE:%TO-JSON (NUMBER)) [124]
------------------------------------------------------------------------
     1   0.1                   READ-BYTE [61]
    11   0.6                   (SB-PCL::FAST-METHOD FLEXI-STREAMS::STRING-TO-OCTETS* (FLEXI-STREAMS::FLEXI-UTF-8-FORMAT T T T)) [50]
    23   1.2                   HUNCHENSOCKET::READ-N-BYTES-INTO-SEQUENCE [126]
    22   1.2     35   1.8   SB-KERNEL:%MAKE-ARRAY [13]
     5   0.3                   SB-IMPL::VALIDATE-ARRAY-INITARGS [94]
     2   0.1                   SB-KERNEL:CLASSOID-CELL-TYPEP [174]
     6   0.3                   SB-IMPL::ALLOCATE-VECTOR-WITH-WIDETAG [71]
------------------------------------------------------------------------
    35   1.8                   FLEXI-STREAMS::ISO-8859-NAME-P [128]
    21   1.1     37   2.0   SB-KERNEL:%FIND-POSITION [14]
     4   0.2                   CAR [100]
    12   0.6                   EQL [25]
------------------------------------------------------------------------
     3   0.2                   SB-IMPL::OUTPUT-INTEGER [102]
     1   0.1                   SB-IMPL::%OUTPUT-REASONABLE-INTEGER-IN-BASE [51]
    27   1.4                   (SB-PCL::FAST-METHOD JONATHAN.ENCODE:%TO-JSON (MY-PACKAGE:GAME-MOVE)) [12]
    21   1.1     32   1.7   WRITE-CHAR [15]
     1   0.1                   (SB-PCL::EMF SB-GRAY:STREAM-WRITE-CHAR) [208]
    10   0.5                   SB-IMPL::STRING-OUCH [34]
------------------------------------------------------------------------
     4   0.2                   (SB-PCL::FAST-METHOD MAKE-INSTANCE (CLASS)) [42]
     9   0.5                   FLEXI-STREAMS:OCTETS-TO-STRING [155]
     7   0.4                   FLEXI-STREAMS:STRING-TO-OCTETS [121]
    20   1.1     20   1.1   (LAMBDA (SB-PCL::.ARG0. SB-INT:&MORE SB-PCL::.MORE-CONTEXT. SB-PCL::.MORE-COUNT.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/dlisp3.fasl") [16]
------------------------------------------------------------------------
     1   0.1                   HUNCHENSOCKET::READ-FRAME-FROM-CLIENT [163]
     1   0.1                   HUNCHENSOCKET::READ-APPLICATION-DATA [192]
     4   0.2                   HUNCHENSOCKET::HANDLE-FRAME [47]
     2   0.1                   (FLET HUNCHENSOCKET::MAYBE-ACCEPT-DATA-FRAME :IN HUNCHENSOCKET::HANDLE-FRAME) [141]
     2   0.1                   HUNCHENSOCKET::SEND-FRAME [152]
     2   0.1                   HUNCHENSOCKET::READ-HANDLE-LOOP [154]
     4   0.2                   (SB-PCL::FAST-METHOD HUNCHENSOCKET:TEXT-MESSAGE-RECEIVED (SESSION T T)) [119]
    18   1.0     18   1.0   (LAMBDA (SB-PCL::.ARG0.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/braid.fasl") [17]
------------------------------------------------------------------------
     2   0.1                   SB-KERNEL:%ASSOC-TEST [21]
     3   0.2                   SB-KERNEL:TWO-ARG-STRING-EQUAL [72]
    11   0.6                   STRING-EQUAL [3]
    17   0.9     17   0.9   STRING [18]
------------------------------------------------------------------------
     2   0.1                   SB-IMPL::REFILL-INPUT-BUFFER [120]
     6   0.3                   SB-IMPL::SYSREAD-MAY-BLOCK-P [187]
     9   0.5                   SB-SYS:WAIT-UNTIL-FD-USABLE [125]
    17   0.9     17   0.9   SB-UNIX:UNIX-SIMPLE-POLL [19]
------------------------------------------------------------------------
    17   0.9                   (LABELS SB-IMPL::HANDLE-IT :IN SB-KERNEL:OUTPUT-OBJECT) [228]
    17   0.9     17   0.9   (LAMBDA (SB-PCL::.ARG0. SB-PCL::.ARG1.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/dlisp3.fasl") [20]
------------------------------------------------------------------------
     7   0.4                   SB-PCL::CHECK-MI-INITARGS [90]
    99   5.2                   FLEXI-STREAMS:MAKE-EXTERNAL-FORMAT [39]
    16   0.8    106   5.6   SB-KERNEL:%ASSOC-TEST [21]
     2   0.1                   STRING [18]
     3   0.2                   (LABELS SB-IMPL::EQUAL-AUX :IN EQUAL) [148]
    85   4.5                   STRING-EQUAL [3]
------------------------------------------------------------------------
     8   0.4                   (SB-PCL::FAST-METHOD JONATHAN.ENCODE:%TO-JSON (NUMBER)) [124]
     7   0.4                   (LABELS SB-IMPL::HANDLE-IT :IN SB-KERNEL:OUTPUT-OBJECT) [228]
    15   0.8     15   0.8   WRITE-STRING [22]
------------------------------------------------------------------------
    16   0.8                   (SB-PCL::FAST-METHOD MAKE-INSTANCE (CLASS)) [42]
    15   0.8     17   0.9   (SB-PCL::EMF SHARED-INITIALIZE) [23]
     2   0.1                   SB-PCL::CHECK-APPLICABLE-KEYWORDS [37]
------------------------------------------------------------------------
     2   0.1                   (LABELS SB-IMPL::HANDLE-IT :IN SB-KERNEL:OUTPUT-OBJECT) [228]
    27   1.4                   SB-IMPL::%WRITE-STRING [29]
    13   0.7     29   1.5   SB-IMPL::STRING-SOUT [24]
    16   0.8                   SB-KERNEL:UB32-BASH-COPY [10]
------------------------------------------------------------------------
     1   0.1                   FLEXI-STREAMS::ISO-8859-NAME-P [128]
    12   0.6                   SB-KERNEL:%FIND-POSITION [14]
    13   0.7     13   0.7   EQL [25]
------------------------------------------------------------------------
     1   0.1                   FIND [26]
    29   1.5                   FLEXI-STREAMS::NORMALIZE-EXTERNAL-FORMAT-NAME [68]
    13   0.7     29   1.5   FIND [26]
     1   0.1                   FIND [26]
     2   0.1                   IDENTITY [168]
    14   0.7                   (LAMBDA (FLEXI-STREAMS::ITEM FLEXI-STREAMS::PAIR) :IN FLEXI-STREAMS::NORMALIZE-EXTERNAL-FORMAT-NAME) [57]
------------------------------------------------------------------------
    13   0.7                   PPRINT-DISPATCH [6]
    13   0.7     13   0.7   "PPRINT-ARRAY-P" [27]
------------------------------------------------------------------------
     2   0.1                   SEND-HUNCHENSOCKET-MESSAGE [153]
     3   0.2                   JSON-RESP [127]
     1   0.1                   GET-OUTPUT-STREAM-STRING [28]
    39   2.1                   SB-INT:STRINGIFY-OBJECT [123]
    12   0.6     44   2.3   GET-OUTPUT-STREAM-STRING [28]
     1   0.1                   GET-OUTPUT-STREAM-STRING [28]
     2   0.1                   (LAMBDA (SB-IMPL::BUFFER SB-IMPL::FROM) :IN GET-OUTPUT-STREAM-STRING) [43]
     3   0.2                   SB-IMPL::LIST-NREVERSE [139]
    27   1.4                   (FLET SB-IMPL::REPLACE-ALL :IN GET-OUTPUT-STREAM-STRING) [80]
------------------------------------------------------------------------
    25   1.3                   (LABELS SB-IMPL::HANDLE-IT :IN SB-KERNEL:OUTPUT-OBJECT) [228]
    16   0.8                   (SB-PCL::FAST-METHOD JONATHAN.ENCODE:%TO-JSON (NUMBER)) [124]
    12   0.6     41   2.2   SB-IMPL::%WRITE-STRING [29]
     2   0.1                   PPRINT-DISPATCH [6]
    27   1.4                   SB-IMPL::STRING-SOUT [24]
------------------------------------------------------------------------
     1   0.1                   (SB-PCL::FAST-METHOD SHARED-INITIALIZE (SB-PCL::SLOT-OBJECT T)) [30]
    84   4.4                   (SB-PCL::FAST-METHOD MAKE-INSTANCE (CLASS)) [42]
    12   0.6     84   4.4   (SB-PCL::FAST-METHOD SHARED-INITIALIZE (SB-PCL::SLOT-OBJECT T)) [30]
     1   0.1                   SB-KERNEL:%COERCE-CALLABLE-TO-FUN [60]
     2   0.1                   (LAMBDA (SB-KERNEL:INSTANCE) :IN SB-PCL::MAKE-OPTIMIZED-STD-BOUNDP-METHOD-FUNCTION) [180]
     2   0.1                   (LAMBDA (&REST SB-IMPL::ARGUMENTS) :IN CONSTANTLY) [173]
    13   0.7                   (LAMBDA (SB-PCL::.ARG0.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/braid.fasl") [11]
     7   0.4                   SB-PCL::SETF-SLOT-VALUE-USING-CLASS-DFUN [169]
     4   0.2                   (LAMBDA (SB-PCL::.ARG0.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/dlisp3.fasl") [8]
     1   0.1                   (SB-PCL::FAST-METHOD SHARED-INITIALIZE (SB-PCL::SLOT-OBJECT T)) [30]
    10   0.5                   SB-VM::UNDEFINED-TRAMP [4]
     5   0.3                   SB-PCL::SLOT-BOUNDP-USING-CLASS-DFUN [91]
     3   0.2                   SB-INT:MEMQ [142]
    11   0.6                   (SB-PCL::EMF SB-MOP:CLASS-SLOTS) [58]
     5   0.3                   (LAMBDA (SB-PCL::NV SB-KERNEL:INSTANCE) :IN SB-PCL::MAKE-OPTIMIZED-STD-WRITER-METHOD-FUNCTION) [84]
     5   0.3                   CLASS-OF [79]
------------------------------------------------------------------------
     1   0.1                   HUNCHENSOCKET::MASK-UNMASK [190]
     4   0.2                   (SB-PCL::FAST-METHOD FLEXI-STREAMS::STRING-TO-OCTETS* (FLEXI-STREAMS::FLEXI-UTF-8-FORMAT T T T)) [50]
     2   0.1                   (SB-PCL::FAST-METHOD FLEXI-STREAMS::COMPUTE-NUMBER-OF-OCTETS (FLEXI-STREAMS::FLEXI-UTF-8-FORMAT T T T)) [89]
     2   0.1                   GAME-EXC-MOVE [130]
     1   0.1                   (SB-PCL::FAST-METHOD FLEXI-STREAMS::OCTETS-TO-STRING* (FLEXI-STREAMS::FLEXI-UTF-8-FORMAT T T T)) [97]
    12   0.6     12   0.6   SB-KERNEL:HAIRY-DATA-VECTOR-REF/CHECK-BOUNDS [31]
------------------------------------------------------------------------
     4   0.2                   HUNCHENSOCKET:SEND-TEXT-MESSAGE [122]
     3   0.2                   (SB-PCL::FAST-METHOD FLEXI-STREAMS::OCTETS-TO-STRING* (FLEXI-STREAMS::FLEXI-UTF-8-FORMAT T T T)) [97]
     4   0.2                   HUNCHENSOCKET::HANDLE-FRAME [47]
    11   0.6     11   0.6   (LAMBDA (SB-PCL::.ARG0. SB-PCL::.ARG1. SB-PCL::.ARG2. SB-PCL::.ARG3.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/dlisp3.fasl") [32]
------------------------------------------------------------------------
     2   0.1                   SEND-HUNCHENSOCKET-MESSAGE [153]
     2   0.1                   (SB-PCL::FAST-METHOD ALLOCATE-INSTANCE (STANDARD-CLASS)) [67]
     7   0.4                   (SB-PCL::FAST-METHOD MAKE-INSTANCE (CLASS)) [42]
    11   0.6     11   0.6   SB-KERNEL:CLASSOID-TYPEP [33]
------------------------------------------------------------------------
    10   0.5                   WRITE-CHAR [15]
    11   0.6     11   0.6   SB-IMPL::STRING-OUCH [34]
------------------------------------------------------------------------
     1   0.1                   SB-IMPL::BUFFER-OUTPUT [82]
    10   0.5                   (FLET SB-IMPL::COPY-TO-BUFFER :IN SB-IMPL::BUFFER-OUTPUT) [229]
    11   0.6     11   0.6   SB-KERNEL:COPY-UB8-TO-SYSTEM-AREA [35]
------------------------------------------------------------------------
    24   1.3                   FLEXI-STREAMS::MAKE-EXTERNAL-FORMAT% [49]
    11   0.6     24   1.3   FLEXI-STREAMS::EXTERNAL-FORMAT-CLASS-NAME [36]
     1   0.1                   FLEXI-STREAMS::KOI8-R-NAME-P [88]
     2   0.1                   FLEXI-STREAMS::CODE-PAGE-NAME-P [178]
    10   0.5                   FLEXI-STREAMS::ISO-8859-NAME-P [128]
------------------------------------------------------------------------
     1   0.1                   (SB-PCL::EMF INITIALIZE-INSTANCE) [87]
     2   0.1                   (SB-PCL::EMF SHARED-INITIALIZE) [23]
     6   0.3                   (SB-PCL::EMF MAKE-INSTANCE) [38]
    11   0.6     11   0.6   SB-PCL::CHECK-APPLICABLE-KEYWORDS [37]
------------------------------------------------------------------------
     6   0.3                   FLEXI-STREAMS:STRING-TO-OCTETS [121]
     7   0.4                   FLEXI-STREAMS:OCTETS-TO-STRING [155]
    11   0.6     17   0.9   (SB-PCL::EMF MAKE-INSTANCE) [38]
     6   0.3                   SB-PCL::CHECK-APPLICABLE-KEYWORDS [37]
------------------------------------------------------------------------
    56   3.0                   FLEXI-STREAMS:OCTETS-TO-STRING [155]
    53   2.8                   FLEXI-STREAMS:STRING-TO-OCTETS [121]
    10   0.5    109   5.8   FLEXI-STREAMS:MAKE-EXTERNAL-FORMAT [39]
    99   5.2                   SB-KERNEL:%ASSOC-TEST [21]
------------------------------------------------------------------------
   177   9.4                   (SB-PCL::FAST-METHOD JONATHAN.ENCODE:%TO-JSON (MY-PACKAGE:GAME-MOVE)) [12]
    88   4.7                   (SB-PCL::FAST-METHOD JONATHAN.ENCODE:%TO-JSON (NUMBER)) [124]
    10   0.5    265  14.0   PRINC-TO-STRING [40]
   255  13.5                   SB-INT:STRINGIFY-OBJECT [123]
------------------------------------------------------------------------
    29   1.5                   READ-SEQUENCE [76]
    10   0.5     29   1.5   SB-IMPL::ANSI-STREAM-READ-SEQUENCE [41]
     1   0.1                   SB-IMPL::ANSI-STREAM-READ-N-BYTES [205]
    10   0.5                   SB-IMPL::FD-STREAM-READ-N-BYTES [45]
     4   0.2                   "foreign function memcpy" [112]
     1   0.1                   LENGTH [132]
------------------------------------------------------------------------
     2   0.1                   HUNCHENSOCKET::HANDLE-FRAME [47]
    79   4.2                   FLEXI-STREAMS:STRING-TO-OCTETS [121]
   132   7.0                   FLEXI-STREAMS:OCTETS-TO-STRING [155]
    10   0.5    213  11.3   (SB-PCL::FAST-METHOD MAKE-INSTANCE (CLASS)) [42]
     1   0.1                   (LAMBDA (SB-PCL::.ARG0.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/braid.fasl") [11]
     1   0.1                   (SB-PCL::FAST-METHOD INITIALIZE-INSTANCE (SB-PCL::SLOT-OBJECT)) [209]
     1   0.1                   (SB-PCL::FAST-METHOD SB-MOP:CLASS-DEFAULT-INITARGS (SB-PCL::SLOT-CLASS)) [207]
     2   0.1                   SB-PCL::PLIST-VALUE [166]
     1   0.1                   SB-VM::FILL-VECTOR/T [201]
     4   0.2                   (LAMBDA (SB-PCL::.ARG0. SB-INT:&MORE SB-PCL::.MORE-CONTEXT. SB-PCL::.MORE-COUNT.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/dlisp3.fasl") [16]
     7   0.4                   SB-C:RETURN-MULTIPLE [9]
     8   0.4                   SB-PCL::MAYBE-CALL-CTOR [237]
     3   0.2                   SB-VM::UNDEFINED-TRAMP [4]
    31   1.6                   SB-PCL::CHECK-MI-INITARGS [90]
    16   0.8                   (SB-PCL::EMF SHARED-INITIALIZE) [23]
     5   0.3                   (SB-PCL::EMF INITIALIZE-INSTANCE) [87]
    12   0.6                   (LAMBDA (SB-PCL::.ARG0.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/dlisp3.fasl") [8]
     3   0.2                   SB-PCL::ALLOCATE-STANDARD-INSTANCE [159]
    10   0.5                   (SB-PCL::FAST-METHOD ALLOCATE-INSTANCE (STANDARD-CLASS)) [67]
     5   0.3                   (LAMBDA (SB-PCL::.ARG0. SB-PCL::.ARG1. SB-INT:&MORE SB-PCL::.MORE-CONTEXT. SB-PCL::.MORE-COUNT.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/dlisp3.fasl") [81]
     7   0.4                   SB-KERNEL:CLASSOID-TYPEP [33]
    84   4.4                   (SB-PCL::FAST-METHOD SHARED-INITIALIZE (SB-PCL::SLOT-OBJECT T)) [30]
------------------------------------------------------------------------
     2   0.1                   GET-OUTPUT-STREAM-STRING [28]
    16   0.8                   (FLET SB-IMPL::REPLACE-ALL :IN GET-OUTPUT-STREAM-STRING) [80]
    10   0.5     18   1.0   (LAMBDA (SB-IMPL::BUFFER SB-IMPL::FROM) :IN GET-OUTPUT-STREAM-STRING) [43]
     8   0.4                   SB-KERNEL:UB32-BASH-COPY [10]
------------------------------------------------------------------------
    10   0.5                   (LABELS SB-IMPL::HANDLE-IT :IN SB-KERNEL:OUTPUT-OBJECT) [228]
    10   0.5     10   0.5   SB-IMPL::OUTPUT-VECTOR [44]
------------------------------------------------------------------------
    10   0.5                   SB-IMPL::ANSI-STREAM-READ-SEQUENCE [41]
    10   0.5     10   0.5   SB-IMPL::FD-STREAM-READ-N-BYTES [45]
------------------------------------------------------------------------
  1861  98.4                   SB-THREAD::CALL-WITH-MUTEX [151]
     9   0.5   1864  98.5   (FLET #:WITHOUT-INTERRUPTS-BODY-359 :IN SB-THREAD::CALL-WITH-MUTEX) [46]
     1   0.1                   SB-THREAD:CONDITION-WAIT [266]
    35   1.8                   HUNCHENSOCKET::WRITE-FRAME [191]
     1   0.1                   (FLET SB-THREAD::WITH-MUTEX-THUNK :IN HUNCHENSOCKET::SEND-FRAME) [188]
  1545  81.7                   (FLET SB-THREAD::WITH-MUTEX-THUNK :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE) [224]
   273  14.4                   FORCE-OUTPUT [118]
------------------------------------------------------------------------
  1494  79.0                   HUNCHENSOCKET::READ-HANDLE-LOOP [154]
     9   0.5   1494  79.0   HUNCHENSOCKET::HANDLE-FRAME [47]
     1   0.1                   ASH [113]
     1   0.1                   (FLET #:CLEANUP-FUN-500 :IN HUNCHENSOCKET::HANDLE-FRAME) [204]
     4   0.2                   (LAMBDA (SB-PCL::.ARG0. SB-PCL::.ARG1. SB-PCL::.ARG2.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/dlisp3.fasl") [116]
     4   0.2                   (LAMBDA (SB-PCL::.ARG0.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/braid.fasl") [17]
     2   0.1                   SB-IMPL::LIST-REVERSE [176]
     2   0.1                   (SB-PCL::FAST-METHOD MAKE-INSTANCE (CLASS)) [42]
    24   1.3                   (FLET HUNCHENSOCKET::MAYBE-ACCEPT-DATA-FRAME :IN HUNCHENSOCKET::HANDLE-FRAME) [141]
    15   0.8                   CONCATENATE [193]
    20   1.1                   HUNCHENSOCKET::READ-APPLICATION-DATA [192]
    10   0.5                   SB-VM::UNDEFINED-TRAMP [4]
    14   0.7                   HUNCHENSOCKET::MASK-UNMASK [190]
     4   0.2                   (LAMBDA (SB-PCL::.ARG0. SB-PCL::.ARG1. SB-PCL::.ARG2. SB-PCL::.ARG3.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/dlisp3.fasl") [32]
    23   1.2                   (SB-PCL::FAST-METHOD FLEXI-STREAMS::OCTETS-TO-STRING* (FLEXI-STREAMS::FLEXI-UTF-8-FORMAT T T T)) [97]
   287  15.2                   FLEXI-STREAMS:OCTETS-TO-STRING [155]
  1064  56.2                   (SB-PCL::FAST-METHOD HUNCHENSOCKET:TEXT-MESSAGE-RECEIVED (SESSION T T)) [119]
------------------------------------------------------------------------
     9   0.5                   (LABELS SB-IMPL::HANDLE-IT :IN SB-KERNEL:OUTPUT-OBJECT) [228]
     9   0.5      9   0.5   (SB-PCL::FAST-METHOD PRINT-OBJECT (VECTOR T)) [48]
------------------------------------------------------------------------
    55   2.9                   FLEXI-STREAMS:OCTETS-TO-STRING [155]
    47   2.5                   FLEXI-STREAMS:STRING-TO-OCTETS [121]
     9   0.5    102   5.4   FLEXI-STREAMS::MAKE-EXTERNAL-FORMAT% [49]
     4   0.2                   FLEXI-STREAMS::KOI8-R-NAME-P [88]
    24   1.3                   FLEXI-STREAMS::EXTERNAL-FORMAT-CLASS-NAME [36]
    34   1.8                   FLEXI-STREAMS::NORMALIZE-EXTERNAL-FORMAT-NAME [68]
    29   1.5                   FLEXI-STREAMS::ISO-8859-NAME-P [128]
------------------------------------------------------------------------
    41   2.2                   HUNCHENSOCKET:SEND-TEXT-MESSAGE [122]
     9   0.5     41   2.2   (SB-PCL::FAST-METHOD FLEXI-STREAMS::STRING-TO-OCTETS* (FLEXI-STREAMS::FLEXI-UTF-8-FORMAT T T T)) [50]
     1   0.1                   (SB-IMPL::OPTIMIZED-DATA-VECTOR-REF CHARACTER) [53]
     4   0.2                   SB-KERNEL:HAIRY-DATA-VECTOR-REF/CHECK-BOUNDS [31]
    11   0.6                   SB-KERNEL:%MAKE-ARRAY [13]
    15   0.8                   (SB-PCL::FAST-METHOD FLEXI-STREAMS::COMPUTE-NUMBER-OF-OCTETS (FLEXI-STREAMS::FLEXI-UTF-8-FORMAT T T T)) [89]
------------------------------------------------------------------------
     1   0.1                   SB-IMPL::%OUTPUT-REASONABLE-INTEGER-IN-BASE [51]
    14   0.7                   SB-IMPL::OUTPUT-INTEGER [102]
     9   0.5     14   0.7   SB-IMPL::%OUTPUT-REASONABLE-INTEGER-IN-BASE [51]
     1   0.1                   SB-IMPL::%OUTPUT-REASONABLE-INTEGER-IN-BASE [51]
     1   0.1                   WRITE-CHAR [15]
     4   0.2                   TRUNCATE [111]
------------------------------------------------------------------------
    20   1.1                   JSON-RESP [127]
     9   0.5     20   1.1   (SB-PCL::EMF (SETF HUNCHENTOOT:HEADER-OUT)) [52]
     2   0.1                   (FLET SB-THREAD::WITH-MUTEX-THUNK :IN HUNCHENSOCKET::SEND-FRAME) [188]
     9   0.5                   (SB-PCL::FAST-METHOD (SETF HUNCHENTOOT:HEADER-OUT) (T SYMBOL)) [158]
------------------------------------------------------------------------
     1   0.1                   (SB-PCL::FAST-METHOD FLEXI-STREAMS::STRING-TO-OCTETS* (FLEXI-STREAMS::FLEXI-UTF-8-FORMAT T T T)) [50]
     8   0.4                   (SB-PCL::FAST-METHOD FLEXI-STREAMS::COMPUTE-NUMBER-OF-OCTETS (FLEXI-STREAMS::FLEXI-UTF-8-FORMAT T T T)) [89]
     9   0.5      9   0.5   (SB-IMPL::OPTIMIZED-DATA-VECTOR-REF CHARACTER) [53]
------------------------------------------------------------------------
   276  14.6                   READ-BYTE [61]
     8   0.4    276  14.6   SB-IMPL::INPUT-UNSIGNED-8BIT-BYTE [54]
     1   0.1                   ERROR [282]
     1   0.1                   SB-SYS:WAIT-UNTIL-FD-USABLE [125]
   265  14.0                   SB-IMPL::REFILL-INPUT-BUFFER [120]
------------------------------------------------------------------------
   352  18.6                   HUNCHENSOCKET::READ-HANDLE-LOOP [154]
     8   0.4    352  18.6   HUNCHENSOCKET::READ-FRAME [55]
     6   0.3                   (LAMBDA (SB-PCL::|.P0.| SB-PCL::|.P1.| SB-PCL::|.P2.| SB-PCL::|.P3.|)) [75]
     3   0.2                   HUNCHENSOCKET::CONTROL-FRAME-P [140]
    49   2.6                   HUNCHENSOCKET::READ-N-BYTES-INTO-SEQUENCE [126]
   284  15.0                   READ-BYTE [61]
------------------------------------------------------------------------
     8   0.4                   PPRINT-DISPATCH [6]
     8   0.4      8   0.4   "PPRINT-FUN-CALL-P" [56]
------------------------------------------------------------------------
     1   0.1                   FLEXI-STREAMS::NORMALIZE-EXTERNAL-FORMAT-NAME [68]
     1   0.1                   (SB-PCL::EMF SB-MOP:CLASS-SLOTS) [58]
    14   0.7                   FIND [26]
     8   0.4     16   0.8   (LAMBDA (FLEXI-STREAMS::ITEM FLEXI-STREAMS::PAIR) :IN FLEXI-STREAMS::NORMALIZE-EXTERNAL-FORMAT-NAME) [57]
     1   0.1                   SB-VM::UNDEFINED-TRAMP [4]
     7   0.4                   SB-KERNEL:TWO-ARG-STRING-EQUAL [72]
------------------------------------------------------------------------
    11   0.6                   (SB-PCL::FAST-METHOD SHARED-INITIALIZE (SB-PCL::SLOT-OBJECT T)) [30]
     8   0.4     11   0.6   (SB-PCL::EMF SB-MOP:CLASS-SLOTS) [58]
     1   0.1                   (LAMBDA (FLEXI-STREAMS::ITEM FLEXI-STREAMS::PAIR) :IN FLEXI-STREAMS::NORMALIZE-EXTERNAL-FORMAT-NAME) [57]
     2   0.1                   (LAMBDA (SB-PCL::.PV. SB-PCL::.NEXT-METHOD-CALL. SB-KERNEL:INSTANCE) :IN SB-PCL::MAKE-STD-READER-METHOD-FUNCTION) [74]
------------------------------------------------------------------------
     8   0.4                   (FLET HUNCHENSOCKET::MAYBE-ACCEPT-DATA-FRAME :IN HUNCHENSOCKET::HANDLE-FRAME) [141]
     8   0.4      8   0.4   REDUCE [59]
------------------------------------------------------------------------
     1   0.1                   (SB-PCL::FAST-METHOD SHARED-INITIALIZE (SB-PCL::SLOT-OBJECT T)) [30]
     5   0.3                   PPRINT-DISPATCH [6]
     2   0.1                   (LABELS SB-IMPL::PRINT-IT :IN SB-KERNEL:OUTPUT-OBJECT) [77]
     8   0.4      8   0.4   SB-KERNEL:%COERCE-CALLABLE-TO-FUN [60]
------------------------------------------------------------------------
   284  15.0                   HUNCHENSOCKET::READ-FRAME [55]
     7   0.4    284  15.0   READ-BYTE [61]
     1   0.1                   SB-KERNEL:%MAKE-ARRAY [13]
   276  14.6                   SB-IMPL::INPUT-UNSIGNED-8BIT-BYTE [54]
------------------------------------------------------------------------
     1   0.1                   CHUNGA:READ-HTTP-HEADERS [256]
    27   1.4                   HUNCHENSOCKET::WRITE-FRAME [191]
     7   0.4     28   1.5   WRITE-SEQUENCE [62]
    21   1.1                   SB-IMPL::ANSI-STREAM-WRITE-SEQUENCE [133]
------------------------------------------------------------------------
     7   0.4                   SB-PCL::CHECK-MI-INITARGS [90]
     7   0.4      7   0.4   SB-PCL::PLIST-KEYS [63]
------------------------------------------------------------------------
     7   0.4                   (FLET HUNCHENSOCKET::MAYBE-ACCEPT-DATA-FRAME :IN HUNCHENSOCKET::HANDLE-FRAME) [141]
     7   0.4      7   0.4   (LAMBDA (SB-PCL::.ARG0. SB-PCL::.ARG1. SB-PCL::.ARG2. SB-PCL::.ARG3. SB-PCL::.ARG4.)) [64]
------------------------------------------------------------------------
    10   0.5                   SB-PCL::CHECK-MI-INITARGS [90]
     1   0.1                   (SB-PCL::EMF SB-MOP:CLASS-PROTOTYPE) [65]
     7   0.4     10   0.5   (SB-PCL::EMF SB-MOP:CLASS-PROTOTYPE) [65]
     1   0.1                   (SB-PCL::FAST-METHOD SB-MOP:CLASS-PROTOTYPE :BEFORE (T)) [198]
     1   0.1                   (SB-PCL::EMF SB-MOP:CLASS-PROTOTYPE) [65]
     2   0.1                   (LAMBDA (SB-PCL::.ARG0.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/braid.fasl") [11]
------------------------------------------------------------------------
     6   0.3                   SB-PCL::PLIST-VALUE [166]
     7   0.4      7   0.4   (LAMBDA (SB-PCL::.ARG0.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/braid.fasl") [66]
------------------------------------------------------------------------
    10   0.5                   (SB-PCL::FAST-METHOD MAKE-INSTANCE (CLASS)) [42]
     6   0.3     12   0.6   (SB-PCL::FAST-METHOD ALLOCATE-INSTANCE (STANDARD-CLASS)) [67]
     2   0.1                   SB-VM::UNDEFINED-TRAMP [4]
     2   0.1                   SB-KERNEL:CLASSOID-TYPEP [33]
     2   0.1                   (LAMBDA (SB-PCL::.ARG0.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/braid.fasl") [11]
------------------------------------------------------------------------
     1   0.1                   FLEXI-STREAMS:STRING-TO-OCTETS [121]
    34   1.8                   FLEXI-STREAMS::MAKE-EXTERNAL-FORMAT% [49]
     6   0.3     36   1.9   FLEXI-STREAMS::NORMALIZE-EXTERNAL-FORMAT-NAME [68]
     1   0.1                   (LAMBDA (FLEXI-STREAMS::ITEM FLEXI-STREAMS::PAIR) :IN FLEXI-STREAMS::NORMALIZE-EXTERNAL-FORMAT-NAME) [57]
    29   1.5                   FIND [26]
------------------------------------------------------------------------
    11   0.6                   SB-KERNEL:%CONCATENATE-TO-SIMPLE-VECTOR [135]
     6   0.3     11   0.6   REPLACE [69]
     1   0.1                   (SB-IMPL::OPTIMIZED-DATA-VECTOR-SET T) [212]
     2   0.1                   SB-KERNEL:HAIRY-DATA-VECTOR-REF [164]
     2   0.1                   (SB-IMPL::OPTIMIZED-DATA-VECTOR-REF (UNSIGNED-BYTE 8)) [157]
------------------------------------------------------------------------
     2   0.1                   (SB-PCL::FAST-METHOD HUNCHENSOCKET:TEXT-MESSAGE-RECEIVED (SESSION T T)) [119]
     4   0.2                   JSON-RESP [127]
     6   0.3      6   0.3   (SETF HUNCHENTOOT:RETURN-CODE*) [70]
------------------------------------------------------------------------
     6   0.3                   SB-KERNEL:%MAKE-ARRAY [13]
     6   0.3      6   0.3   SB-IMPL::ALLOCATE-VECTOR-WITH-WIDETAG [71]
------------------------------------------------------------------------
     7   0.4                   (LAMBDA (FLEXI-STREAMS::ITEM FLEXI-STREAMS::PAIR) :IN FLEXI-STREAMS::NORMALIZE-EXTERNAL-FORMAT-NAME) [57]
     6   0.3      9   0.5   SB-KERNEL:TWO-ARG-STRING-EQUAL [72]
     3   0.2                   STRING [18]
------------------------------------------------------------------------
     5   0.3                   FORCE-OUTPUT [118]
     6   0.3      6   0.3   SB-IMPL::FD-STREAM-MISC-ROUTINE [73]
------------------------------------------------------------------------
     2   0.1                   (SB-PCL::EMF SB-MOP:CLASS-SLOTS) [58]
     4   0.2                   (SB-PCL::FAST-METHOD JONATHAN.ENCODE:%TO-JSON (MY-PACKAGE:GAME-MOVE)) [12]
     6   0.3      6   0.3   (LAMBDA (SB-PCL::.PV. SB-PCL::.NEXT-METHOD-CALL. SB-KERNEL:INSTANCE) :IN SB-PCL::MAKE-STD-READER-METHOD-FUNCTION) [74]
------------------------------------------------------------------------
     6   0.3                   HUNCHENSOCKET::READ-FRAME [55]
     6   0.3      6   0.3   (LAMBDA (SB-PCL::|.P0.| SB-PCL::|.P1.| SB-PCL::|.P2.| SB-PCL::|.P3.|)) [75]
------------------------------------------------------------------------
    36   1.9                   HUNCHENSOCKET::READ-N-BYTES-INTO-SEQUENCE [126]
     5   0.3     36   1.9   READ-SEQUENCE [76]
     2   0.1                   SB-KERNEL:SEQUENCEP [181]
    29   1.5                   SB-IMPL::ANSI-STREAM-READ-SEQUENCE [41]
------------------------------------------------------------------------
    80   4.2                   (LABELS SB-IMPL::HANDLE-IT :IN SB-KERNEL:OUTPUT-OBJECT) [228]
     5   0.3     80   4.2   (LABELS SB-IMPL::PRINT-IT :IN SB-KERNEL:OUTPUT-OBJECT) [77]
     2   0.1                   SB-KERNEL:%COERCE-CALLABLE-TO-FUN [60]
    73   3.9                   PPRINT-DISPATCH [6]
------------------------------------------------------------------------
     5   0.3                   PPRINT-DISPATCH [6]
     5   0.3      5   0.3   CONSP [78]
------------------------------------------------------------------------
     5   0.3                   (SB-PCL::FAST-METHOD SHARED-INITIALIZE (SB-PCL::SLOT-OBJECT T)) [30]
     5   0.3      5   0.3   CLASS-OF [79]
------------------------------------------------------------------------
    27   1.4                   GET-OUTPUT-STREAM-STRING [28]
     5   0.3     27   1.4   (FLET SB-IMPL::REPLACE-ALL :IN GET-OUTPUT-STREAM-STRING) [80]
     2   0.1                   SB-VM::GENERIC-+ [99]
     4   0.2                   SB-KERNEL:LIST-FILL* [109]
    16   0.8                   (LAMBDA (SB-IMPL::BUFFER SB-IMPL::FROM) :IN GET-OUTPUT-STREAM-STRING) [43]
------------------------------------------------------------------------
     5   0.3                   (SB-PCL::FAST-METHOD MAKE-INSTANCE (CLASS)) [42]
     5   0.3      5   0.3   (LAMBDA (SB-PCL::.ARG0. SB-PCL::.ARG1. SB-INT:&MORE SB-PCL::.MORE-CONTEXT. SB-PCL::.MORE-COUNT.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/dlisp3.fasl") [81]
------------------------------------------------------------------------
     1   0.1                   SB-IMPL::BUFFER-OUTPUT [82]
    16   0.8                   SB-IMPL::ANSI-STREAM-WRITE-SEQUENCE [133]
     5   0.3     16   0.8   SB-IMPL::BUFFER-OUTPUT [82]
     1   0.1                   SB-IMPL::BUFFER-OUTPUT [82]
     1   0.1                   SB-KERNEL:COPY-UB8-TO-SYSTEM-AREA [35]
    10   0.5                   (FLET SB-IMPL::COPY-TO-BUFFER :IN SB-IMPL::BUFFER-OUTPUT) [229]
------------------------------------------------------------------------
     8   0.4                   SB-SYS:DECODE-TIMEOUT [131]
     5   0.3      8   0.4   GET-INTERNAL-REAL-TIME [83]
     3   0.2                   "foreign function __vdso_gettimeofday" [101]
------------------------------------------------------------------------
     5   0.3                   (SB-PCL::FAST-METHOD SHARED-INITIALIZE (SB-PCL::SLOT-OBJECT T)) [30]
     5   0.3      5   0.3   (LAMBDA (SB-PCL::NV SB-KERNEL:INSTANCE) :IN SB-PCL::MAKE-OPTIMIZED-STD-WRITER-METHOD-FUNCTION) [84]
------------------------------------------------------------------------
     5   0.3                   PPRINT-DISPATCH [6]
     5   0.3      5   0.3   "PPRINT-DATA-LIST-P" [85]
------------------------------------------------------------------------
    12   0.6                   (SB-PCL::FAST-METHOD MAKE-INSTANCE (SYMBOL)) [189]
     5   0.3     13   0.7   FIND-CLASS [86]
     8   0.4                   SB-KERNEL:FIND-CLASSOID-CELL [105]
------------------------------------------------------------------------
     5   0.3                   (SB-PCL::FAST-METHOD MAKE-INSTANCE (CLASS)) [42]
     5   0.3      6   0.3   (SB-PCL::EMF INITIALIZE-INSTANCE) [87]
     1   0.1                   SB-PCL::CHECK-APPLICABLE-KEYWORDS [37]
------------------------------------------------------------------------
     1   0.1                   FLEXI-STREAMS::EXTERNAL-FORMAT-CLASS-NAME [36]
     4   0.2                   FLEXI-STREAMS::MAKE-EXTERNAL-FORMAT% [49]
     5   0.3      5   0.3   FLEXI-STREAMS::KOI8-R-NAME-P [88]
------------------------------------------------------------------------
    15   0.8                   (SB-PCL::FAST-METHOD FLEXI-STREAMS::STRING-TO-OCTETS* (FLEXI-STREAMS::FLEXI-UTF-8-FORMAT T T T)) [50]
     5   0.3     15   0.8   (SB-PCL::FAST-METHOD FLEXI-STREAMS::COMPUTE-NUMBER-OF-OCTETS (FLEXI-STREAMS::FLEXI-UTF-8-FORMAT T T T)) [89]
     2   0.1                   SB-KERNEL:HAIRY-DATA-VECTOR-REF/CHECK-BOUNDS [31]
     8   0.4                   (SB-IMPL::OPTIMIZED-DATA-VECTOR-REF CHARACTER) [53]
------------------------------------------------------------------------
    31   1.6                   (SB-PCL::FAST-METHOD MAKE-INSTANCE (CLASS)) [42]
     5   0.3     31   1.6   SB-PCL::CHECK-MI-INITARGS [90]
     7   0.4                   SB-KERNEL:%ASSOC-TEST [21]
     2   0.1                   (LAMBDA (SB-PCL::.ARG0.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/dlisp3.fasl") [8]
    10   0.5                   (SB-PCL::EMF SB-MOP:CLASS-PROTOTYPE) [65]
     7   0.4                   SB-PCL::PLIST-KEYS [63]
------------------------------------------------------------------------
     5   0.3                   (SB-PCL::FAST-METHOD SHARED-INITIALIZE (SB-PCL::SLOT-OBJECT T)) [30]
     5   0.3      5   0.3   SB-PCL::SLOT-BOUNDP-USING-CLASS-DFUN [91]
------------------------------------------------------------------------
     4   0.2                   JSON-RESP [127]
     1   0.1                   (SB-PCL::FAST-METHOD (SETF HUNCHENTOOT:HEADER-OUT) (T SYMBOL)) [158]
     5   0.3      5   0.3   (LAMBDA (SB-PCL::.ARG0. SB-PCL::.ARG1.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/braid.fasl") [92]
------------------------------------------------------------------------
     5   0.3                   SB-SYS:DECODE-TIMEOUT [131]
     5   0.3      5   0.3   SB-KERNEL:TWO-ARG-* [93]
------------------------------------------------------------------------
     5   0.3                   SB-KERNEL:%MAKE-ARRAY [13]
     5   0.3      5   0.3   SB-IMPL::VALIDATE-ARRAY-INITARGS [94]
------------------------------------------------------------------------
     2   0.1                   FLEXI-STREAMS:OCTETS-TO-STRING [155]
     3   0.2                   FLEXI-STREAMS:STRING-TO-OCTETS [121]
     5   0.3      5   0.3   FLEXI-STREAMS::MAYBE-CONVERT-EXTERNAL-FORMAT [95]
------------------------------------------------------------------------
     1   0.1                   SB-IMPL::FINISH-FD-STREAM-OUTPUT [263]
   266  14.1                   FORCE-OUTPUT [118]
     4   0.2    267  14.1   SB-IMPL::FLUSH-OUTPUT-BUFFER [96]
     2   0.1                   (FLET SB-INT:%WRITE :IN SB-UNIX:UNIX-WRITE) [183]
     2   0.1                   SB-UNIX:UNIX-WRITE [177]
   256  13.5                   "foreign function write" [1]
------------------------------------------------------------------------
    23   1.2                   HUNCHENSOCKET::HANDLE-FRAME [47]
     4   0.2     23   1.2   (SB-PCL::FAST-METHOD FLEXI-STREAMS::OCTETS-TO-STRING* (FLEXI-STREAMS::FLEXI-UTF-8-FORMAT T T T)) [97]
     1   0.1                   (SB-IMPL::OPTIMIZED-DATA-VECTOR-REF T) [175]
     3   0.2                   ASH [113]
    10   0.5                   (SB-PCL::FAST-METHOD FLEXI-STREAMS::COMPUTE-NUMBER-OF-CHARS (FLEXI-STREAMS::FLEXI-UTF-8-FORMAT T T T)) [167]
     1   0.1                   SB-KERNEL:HAIRY-DATA-VECTOR-REF/CHECK-BOUNDS [31]
     3   0.2                   (LAMBDA (SB-PCL::.ARG0. SB-PCL::.ARG1. SB-PCL::.ARG2. SB-PCL::.ARG3.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/dlisp3.fasl") [32]
------------------------------------------------------------------------
     7   0.4                   SB-VM::GENERIC-+ [99]
     4   0.2      7   0.4   SB-KERNEL:TWO-ARG-> [98]
     2   0.1                   SB-KERNEL:%UNARY-TRUNCATE/SINGLE-FLOAT [185]
     1   0.1                   SB-EXT:FLOAT-INFINITY-P [147]
------------------------------------------------------------------------
     1   0.1                   SB-SYS:WAIT-UNTIL-FD-USABLE [125]
     2   0.1                   (FLET SB-IMPL::REPLACE-ALL :IN GET-OUTPUT-STREAM-STRING) [80]
    12   0.6                   GAME-EXC-MOVE [130]
     4   0.2     15   0.8   SB-VM::GENERIC-+ [99]
     2   0.1                   SB-KERNEL:TWO-ARG-= [186]
     2   0.1                   PARSE-INTEGER [171]
     7   0.4                   SB-KERNEL:TWO-ARG-> [98]
------------------------------------------------------------------------
     4   0.2                   SB-KERNEL:%FIND-POSITION [14]
     4   0.2      4   0.2   CAR [100]
------------------------------------------------------------------------
     3   0.2                   GET-INTERNAL-REAL-TIME [83]
     2   0.1                   SB-SYS:DECODE-TIMEOUT [131]
     4   0.2      5   0.3   "foreign function __vdso_gettimeofday" [101]
------------------------------------------------------------------------
    23   1.2                   (LABELS SB-IMPL::HANDLE-IT :IN SB-KERNEL:OUTPUT-OBJECT) [228]
     4   0.2     23   1.2   SB-IMPL::OUTPUT-INTEGER [102]
     3   0.2                   WRITE-CHAR [15]
     2   0.1                   SB-IMPL::%OUTPUT-INTEGER-IN-BASE [145]
    14   0.7                   SB-IMPL::%OUTPUT-REASONABLE-INTEGER-IN-BASE [51]
------------------------------------------------------------------------
     4   0.2                   (SB-PCL::FAST-METHOD (SETF HUNCHENTOOT:HEADER-OUT) (T SYMBOL)) [158]
     4   0.2      4   0.2   SB-KERNEL:%ASSOC-EQ [103]
------------------------------------------------------------------------
     4   0.2                   PPRINT-DISPATCH [6]
     4   0.2      4   0.2   SB-INT:COMMA-P [104]
------------------------------------------------------------------------
     8   0.4                   FIND-CLASS [86]
     4   0.2      8   0.4   SB-KERNEL:FIND-CLASSOID-CELL [105]
     4   0.2                   SB-C::GET-INFO-VALUE [143]
------------------------------------------------------------------------
     4   0.2                   HUNCHENSOCKET::MASK-UNMASK [190]
     4   0.2      4   0.2   SB-KERNEL:EXTENDED-SEQUENCE-P [106]
------------------------------------------------------------------------
     4   0.2                   SB-INT:STRINGIFY-OBJECT [123]
     4   0.2      4   0.2   SB-KERNEL:OUTPUT-OBJECT [107]
------------------------------------------------------------------------
     4   0.2                   JSON-RESP [127]
     4   0.2      4   0.2   (LAMBDA (SB-PCL::.ARG0. SB-PCL::.ARG1. SB-INT:&MORE SB-PCL::.DFUN-MORE-CONTEXT. SB-PCL::.DFUN-MORE-COUNT.)) [108]
------------------------------------------------------------------------
     1   0.1                   (LABELS SB-IMPL::HANDLE-IT :IN SB-KERNEL:OUTPUT-OBJECT) [228]
     4   0.2                   (FLET SB-IMPL::REPLACE-ALL :IN GET-OUTPUT-STREAM-STRING) [80]
     4   0.2      5   0.3   SB-KERNEL:LIST-FILL* [109]
     1   0.1                   SB-IMPL::%OUTPUT-INTEGER-IN-BASE [145]
------------------------------------------------------------------------
     4   0.2                   SB-SYS:DECODE-TIMEOUT [131]
     4   0.2      4   0.2   SB-KERNEL:%UNARY-TRUNCATE [110]
------------------------------------------------------------------------
     4   0.2                   SB-IMPL::%OUTPUT-REASONABLE-INTEGER-IN-BASE [51]
     4   0.2      4   0.2   TRUNCATE [111]
------------------------------------------------------------------------
     4   0.2                   SB-IMPL::ANSI-STREAM-READ-SEQUENCE [41]
     4   0.2      4   0.2   "foreign function memcpy" [112]
------------------------------------------------------------------------
     1   0.1                   HUNCHENSOCKET::HANDLE-FRAME [47]
     3   0.2                   (SB-PCL::FAST-METHOD FLEXI-STREAMS::OCTETS-TO-STRING* (FLEXI-STREAMS::FLEXI-UTF-8-FORMAT T T T)) [97]
     4   0.2      4   0.2   ASH [113]
------------------------------------------------------------------------
     3   0.2                   PARSE-INTEGER [171]
     1   0.1                   (SB-PCL::FAST-METHOD FLEXI-STREAMS::COMPUTE-NUMBER-OF-CHARS (FLEXI-STREAMS::FLEXI-UTF-8-FORMAT T T T)) [167]
     4   0.2      4   0.2   SB-IMPL::GET-CAT-ENTRY [114]
------------------------------------------------------------------------
     4   0.2                   HUNCHENSOCKET::MASK-UNMASK [190]
     4   0.2      4   0.2   (SB-IMPL::OPTIMIZED-DATA-VECTOR-REF (UNSIGNED-BYTE 8)) [115]
------------------------------------------------------------------------
     4   0.2                   HUNCHENSOCKET::HANDLE-FRAME [47]
     4   0.2      4   0.2   (LAMBDA (SB-PCL::.ARG0. SB-PCL::.ARG1. SB-PCL::.ARG2.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/dlisp3.fasl") [116]
------------------------------------------------------------------------
     4   0.2                   (SB-PCL::FAST-METHOD FLEXI-STREAMS::COMPUTE-NUMBER-OF-CHARS (FLEXI-STREAMS::FLEXI-UTF-8-FORMAT T T T)) [167]
     4   0.2      4   0.2   (LAMBDA (SB-PCL::.ARG0. SB-PCL::.ARG1. SB-PCL::.ARG2. SB-PCL::.ARG3.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/dlisp3.fasl") [117]
------------------------------------------------------------------------
     1   0.1                   SWANK::AUTO-FLUSH-LOOP [251]
     1   0.1                   INIT-SESSION [230]
   273  14.4                   (FLET #:WITHOUT-INTERRUPTS-BODY-359 :IN SB-THREAD::CALL-WITH-MUTEX) [46]
     3   0.2    275  14.5   FORCE-OUTPUT [118]
     1   0.1                   (SB-PCL::FAST-METHOD SB-GRAY:STREAM-FORCE-OUTPUT :AROUND (SWANK/GRAY::SLIME-OUTPUT-STREAM)) [255]
     5   0.3                   SB-IMPL::FD-STREAM-MISC-ROUTINE [73]
   266  14.1                   SB-IMPL::FLUSH-OUTPUT-BUFFER [96]
------------------------------------------------------------------------
     1   0.1                   (SB-PCL::FAST-METHOD HUNCHENSOCKET:TEXT-MESSAGE-RECEIVED (SESSION T T)) [119]
  1064  56.2                   HUNCHENSOCKET::HANDLE-FRAME [47]
     3   0.2   1064  56.2   (SB-PCL::FAST-METHOD HUNCHENSOCKET:TEXT-MESSAGE-RECEIVED (SESSION T T)) [119]
     1   0.1                   (SB-PCL::FAST-METHOD HUNCHENSOCKET:TEXT-MESSAGE-RECEIVED (SESSION T T)) [119]
     2   0.1                   (SETF HUNCHENTOOT:RETURN-CODE*) [70]
     1   0.1                   SB-C:RETURN-MULTIPLE [9]
     1   0.1                   (SB-PCL::FAST-METHOD FLEXI-STREAMS::COMPUTE-NUMBER-OF-CHARS (FLEXI-STREAMS::FLEXI-UTF-8-FORMAT T T T)) [167]
     7   0.4                   PARSE-INTEGER [171]
     3   0.2                   SB-VM::UNDEFINED-TRAMP [4]
    23   1.2                   GAME-EXC-MOVE [130]
     4   0.2                   (LAMBDA (SB-PCL::.ARG0.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/braid.fasl") [17]
   227  12.0                   JSON-RESP [127]
   793  41.9                   SEND-HUNCHENSOCKET-MESSAGE [153]
------------------------------------------------------------------------
     1   0.1                   SB-IMPL::REFILL-INPUT-BUFFER [120]
     1   0.1                   SB-IMPL::INPUT-CHAR/UTF-8 [238]
   265  14.0                   SB-IMPL::INPUT-UNSIGNED-8BIT-BYTE [54]
     3   0.2    266  14.1   SB-IMPL::REFILL-INPUT-BUFFER [120]
     1   0.1                   SB-IMPL::REFILL-INPUT-BUFFER [120]
     2   0.1                   SB-UNIX:UNIX-SIMPLE-POLL [19]
    51   2.7                   (FLET #:CLEANUP-FUN-2093 :IN SB-IMPL::REFILL-INPUT-BUFFER) [5]
   167   8.8                   SB-SYS:WAIT-UNTIL-FD-USABLE [125]
    43   2.3                   SB-IMPL::SYSREAD-MAY-BLOCK-P [187]
------------------------------------------------------------------------
   207  10.9                   HUNCHENSOCKET:SEND-TEXT-MESSAGE [122]
     3   0.2    207  10.9   FLEXI-STREAMS:STRING-TO-OCTETS [121]
     3   0.2                   FLEXI-STREAMS::MAYBE-CONVERT-EXTERNAL-FORMAT [95]
     1   0.1                   FLEXI-STREAMS::NORMALIZE-EXTERNAL-FORMAT-NAME [68]
     6   0.3                   (SB-PCL::EMF MAKE-INSTANCE) [38]
     5   0.3                   (SB-PCL::FAST-METHOD MAKE-INSTANCE (SYMBOL)) [189]
     1   0.1                   SB-C:RETURN-MULTIPLE [9]
    47   2.5                   FLEXI-STREAMS::MAKE-EXTERNAL-FORMAT% [49]
    79   4.2                   (SB-PCL::FAST-METHOD MAKE-INSTANCE (CLASS)) [42]
     7   0.4                   (LAMBDA (SB-PCL::.ARG0. SB-INT:&MORE SB-PCL::.MORE-CONTEXT. SB-PCL::.MORE-COUNT.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/dlisp3.fasl") [16]
    53   2.8                   FLEXI-STREAMS:MAKE-EXTERNAL-FORMAT [39]
------------------------------------------------------------------------
   259  13.7                   SEND-HUNCHENSOCKET-MESSAGE [153]
     3   0.2    259  13.7   HUNCHENSOCKET:SEND-TEXT-MESSAGE [122]
     4   0.2                   (LAMBDA (SB-PCL::.ARG0. SB-PCL::.ARG1. SB-PCL::.ARG2. SB-PCL::.ARG3.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/dlisp3.fasl") [32]
     2   0.1                   SB-VM::UNDEFINED-TRAMP [4]
    41   2.2                   (SB-PCL::FAST-METHOD FLEXI-STREAMS::STRING-TO-OCTETS* (FLEXI-STREAMS::FLEXI-UTF-8-FORMAT T T T)) [50]
   207  10.9                   FLEXI-STREAMS:STRING-TO-OCTETS [121]
------------------------------------------------------------------------
   255  13.5                   PRINC-TO-STRING [40]
     3   0.2    255  13.5   SB-INT:STRINGIFY-OBJECT [123]
     4   0.2                   SB-KERNEL:OUTPUT-OBJECT [107]
    24   1.3                   SB-IMPL::%MAKE-STRING-OUTPUT-STREAM [7]
   185   9.8                   (LABELS SB-IMPL::HANDLE-IT :IN SB-KERNEL:OUTPUT-OBJECT) [228]
    39   2.1                   GET-OUTPUT-STREAM-STRING [28]
------------------------------------------------------------------------
   115   6.1                   (SB-PCL::FAST-METHOD JONATHAN.ENCODE:%TO-JSON (MY-PACKAGE:GAME-MOVE)) [12]
     3   0.2    115   6.1   (SB-PCL::FAST-METHOD JONATHAN.ENCODE:%TO-JSON (NUMBER)) [124]
     8   0.4                   WRITE-STRING [22]
    16   0.8                   SB-IMPL::%WRITE-STRING [29]
    88   4.7                   PRINC-TO-STRING [40]
------------------------------------------------------------------------
     1   0.1                   SB-IMPL::INPUT-UNSIGNED-8BIT-BYTE [54]
   167   8.8                   SB-IMPL::REFILL-INPUT-BUFFER [120]
     3   0.2    168   8.9   SB-SYS:WAIT-UNTIL-FD-USABLE [125]
     1   0.1                   SB-VM::GENERIC-+ [99]
     9   0.5                   SB-UNIX:UNIX-SIMPLE-POLL [19]
    23   1.2                   SB-SYS:DECODE-TIMEOUT [131]
   131   6.9                   "foreign function __poll" [2]
------------------------------------------------------------------------
    13   0.7                   HUNCHENSOCKET::READ-APPLICATION-DATA [192]
    49   2.6                   HUNCHENSOCKET::READ-FRAME [55]
     3   0.2     62   3.3   HUNCHENSOCKET::READ-N-BYTES-INTO-SEQUENCE [126]
    23   1.2                   SB-KERNEL:%MAKE-ARRAY [13]
    36   1.9                   READ-SEQUENCE [76]
------------------------------------------------------------------------
   227  12.0                   (SB-PCL::FAST-METHOD HUNCHENSOCKET:TEXT-MESSAGE-RECEIVED (SESSION T T)) [119]
     3   0.2    227  12.0   JSON-RESP [127]
     4   0.2                   (LAMBDA (SB-PCL::.ARG0. SB-PCL::.ARG1.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/braid.fasl") [92]
     3   0.2                   GET-OUTPUT-STREAM-STRING [28]
     4   0.2                   (LAMBDA (SB-PCL::.ARG0.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/dlisp3.fasl") [8]
     2   0.1                   SB-VM::UNDEFINED-TRAMP [4]
     4   0.2                   (LAMBDA (SB-PCL::.ARG0. SB-PCL::.ARG1. SB-INT:&MORE SB-PCL::.DFUN-MORE-CONTEXT. SB-PCL::.DFUN-MORE-COUNT.)) [108]
     4   0.2                   (SETF HUNCHENTOOT:RETURN-CODE*) [70]
     2   0.1                   (SETF HUNCHENTOOT:CONTENT-TYPE*) [160]
     6   0.3                   SB-IMPL::%MAKE-STRING-OUTPUT-STREAM [7]
    20   1.1                   (SB-PCL::EMF (SETF HUNCHENTOOT:HEADER-OUT)) [52]
   175   9.2                   (SB-PCL::FAST-METHOD JONATHAN.ENCODE:%TO-JSON (MY-PACKAGE:GAME-MOVE)) [12]
------------------------------------------------------------------------
    10   0.5                   FLEXI-STREAMS::EXTERNAL-FORMAT-CLASS-NAME [36]
    29   1.5                   FLEXI-STREAMS::MAKE-EXTERNAL-FORMAT% [49]
     3   0.2     39   2.1   FLEXI-STREAMS::ISO-8859-NAME-P [128]
     1   0.1                   EQL [25]
    35   1.8                   SB-KERNEL:%FIND-POSITION [14]
------------------------------------------------------------------------
     3   0.2                   (SB-PCL::FAST-METHOD MAKE-INSTANCE (SYMBOL)) [189]
     3   0.2      3   0.2   SB-PCL::FIND-CLASS-FROM-CELL [129]
------------------------------------------------------------------------
    23   1.2                   (SB-PCL::FAST-METHOD HUNCHENSOCKET:TEXT-MESSAGE-RECEIVED (SESSION T T)) [119]
     3   0.2     23   1.2   GAME-EXC-MOVE [130]
     1   0.1                   (SB-IMPL::OPTIMIZED-DATA-VECTOR-REF T) [175]
     3   0.2                   (LAMBDA (SB-KERNEL::CACHE SB-KERNEL::OBJECT) :IN SB-KERNEL::CACHED-TYPEP) [149]
     2   0.1                   SB-KERNEL:HAIRY-DATA-VECTOR-REF/CHECK-BOUNDS [31]
     1   0.1                   SB-IMPL::SLOW-HAIRY-DATA-VECTOR-REF/CHECK-BOUNDS [194]
     1   0.1                   LENGTH [132]
    12   0.6                   SB-VM::GENERIC-+ [99]
------------------------------------------------------------------------
    23   1.2                   SB-SYS:WAIT-UNTIL-FD-USABLE [125]
     3   0.2     23   1.2   SB-SYS:DECODE-TIMEOUT [131]
     1   0.1                   "foreign function sb_gettimeofday" [211]
     5   0.3                   SB-KERNEL:TWO-ARG-* [93]
     4   0.2                   SB-KERNEL:%UNARY-TRUNCATE [110]
     8   0.4                   GET-INTERNAL-REAL-TIME [83]
     2   0.1                   "foreign function __vdso_gettimeofday" [101]
------------------------------------------------------------------------
     1   0.1                   SB-IMPL::ANSI-STREAM-WRITE-SEQUENCE [133]
     1   0.1                   SB-IMPL::ANSI-STREAM-READ-SEQUENCE [41]
     1   0.1                   GAME-EXC-MOVE [130]
     3   0.2      3   0.2   LENGTH [132]
------------------------------------------------------------------------
    21   1.1                   WRITE-SEQUENCE [62]
     3   0.2     21   1.1   SB-IMPL::ANSI-STREAM-WRITE-SEQUENCE [133]
     1   0.1                   LENGTH [132]
     1   0.1                   SB-IMPL::STRING-OUT-MISC [203]
    16   0.8                   SB-IMPL::BUFFER-OUTPUT [82]
------------------------------------------------------------------------
     3   0.2                   HUNCHENSOCKET::READ-APPLICATION-DATA [192]
     3   0.2      3   0.2   (LAMBDA (SB-PCL::.ARG0. SB-PCL::.ARG1.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/braid.fasl") [134]
------------------------------------------------------------------------
    14   0.7                   CONCATENATE [193]
     3   0.2     14   0.7   SB-KERNEL:%CONCATENATE-TO-SIMPLE-VECTOR [135]
    11   0.6                   REPLACE [69]
------------------------------------------------------------------------
     1   0.1                   SB-PCL::ALLOCATE-STANDARD-INSTANCE [159]
     3   0.2      3   0.2   SB-PCL::%MAKE-STANDARD-INSTANCE [136]
------------------------------------------------------------------------
     2   0.1                   (SB-PCL::FAST-METHOD (SETF HUNCHENTOOT:HEADER-OUT) (T SYMBOL)) [158]
     1   0.1                   (FLET SB-THREAD::WITH-MUTEX-THUNK :IN HUNCHENSOCKET::SEND-FRAME) [188]
     3   0.2      3   0.2   (LAMBDA (SB-PCL::.ARG0.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/braid.fasl") [137]
------------------------------------------------------------------------
     7   0.4                   HUNCHENSOCKET::WRITE-FRAME [191]
     3   0.2      7   0.4   WRITE-BYTE [138]
     3   0.2                   SB-IMPL::OUTPUT-UNSIGNED-BYTE-FULL-BUFFERED [162]
------------------------------------------------------------------------
     3   0.2                   GET-OUTPUT-STREAM-STRING [28]
     3   0.2      3   0.2   SB-IMPL::LIST-NREVERSE [139]
------------------------------------------------------------------------
     3   0.2                   HUNCHENSOCKET::READ-FRAME [55]
     3   0.2      3   0.2   HUNCHENSOCKET::CONTROL-FRAME-P [140]
------------------------------------------------------------------------
    24   1.3                   HUNCHENSOCKET::HANDLE-FRAME [47]
     3   0.2     24   1.3   (FLET HUNCHENSOCKET::MAYBE-ACCEPT-DATA-FRAME :IN HUNCHENSOCKET::HANDLE-FRAME) [141]
     2   0.1                   (LAMBDA (SB-PCL::.PV. SB-PCL::.NEXT-METHOD-CALL. SB-PCL::.ARG0. SB-PCL::.ARG1. SB-PCL::.ARG2. SB-PCL::.ARG3. SB-PCL::.ARG4.)) [184]
     2   0.1                   (SB-PCL::FAST-METHOD HUNCHENSOCKET:CHECK-MESSAGE (HUNCHENSOCKET:WEBSOCKET-RESOURCE HUNCHENSOCKET:WEBSOCKET-CLIENT T T T)) [172]
     2   0.1                   (LAMBDA (SB-PCL::.ARG0.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/braid.fasl") [17]
     8   0.4                   REDUCE [59]
     7   0.4                   (LAMBDA (SB-PCL::.ARG0. SB-PCL::.ARG1. SB-PCL::.ARG2. SB-PCL::.ARG3. SB-PCL::.ARG4.)) [64]
------------------------------------------------------------------------
     3   0.2                   (SB-PCL::FAST-METHOD SHARED-INITIALIZE (SB-PCL::SLOT-OBJECT T)) [30]
     3   0.2      3   0.2   SB-INT:MEMQ [142]
------------------------------------------------------------------------
     4   0.2                   SB-KERNEL:FIND-CLASSOID-CELL [105]
     3   0.2      4   0.2   SB-C::GET-INFO-VALUE [143]
     1   0.1                   SB-C::PACKED-INFO-VALUE-INDEX [199]
------------------------------------------------------------------------
     3   0.2                   (SB-PCL::FAST-METHOD FLEXI-STREAMS::COMPUTE-NUMBER-OF-CHARS (FLEXI-STREAMS::FLEXI-UTF-8-FORMAT T T T)) [167]
     3   0.2      3   0.2   (SB-PCL::FAST-METHOD FLEXI-STREAMS::CHECK-END (T T T T)) [144]
------------------------------------------------------------------------
     2   0.1                   SB-IMPL::OUTPUT-INTEGER [102]
     1   0.1                   SB-KERNEL:LIST-FILL* [109]
     3   0.2      3   0.2   SB-IMPL::%OUTPUT-INTEGER-IN-BASE [145]
------------------------------------------------------------------------
     3   0.2                   (LABELS SB-IMPL::HANDLE-IT :IN SB-KERNEL:OUTPUT-OBJECT) [228]
     3   0.2      3   0.2   SB-KERNEL:OUTPUT-UGLY-OBJECT [146]
------------------------------------------------------------------------
     2   0.1                   PARSE-INTEGER [171]
     1   0.1                   SB-KERNEL:TWO-ARG-> [98]
     3   0.2      3   0.2   SB-EXT:FLOAT-INFINITY-P [147]
------------------------------------------------------------------------
     3   0.2                   SB-KERNEL:%ASSOC-TEST [21]
     3   0.2      3   0.2   (LABELS SB-IMPL::EQUAL-AUX :IN EQUAL) [148]
------------------------------------------------------------------------
     3   0.2                   GAME-EXC-MOVE [130]
     3   0.2      3   0.2   (LAMBDA (SB-KERNEL::CACHE SB-KERNEL::OBJECT) :IN SB-KERNEL::CACHED-TYPEP) [149]
------------------------------------------------------------------------
     3   0.2      3   0.2   (SB-PCL::FAST-METHOD SB-MOP:CLASS-SLOTS :BEFORE (SB-PCL::SLOT-CLASS)) [150]
------------------------------------------------------------------------
     1   0.1                   (FLET SWANK/BACKEND:RECEIVE-IF :IN "/home/ealfonso/quicklisp/dists/quicklisp/software/slime-v2.20/swank/sbcl.lisp") [267]
  1864  98.5                   SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE [225]
   322  17.0                   HUNCHENSOCKET::SEND-FRAME [152]
     2   0.1   1864  98.5   SB-THREAD::CALL-WITH-MUTEX [151]
     1   0.1                   (FLET #:CLEANUP-FUN-371 :IN SB-THREAD::CALL-WITH-MUTEX) [202]
  1861  98.4                   (FLET #:WITHOUT-INTERRUPTS-BODY-359 :IN SB-THREAD::CALL-WITH-MUTEX) [46]
------------------------------------------------------------------------
   326  17.2                   SEND-HUNCHENSOCKET-MESSAGE [153]
     2   0.1    326  17.2   HUNCHENSOCKET::SEND-FRAME [152]
     2   0.1                   (LAMBDA (SB-PCL::.ARG0.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/braid.fasl") [17]
   322  17.0                   SB-THREAD::CALL-WITH-MUTEX [151]
------------------------------------------------------------------------
   793  41.9                   (SB-PCL::FAST-METHOD HUNCHENSOCKET:TEXT-MESSAGE-RECEIVED (SESSION T T)) [119]
     2   0.1    793  41.9   SEND-HUNCHENSOCKET-MESSAGE [153]
     2   0.1                   GET-OUTPUT-STREAM-STRING [28]
     1   0.1                   SB-VM::UNDEFINED-TRAMP [4]
     4   0.2                   SB-IMPL::%MAKE-STRING-OUTPUT-STREAM [7]
     2   0.1                   SB-KERNEL:CLASSOID-TYPEP [33]
     2   0.1                   (LAMBDA (SB-PCL::.ARG0.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/dlisp3.fasl") [8]
   192  10.1                   (SB-PCL::FAST-METHOD JONATHAN.ENCODE:%TO-JSON (MY-PACKAGE:GAME-MOVE)) [12]
   259  13.7                   HUNCHENSOCKET:SEND-TEXT-MESSAGE [122]
   326  17.2                   HUNCHENSOCKET::SEND-FRAME [152]
------------------------------------------------------------------------
  1858  98.2                   (LAMBDA NIL :IN HUNCHENTOOT:PROCESS-REQUEST) [214]
     2   0.1   1858  98.2   HUNCHENSOCKET::READ-HANDLE-LOOP [154]
     2   0.1                   (LAMBDA (SB-PCL::.ARG0.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/braid.fasl") [17]
     3   0.2                   HUNCHENSOCKET::READ-FRAME-FROM-CLIENT [163]
     4   0.2                   SB-VM::UNDEFINED-TRAMP [4]
   352  18.6                   HUNCHENSOCKET::READ-FRAME [55]
  1494  79.0                   HUNCHENSOCKET::HANDLE-FRAME [47]
------------------------------------------------------------------------
   287  15.2                   HUNCHENSOCKET::HANDLE-FRAME [47]
     2   0.1    287  15.2   FLEXI-STREAMS:OCTETS-TO-STRING [155]
     2   0.1                   FLEXI-STREAMS::MAYBE-CONVERT-EXTERNAL-FORMAT [95]
     9   0.5                   (LAMBDA (SB-PCL::.ARG0. SB-INT:&MORE SB-PCL::.MORE-CONTEXT. SB-PCL::.MORE-COUNT.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/dlisp3.fasl") [16]
     4   0.2                   SB-C:RETURN-MULTIPLE [9]
     7   0.4                   (SB-PCL::EMF MAKE-INSTANCE) [38]
    11   0.6                   (SB-PCL::FAST-METHOD MAKE-INSTANCE (SYMBOL)) [189]
    55   2.9                   FLEXI-STREAMS::MAKE-EXTERNAL-FORMAT% [49]
   132   7.0                   (SB-PCL::FAST-METHOD MAKE-INSTANCE (CLASS)) [42]
    56   3.0                   FLEXI-STREAMS:MAKE-EXTERNAL-FORMAT [39]
------------------------------------------------------------------------
     2   0.1                   HUNCHENSOCKET::MASK-UNMASK [190]
     2   0.1      2   0.1   (SB-IMPL::OPTIMIZED-DATA-VECTOR-SET (UNSIGNED-BYTE 8)) [156]
------------------------------------------------------------------------
     2   0.1                   REPLACE [69]
     2   0.1      2   0.1   (SB-IMPL::OPTIMIZED-DATA-VECTOR-REF (UNSIGNED-BYTE 8)) [157]
------------------------------------------------------------------------
     9   0.5                   (SB-PCL::EMF (SETF HUNCHENTOOT:HEADER-OUT)) [52]
     2   0.1     10   0.5   (SB-PCL::FAST-METHOD (SETF HUNCHENTOOT:HEADER-OUT) (T SYMBOL)) [158]
     1   0.1                   SB-VM::UNDEFINED-TRAMP [4]
     2   0.1                   (LAMBDA (SB-PCL::.ARG0.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/braid.fasl") [137]
     1   0.1                   (LAMBDA (SB-PCL::.ARG0. SB-PCL::.ARG1.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/braid.fasl") [92]
     4   0.2                   SB-KERNEL:%ASSOC-EQ [103]
------------------------------------------------------------------------
     3   0.2                   (SB-PCL::FAST-METHOD MAKE-INSTANCE (CLASS)) [42]
     2   0.1      3   0.2   SB-PCL::ALLOCATE-STANDARD-INSTANCE [159]
     1   0.1                   SB-PCL::%MAKE-STANDARD-INSTANCE [136]
------------------------------------------------------------------------
     2   0.1                   JSON-RESP [127]
     2   0.1      2   0.1   (SETF HUNCHENTOOT:CONTENT-TYPE*) [160]
------------------------------------------------------------------------
     1   0.1                   SB-IMPL::OUTPUT-UNSIGNED-BYTE-FULL-BUFFERED [162]
     2   0.1      2   0.1   SB-IMPL::SYNCHRONIZE-STREAM-OUTPUT [161]
------------------------------------------------------------------------
     3   0.2                   WRITE-BYTE [138]
     2   0.1      3   0.2   SB-IMPL::OUTPUT-UNSIGNED-BYTE-FULL-BUFFERED [162]
     1   0.1                   SB-IMPL::SYNCHRONIZE-STREAM-OUTPUT [161]
------------------------------------------------------------------------
     3   0.2                   HUNCHENSOCKET::READ-HANDLE-LOOP [154]
     2   0.1      3   0.2   HUNCHENSOCKET::READ-FRAME-FROM-CLIENT [163]
     1   0.1                   (LAMBDA (SB-PCL::.ARG0.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/braid.fasl") [17]
------------------------------------------------------------------------
     2   0.1                   REPLACE [69]
     2   0.1      2   0.1   SB-KERNEL:HAIRY-DATA-VECTOR-REF [164]
------------------------------------------------------------------------
     2   0.1                   (SB-PCL::FAST-METHOD JONATHAN.ENCODE:%TO-JSON (MY-PACKAGE:GAME-MOVE)) [12]
     2   0.1      2   0.1   MY-PACKAGE::GAME-MOVE-ROT [165]
------------------------------------------------------------------------
     2   0.1                   (SB-PCL::FAST-METHOD MAKE-INSTANCE (CLASS)) [42]
     6   0.3                   SB-PCL::MAYBE-CALL-CTOR [237]
     2   0.1      8   0.4   SB-PCL::PLIST-VALUE [166]
     6   0.3                   (LAMBDA (SB-PCL::.ARG0.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/braid.fasl") [66]
------------------------------------------------------------------------
     1   0.1                   (SB-PCL::FAST-METHOD HUNCHENSOCKET:TEXT-MESSAGE-RECEIVED (SESSION T T)) [119]
    10   0.5                   (SB-PCL::FAST-METHOD FLEXI-STREAMS::OCTETS-TO-STRING* (FLEXI-STREAMS::FLEXI-UTF-8-FORMAT T T T)) [97]
     2   0.1     11   0.6   (SB-PCL::FAST-METHOD FLEXI-STREAMS::COMPUTE-NUMBER-OF-CHARS (FLEXI-STREAMS::FLEXI-UTF-8-FORMAT T T T)) [167]
     1   0.1                   SB-VM::UNDEFINED-TRAMP [4]
     4   0.2                   (LAMBDA (SB-PCL::.ARG0. SB-PCL::.ARG1. SB-PCL::.ARG2. SB-PCL::.ARG3.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/dlisp3.fasl") [117]
     1   0.1                   SB-IMPL::GET-CAT-ENTRY [114]
     3   0.2                   (SB-PCL::FAST-METHOD FLEXI-STREAMS::CHECK-END (T T T T)) [144]
------------------------------------------------------------------------
     2   0.1                   FIND [26]
     2   0.1      2   0.1   IDENTITY [168]
------------------------------------------------------------------------
     7   0.4                   (SB-PCL::FAST-METHOD SHARED-INITIALIZE (SB-PCL::SLOT-OBJECT T)) [30]
     2   0.1      7   0.4   SB-PCL::SETF-SLOT-VALUE-USING-CLASS-DFUN [169]
     5   0.3                   (LAMBDA (SB-PCL::.ARG0.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/braid.fasl") [11]
------------------------------------------------------------------------
     2   0.1                   (SB-PCL::FAST-METHOD JONATHAN.ENCODE:%TO-JSON (MY-PACKAGE:GAME-MOVE)) [12]
     2   0.1      2   0.1   MY-PACKAGE::GAME-MOVE-SHAPE-CODE [170]
------------------------------------------------------------------------
     2   0.1                   SB-VM::GENERIC-+ [99]
     7   0.4                   (SB-PCL::FAST-METHOD HUNCHENSOCKET:TEXT-MESSAGE-RECEIVED (SESSION T T)) [119]
     2   0.1      9   0.5   PARSE-INTEGER [171]
     2   0.1                   DIGIT-CHAR-P [182]
     3   0.2                   SB-IMPL::GET-CAT-ENTRY [114]
     2   0.1                   SB-EXT:FLOAT-INFINITY-P [147]
------------------------------------------------------------------------
     2   0.1                   (FLET HUNCHENSOCKET::MAYBE-ACCEPT-DATA-FRAME :IN HUNCHENSOCKET::HANDLE-FRAME) [141]
     2   0.1      2   0.1   (SB-PCL::FAST-METHOD HUNCHENSOCKET:CHECK-MESSAGE (HUNCHENSOCKET:WEBSOCKET-RESOURCE HUNCHENSOCKET:WEBSOCKET-CLIENT T T T)) [172]
------------------------------------------------------------------------
     2   0.1                   (SB-PCL::FAST-METHOD SHARED-INITIALIZE (SB-PCL::SLOT-OBJECT T)) [30]
     2   0.1      2   0.1   (LAMBDA (&REST SB-IMPL::ARGUMENTS) :IN CONSTANTLY) [173]
------------------------------------------------------------------------
     2   0.1                   SB-KERNEL:%MAKE-ARRAY [13]
     2   0.1      2   0.1   SB-KERNEL:CLASSOID-CELL-TYPEP [174]
------------------------------------------------------------------------
     1   0.1                   GAME-EXC-MOVE [130]
     1   0.1                   (SB-PCL::FAST-METHOD FLEXI-STREAMS::OCTETS-TO-STRING* (FLEXI-STREAMS::FLEXI-UTF-8-FORMAT T T T)) [97]
     2   0.1      2   0.1   (SB-IMPL::OPTIMIZED-DATA-VECTOR-REF T) [175]
------------------------------------------------------------------------
     2   0.1                   HUNCHENSOCKET::HANDLE-FRAME [47]
     2   0.1      2   0.1   SB-IMPL::LIST-REVERSE [176]
------------------------------------------------------------------------
     2   0.1                   SB-IMPL::FLUSH-OUTPUT-BUFFER [96]
     2   0.1      2   0.1   SB-UNIX:UNIX-WRITE [177]
------------------------------------------------------------------------
     2   0.1                   FLEXI-STREAMS::EXTERNAL-FORMAT-CLASS-NAME [36]
     2   0.1      2   0.1   FLEXI-STREAMS::CODE-PAGE-NAME-P [178]
------------------------------------------------------------------------
     2   0.1                   (LABELS SB-IMPL::HANDLE-IT :IN SB-KERNEL:OUTPUT-OBJECT) [228]
     2   0.1      2   0.1   (SB-PCL::FAST-METHOD PRINT-OBJECT (INTEGER T)) [179]
------------------------------------------------------------------------
     2   0.1                   (SB-PCL::FAST-METHOD SHARED-INITIALIZE (SB-PCL::SLOT-OBJECT T)) [30]
     2   0.1      2   0.1   (LAMBDA (SB-KERNEL:INSTANCE) :IN SB-PCL::MAKE-OPTIMIZED-STD-BOUNDP-METHOD-FUNCTION) [180]
------------------------------------------------------------------------
     2   0.1                   READ-SEQUENCE [76]
     2   0.1      2   0.1   SB-KERNEL:SEQUENCEP [181]
------------------------------------------------------------------------
     2   0.1                   PARSE-INTEGER [171]
     2   0.1      2   0.1   DIGIT-CHAR-P [182]
------------------------------------------------------------------------
     2   0.1                   SB-IMPL::FLUSH-OUTPUT-BUFFER [96]
     2   0.1      2   0.1   (FLET SB-INT:%WRITE :IN SB-UNIX:UNIX-WRITE) [183]
------------------------------------------------------------------------
     2   0.1                   (FLET HUNCHENSOCKET::MAYBE-ACCEPT-DATA-FRAME :IN HUNCHENSOCKET::HANDLE-FRAME) [141]
     2   0.1      2   0.1   (LAMBDA (SB-PCL::.PV. SB-PCL::.NEXT-METHOD-CALL. SB-PCL::.ARG0. SB-PCL::.ARG1. SB-PCL::.ARG2. SB-PCL::.ARG3. SB-PCL::.ARG4.)) [184]
------------------------------------------------------------------------
     2   0.1                   SB-KERNEL:TWO-ARG-> [98]
     2   0.1      2   0.1   SB-KERNEL:%UNARY-TRUNCATE/SINGLE-FLOAT [185]
------------------------------------------------------------------------
     2   0.1                   SB-VM::GENERIC-+ [99]
     2   0.1      2   0.1   SB-KERNEL:TWO-ARG-= [186]
------------------------------------------------------------------------
    43   2.3                   SB-IMPL::REFILL-INPUT-BUFFER [120]
     1   0.1     44   2.3   SB-IMPL::SYSREAD-MAY-BLOCK-P [187]
     6   0.3                   SB-UNIX:UNIX-SIMPLE-POLL [19]
    30   1.6                   "foreign function __poll" [2]
------------------------------------------------------------------------
     2   0.1                   (SB-PCL::EMF (SETF HUNCHENTOOT:HEADER-OUT)) [52]
     1   0.1                   (FLET #:WITHOUT-INTERRUPTS-BODY-359 :IN SB-THREAD::CALL-WITH-MUTEX) [46]
     1   0.1      3   0.2   (FLET SB-THREAD::WITH-MUTEX-THUNK :IN HUNCHENSOCKET::SEND-FRAME) [188]
     1   0.1                   SB-VM::UNDEFINED-TRAMP [4]
     1   0.1                   (LAMBDA (SB-PCL::.ARG0.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/braid.fasl") [137]
------------------------------------------------------------------------
     5   0.3                   FLEXI-STREAMS:STRING-TO-OCTETS [121]
    11   0.6                   FLEXI-STREAMS:OCTETS-TO-STRING [155]
     1   0.1     16   0.8   (SB-PCL::FAST-METHOD MAKE-INSTANCE (SYMBOL)) [189]
    12   0.6                   FIND-CLASS [86]
     3   0.2                   SB-PCL::FIND-CLASS-FROM-CELL [129]
------------------------------------------------------------------------
    14   0.7                   HUNCHENSOCKET::HANDLE-FRAME [47]
     1   0.1     14   0.7   HUNCHENSOCKET::MASK-UNMASK [190]
     1   0.1                   SB-KERNEL:HAIRY-DATA-VECTOR-REF/CHECK-BOUNDS [31]
     1   0.1                   SB-KERNEL:TWO-ARG-XOR [210]
     4   0.2                   (SB-IMPL::OPTIMIZED-DATA-VECTOR-REF (UNSIGNED-BYTE 8)) [115]
     1   0.1                   SB-KERNEL:HAIRY-DATA-VECTOR-SET/CHECK-BOUNDS [197]
     4   0.2                   SB-KERNEL:EXTENDED-SEQUENCE-P [106]
     2   0.1                   (SB-IMPL::OPTIMIZED-DATA-VECTOR-SET (UNSIGNED-BYTE 8)) [156]
------------------------------------------------------------------------
    35   1.8                   (FLET #:WITHOUT-INTERRUPTS-BODY-359 :IN SB-THREAD::CALL-WITH-MUTEX) [46]
     1   0.1     35   1.8   HUNCHENSOCKET::WRITE-FRAME [191]
     7   0.4                   WRITE-BYTE [138]
    27   1.4                   WRITE-SEQUENCE [62]
------------------------------------------------------------------------
    20   1.1                   HUNCHENSOCKET::HANDLE-FRAME [47]
     1   0.1     20   1.1   HUNCHENSOCKET::READ-APPLICATION-DATA [192]
     1   0.1                   (LAMBDA (SB-PCL::.ARG0.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/braid.fasl") [17]
     2   0.1                   SB-VM::UNDEFINED-TRAMP [4]
    13   0.7                   HUNCHENSOCKET::READ-N-BYTES-INTO-SEQUENCE [126]
     3   0.2                   (LAMBDA (SB-PCL::.ARG0. SB-PCL::.ARG1.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/braid.fasl") [134]
------------------------------------------------------------------------
    15   0.8                   HUNCHENSOCKET::HANDLE-FRAME [47]
     1   0.1     15   0.8   CONCATENATE [193]
    14   0.7                   SB-KERNEL:%CONCATENATE-TO-SIMPLE-VECTOR [135]
------------------------------------------------------------------------
     1   0.1                   GAME-EXC-MOVE [130]
     1   0.1      1   0.1   SB-IMPL::SLOW-HAIRY-DATA-VECTOR-REF/CHECK-BOUNDS [194]
------------------------------------------------------------------------
     1   0.1                   SWANK/BACKEND:CALL-WITH-LOCK-HELD [252]
     1   0.1      1   0.1   SB-IMPL::GET3 [195]
------------------------------------------------------------------------
     1   0.1                   SB-PCL::MAYBE-CALL-CTOR [237]
     1   0.1      1   0.1   GETF [196]
------------------------------------------------------------------------
     1   0.1                   HUNCHENSOCKET::MASK-UNMASK [190]
     1   0.1      1   0.1   SB-KERNEL:HAIRY-DATA-VECTOR-SET/CHECK-BOUNDS [197]
------------------------------------------------------------------------
     1   0.1                   (SB-PCL::EMF SB-MOP:CLASS-PROTOTYPE) [65]
     1   0.1      1   0.1   (SB-PCL::FAST-METHOD SB-MOP:CLASS-PROTOTYPE :BEFORE (T)) [198]
------------------------------------------------------------------------
     1   0.1                   SB-C::GET-INFO-VALUE [143]
     1   0.1      1   0.1   SB-C::PACKED-INFO-VALUE-INDEX [199]
------------------------------------------------------------------------
     1   0.1                   (SB-PCL::FAST-METHOD JONATHAN.ENCODE:%TO-JSON (MY-PACKAGE:GAME-MOVE)) [12]
     1   0.1      1   0.1   MY-PACKAGE::GAME-MOVE-COL [200]
------------------------------------------------------------------------
     1   0.1                   (SB-PCL::FAST-METHOD MAKE-INSTANCE (CLASS)) [42]
     1   0.1      1   0.1   SB-VM::FILL-VECTOR/T [201]
------------------------------------------------------------------------
     1   0.1                   SB-THREAD::CALL-WITH-MUTEX [151]
     1   0.1      1   0.1   (FLET #:CLEANUP-FUN-371 :IN SB-THREAD::CALL-WITH-MUTEX) [202]
------------------------------------------------------------------------
     1   0.1                   SB-IMPL::ANSI-STREAM-WRITE-SEQUENCE [133]
     1   0.1      1   0.1   SB-IMPL::STRING-OUT-MISC [203]
------------------------------------------------------------------------
     1   0.1                   HUNCHENSOCKET::HANDLE-FRAME [47]
     1   0.1      1   0.1   (FLET #:CLEANUP-FUN-500 :IN HUNCHENSOCKET::HANDLE-FRAME) [204]
------------------------------------------------------------------------
     1   0.1                   SB-IMPL::ANSI-STREAM-READ-SEQUENCE [41]
     1   0.1      1   0.1   SB-IMPL::ANSI-STREAM-READ-N-BYTES [205]
------------------------------------------------------------------------
     1   0.1                   PPRINT-DISPATCH [6]
     1   0.1      1   0.1   "PPRINT-MACRO-CALL-P" [206]
------------------------------------------------------------------------
     1   0.1                   (SB-PCL::FAST-METHOD MAKE-INSTANCE (CLASS)) [42]
     1   0.1      1   0.1   (SB-PCL::FAST-METHOD SB-MOP:CLASS-DEFAULT-INITARGS (SB-PCL::SLOT-CLASS)) [207]
------------------------------------------------------------------------
     1   0.1                   WRITE-CHAR [15]
     1   0.1      1   0.1   (SB-PCL::EMF SB-GRAY:STREAM-WRITE-CHAR) [208]
------------------------------------------------------------------------
     1   0.1                   (SB-PCL::FAST-METHOD MAKE-INSTANCE (CLASS)) [42]
     1   0.1      1   0.1   (SB-PCL::FAST-METHOD INITIALIZE-INSTANCE (SB-PCL::SLOT-OBJECT)) [209]
------------------------------------------------------------------------
     1   0.1                   HUNCHENSOCKET::MASK-UNMASK [190]
     1   0.1      1   0.1   SB-KERNEL:TWO-ARG-XOR [210]
------------------------------------------------------------------------
     1   0.1                   SB-SYS:DECODE-TIMEOUT [131]
     1   0.1      1   0.1   "foreign function sb_gettimeofday" [211]
------------------------------------------------------------------------
     1   0.1                   REPLACE [69]
     1   0.1      1   0.1   (SB-IMPL::OPTIMIZED-DATA-VECTOR-SET T) [212]
------------------------------------------------------------------------
     1   0.1                   (FLET #:WITHOUT-INTERRUPTS-BODY-654 :IN SB-THREAD::%CONDITION-WAIT) [265]
     1   0.1      1   0.1   "foreign function syscall" [213]
------------------------------------------------------------------------
  1858  98.2                   HUNCHENSOCKET::CALL-WITH-NEW-CLIENT-FOR-RESOURCE [215]
     0   0.0   1858  98.2   (LAMBDA NIL :IN HUNCHENTOOT:PROCESS-REQUEST) [214]
  1858  98.2                   HUNCHENSOCKET::READ-HANDLE-LOOP [154]
------------------------------------------------------------------------
  1858  98.2                   (SB-PCL::EMF HUNCHENTOOT:PROCESS-REQUEST) [216]
     0   0.0   1858  98.2   HUNCHENSOCKET::CALL-WITH-NEW-CLIENT-FOR-RESOURCE [215]
  1858  98.2                   (LAMBDA NIL :IN HUNCHENTOOT:PROCESS-REQUEST) [214]
------------------------------------------------------------------------
  1860  98.3                   HUNCHENTOOT::DO-WITH-ACCEPTOR-REQUEST-COUNT-INCREMENTED [217]
     0   0.0   1860  98.3   (SB-PCL::EMF HUNCHENTOOT:PROCESS-REQUEST) [216]
     2   0.1                   (SB-PCL::FAST-METHOD HUNCHENTOOT:PROCESS-REQUEST (T)) [236]
  1858  98.2                   HUNCHENSOCKET::CALL-WITH-NEW-CLIENT-FOR-RESOURCE [215]
------------------------------------------------------------------------
  1861  98.4                   (SB-PCL::FAST-METHOD HUNCHENTOOT:PROCESS-CONNECTION (HUNCHENTOOT:ACCEPTOR T)) [218]
     0   0.0   1861  98.4   HUNCHENTOOT::DO-WITH-ACCEPTOR-REQUEST-COUNT-INCREMENTED [217]
     1   0.1                   (SB-PCL::FAST-METHOD HUNCHENTOOT:PROCESS-REQUEST (T)) [236]
  1860  98.3                   (SB-PCL::EMF HUNCHENTOOT:PROCESS-REQUEST) [216]
------------------------------------------------------------------------
  1862  98.4                   (SB-PCL::FAST-METHOD HUNCHENTOOT:PROCESS-CONNECTION :AROUND (HUNCHENTOOT:ACCEPTOR T)) [219]
     0   0.0   1862  98.4   (SB-PCL::FAST-METHOD HUNCHENTOOT:PROCESS-CONNECTION (HUNCHENTOOT:ACCEPTOR T)) [218]
     1   0.1                   HUNCHENTOOT::GET-REQUEST-DATA [257]
  1861  98.4                   HUNCHENTOOT::DO-WITH-ACCEPTOR-REQUEST-COUNT-INCREMENTED [217]
------------------------------------------------------------------------
     1   0.1                   (FLET HUNCHENTOOT::PROCESS-CONNECTION% :IN HUNCHENTOOT::HANDLE-INCOMING-CONNECTION%) [221]
  1861  98.4                   (SB-PCL::FAST-METHOD HUNCHENTOOT:PROCESS-CONNECTION :AROUND (HUNCHENSOCKET:WEBSOCKET-ACCEPTOR T)) [220]
     0   0.0   1862  98.4   (SB-PCL::FAST-METHOD HUNCHENTOOT:PROCESS-CONNECTION :AROUND (HUNCHENTOOT:ACCEPTOR T)) [219]
  1862  98.4                   (SB-PCL::FAST-METHOD HUNCHENTOOT:PROCESS-CONNECTION (HUNCHENTOOT:ACCEPTOR T)) [218]
------------------------------------------------------------------------
  1861  98.4                   (FLET HUNCHENTOOT::PROCESS-CONNECTION% :IN HUNCHENTOOT::HANDLE-INCOMING-CONNECTION%) [221]
     0   0.0   1861  98.4   (SB-PCL::FAST-METHOD HUNCHENTOOT:PROCESS-CONNECTION :AROUND (HUNCHENSOCKET:WEBSOCKET-ACCEPTOR T)) [220]
  1861  98.4                   (SB-PCL::FAST-METHOD HUNCHENTOOT:PROCESS-CONNECTION :AROUND (HUNCHENTOOT:ACCEPTOR T)) [219]
------------------------------------------------------------------------
  1862  98.4                   (LAMBDA NIL :IN BORDEAUX-THREADS::BINDING-DEFAULT-SPECIALS) [222]
     0   0.0   1862  98.4   (FLET HUNCHENTOOT::PROCESS-CONNECTION% :IN HUNCHENTOOT::HANDLE-INCOMING-CONNECTION%) [221]
     1   0.1                   (SB-PCL::FAST-METHOD HUNCHENTOOT:PROCESS-CONNECTION :AROUND (HUNCHENTOOT:ACCEPTOR T)) [219]
  1861  98.4                   (SB-PCL::FAST-METHOD HUNCHENTOOT:PROCESS-CONNECTION :AROUND (HUNCHENSOCKET:WEBSOCKET-ACCEPTOR T)) [220]
------------------------------------------------------------------------
  1862  98.4                   (FLET #:WITHOUT-INTERRUPTS-BODY-1139 :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE) [223]
     0   0.0   1862  98.4   (LAMBDA NIL :IN BORDEAUX-THREADS::BINDING-DEFAULT-SPECIALS) [222]
  1862  98.4                   (FLET HUNCHENTOOT::PROCESS-CONNECTION% :IN HUNCHENTOOT::HANDLE-INCOMING-CONNECTION%) [221]
------------------------------------------------------------------------
  1864  98.5                   (FLET SB-THREAD::WITH-MUTEX-THUNK :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE) [224]
     0   0.0   1864  98.5   (FLET #:WITHOUT-INTERRUPTS-BODY-1139 :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE) [223]
     2   0.1                   SWANK::AUTO-FLUSH-LOOP [251]
  1862  98.4                   (LAMBDA NIL :IN BORDEAUX-THREADS::BINDING-DEFAULT-SPECIALS) [222]
------------------------------------------------------------------------
  1545  81.7                   (FLET #:WITHOUT-INTERRUPTS-BODY-359 :IN SB-THREAD::CALL-WITH-MUTEX) [46]
     0   0.0   1864  98.5   (FLET SB-THREAD::WITH-MUTEX-THUNK :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE) [224]
  1864  98.5                   (FLET #:WITHOUT-INTERRUPTS-BODY-1139 :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE) [223]
------------------------------------------------------------------------
  1864  98.5                   "foreign function call_into_lisp" [226]
     0   0.0   1864  98.5   SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE [225]
  1864  98.5                   SB-THREAD::CALL-WITH-MUTEX [151]
------------------------------------------------------------------------
  1864  98.5                   "foreign function new_thread_trampoline" [227]
     0   0.0   1864  98.5   "foreign function call_into_lisp" [226]
  1864  98.5                   SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE [225]
------------------------------------------------------------------------
     0   0.0   1864  98.5   "foreign function new_thread_trampoline" [227]
  1864  98.5                   "foreign function call_into_lisp" [226]
------------------------------------------------------------------------
     1   0.1                   PRINC [258]
     1   0.1                   (LABELS SB-IMPL::HANDLE-IT :IN SB-KERNEL:OUTPUT-OBJECT) [228]
   185   9.8                   SB-INT:STRINGIFY-OBJECT [123]
     0   0.0    186   9.8   (LABELS SB-IMPL::HANDLE-IT :IN SB-KERNEL:OUTPUT-OBJECT) [228]
     2   0.1                   SB-IMPL::STRING-SOUT [24]
     2   0.1                   (SB-PCL::FAST-METHOD PRINT-OBJECT (INTEGER T)) [179]
     3   0.2                   SB-KERNEL:OUTPUT-UGLY-OBJECT [146]
     1   0.1                   SB-KERNEL:LIST-FILL* [109]
     5   0.3                   SB-VM::UNDEFINED-TRAMP [4]
    10   0.5                   SB-IMPL::OUTPUT-VECTOR [44]
    17   0.9                   (LAMBDA (SB-PCL::.ARG0. SB-PCL::.ARG1.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/dlisp3.fasl") [20]
     7   0.4                   WRITE-STRING [22]
    25   1.3                   SB-IMPL::%WRITE-STRING [29]
    23   1.2                   SB-IMPL::OUTPUT-INTEGER [102]
     1   0.1                   (LABELS SB-IMPL::HANDLE-IT :IN SB-KERNEL:OUTPUT-OBJECT) [228]
     2   0.1                   PPRINT-DISPATCH [6]
    80   4.2                   (LABELS SB-IMPL::PRINT-IT :IN SB-KERNEL:OUTPUT-OBJECT) [77]
     9   0.5                   (SB-PCL::FAST-METHOD PRINT-OBJECT (VECTOR T)) [48]
------------------------------------------------------------------------
    10   0.5                   SB-IMPL::BUFFER-OUTPUT [82]
     0   0.0     10   0.5   (FLET SB-IMPL::COPY-TO-BUFFER :IN SB-IMPL::BUFFER-OUTPUT) [229]
    10   0.5                   SB-KERNEL:COPY-UB8-TO-SYSTEM-AREA [35]
------------------------------------------------------------------------
     1   0.1                   (FLET #:WRAPPER715 :IN HUNCHENSOCKET::FIND-WEBSOCKET-RESOURCE) [231]
     0   0.0      1   0.1   INIT-SESSION [230]
     1   0.1                   FORCE-OUTPUT [118]
------------------------------------------------------------------------
     1   0.1                   SB-KERNEL:%MAP-FOR-EFFECT-ARITY-1 [232]
     0   0.0      1   0.1   (FLET #:WRAPPER715 :IN HUNCHENSOCKET::FIND-WEBSOCKET-RESOURCE) [231]
     1   0.1                   INIT-SESSION [230]
------------------------------------------------------------------------
     1   0.1                   HUNCHENSOCKET::FIND-WEBSOCKET-RESOURCE [233]
     0   0.0      1   0.1   SB-KERNEL:%MAP-FOR-EFFECT-ARITY-1 [232]
     1   0.1                   (FLET #:WRAPPER715 :IN HUNCHENSOCKET::FIND-WEBSOCKET-RESOURCE) [231]
------------------------------------------------------------------------
     1   0.1                   (SB-PCL::FAST-METHOD HUNCHENTOOT:ACCEPTOR-DISPATCH-REQUEST (HUNCHENSOCKET:WEBSOCKET-ACCEPTOR HUNCHENSOCKET::WEBSOCKET-REQUEST)) [234]
     0   0.0      1   0.1   HUNCHENSOCKET::FIND-WEBSOCKET-RESOURCE [233]
     1   0.1                   SB-KERNEL:%MAP-FOR-EFFECT-ARITY-1 [232]
------------------------------------------------------------------------
     1   0.1                   (SB-PCL::FAST-METHOD HUNCHENTOOT:HANDLE-REQUEST (HUNCHENTOOT:ACCEPTOR HUNCHENTOOT:REQUEST)) [235]
     0   0.0      1   0.1   (SB-PCL::FAST-METHOD HUNCHENTOOT:ACCEPTOR-DISPATCH-REQUEST (HUNCHENSOCKET:WEBSOCKET-ACCEPTOR HUNCHENSOCKET::WEBSOCKET-REQUEST)) [234]
     1   0.1                   HUNCHENSOCKET::FIND-WEBSOCKET-RESOURCE [233]
------------------------------------------------------------------------
     1   0.1                   (SB-PCL::FAST-METHOD HUNCHENTOOT:PROCESS-REQUEST (T)) [236]
     0   0.0      1   0.1   (SB-PCL::FAST-METHOD HUNCHENTOOT:HANDLE-REQUEST (HUNCHENTOOT:ACCEPTOR HUNCHENTOOT:REQUEST)) [235]
     1   0.1                   (SB-PCL::FAST-METHOD HUNCHENTOOT:ACCEPTOR-DISPATCH-REQUEST (HUNCHENSOCKET:WEBSOCKET-ACCEPTOR HUNCHENSOCKET::WEBSOCKET-REQUEST)) [234]
------------------------------------------------------------------------
     1   0.1                   HUNCHENTOOT::DO-WITH-ACCEPTOR-REQUEST-COUNT-INCREMENTED [217]
     2   0.1                   (SB-PCL::EMF HUNCHENTOOT:PROCESS-REQUEST) [216]
     0   0.0      3   0.2   (SB-PCL::FAST-METHOD HUNCHENTOOT:PROCESS-REQUEST (T)) [236]
     2   0.1                   HUNCHENTOOT::START-OUTPUT [262]
     1   0.1                   (SB-PCL::FAST-METHOD HUNCHENTOOT:HANDLE-REQUEST (HUNCHENTOOT:ACCEPTOR HUNCHENTOOT:REQUEST)) [235]
------------------------------------------------------------------------
     8   0.4                   (SB-PCL::FAST-METHOD MAKE-INSTANCE (CLASS)) [42]
     0   0.0      8   0.4   SB-PCL::MAYBE-CALL-CTOR [237]
     1   0.1                   GETF [196]
     6   0.3                   SB-PCL::PLIST-VALUE [166]
------------------------------------------------------------------------
     1   0.1                   (LAMBDA (&REST REST) :IN SB-IMPL::GET-EXTERNAL-FORMAT) [239]
     0   0.0      1   0.1   SB-IMPL::INPUT-CHAR/UTF-8 [238]
     1   0.1                   SB-IMPL::REFILL-INPUT-BUFFER [120]
------------------------------------------------------------------------
     1   0.1                   READ-CHAR [240]
     0   0.0      1   0.1   (LAMBDA (&REST REST) :IN SB-IMPL::GET-EXTERNAL-FORMAT) [239]
     1   0.1                   SB-IMPL::INPUT-CHAR/UTF-8 [238]
------------------------------------------------------------------------
     1   0.1                   SB-IMPL::%READ-PRESERVING-WHITESPACE [241]
     1   0.1                   READ-CHAR [240]
     0   0.0      1   0.1   READ-CHAR [240]
     1   0.1                   READ-CHAR [240]
     1   0.1                   (LAMBDA (&REST REST) :IN SB-IMPL::GET-EXTERNAL-FORMAT) [239]
------------------------------------------------------------------------
     1   0.1                   READ [242]
     1   0.1                   SB-IMPL::%READ-PRESERVING-WHITESPACE [241]
     0   0.0      1   0.1   SB-IMPL::%READ-PRESERVING-WHITESPACE [241]
     1   0.1                   SB-IMPL::%READ-PRESERVING-WHITESPACE [241]
     1   0.1                   READ-CHAR [240]
------------------------------------------------------------------------
     1   0.1                   SB-IMPL::REPL-READ-FORM-FUN [243]
     0   0.0      1   0.1   READ [242]
     1   0.1                   SB-IMPL::%READ-PRESERVING-WHITESPACE [241]
------------------------------------------------------------------------
     1   0.1                   SB-IMPL::REPL-FUN [244]
     0   0.0      1   0.1   SB-IMPL::REPL-READ-FORM-FUN [243]
     1   0.1                   READ [242]
------------------------------------------------------------------------
     1   0.1                   (LAMBDA NIL :IN SB-IMPL::TOPLEVEL-REPL) [245]
     0   0.0      1   0.1   SB-IMPL::REPL-FUN [244]
     1   0.1                   SB-IMPL::REPL-READ-FORM-FUN [243]
------------------------------------------------------------------------
     1   0.1                   SB-IMPL::%WITH-REBOUND-IO-SYNTAX [246]
     0   0.0      1   0.1   (LAMBDA NIL :IN SB-IMPL::TOPLEVEL-REPL) [245]
     1   0.1                   SB-IMPL::REPL-FUN [244]
------------------------------------------------------------------------
     1   0.1                   SB-IMPL::TOPLEVEL-REPL [247]
     0   0.0      1   0.1   SB-IMPL::%WITH-REBOUND-IO-SYNTAX [246]
     1   0.1                   (LAMBDA NIL :IN SB-IMPL::TOPLEVEL-REPL) [245]
------------------------------------------------------------------------
     1   0.1                   SB-IMPL::TOPLEVEL-INIT [248]
     0   0.0      1   0.1   SB-IMPL::TOPLEVEL-REPL [247]
     1   0.1                   SB-IMPL::%WITH-REBOUND-IO-SYNTAX [246]
------------------------------------------------------------------------
     1   0.1                   (FLET #:WITHOUT-INTERRUPTS-BODY-77 :IN SB-EXT:SAVE-LISP-AND-DIE) [249]
     0   0.0      1   0.1   SB-IMPL::TOPLEVEL-INIT [248]
     1   0.1                   SB-IMPL::TOPLEVEL-REPL [247]
------------------------------------------------------------------------
     1   0.1                   (LABELS SB-IMPL::RESTART-LISP :IN SB-EXT:SAVE-LISP-AND-DIE) [250]
     0   0.0      1   0.1   (FLET #:WITHOUT-INTERRUPTS-BODY-77 :IN SB-EXT:SAVE-LISP-AND-DIE) [249]
     1   0.1                   SB-IMPL::TOPLEVEL-INIT [248]
------------------------------------------------------------------------
     0   0.0      1   0.1   (LABELS SB-IMPL::RESTART-LISP :IN SB-EXT:SAVE-LISP-AND-DIE) [250]
     1   0.1                   (FLET #:WITHOUT-INTERRUPTS-BODY-77 :IN SB-EXT:SAVE-LISP-AND-DIE) [249]
------------------------------------------------------------------------
     2   0.1                   (FLET #:WITHOUT-INTERRUPTS-BODY-1139 :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE) [223]
     0   0.0      2   0.1   SWANK::AUTO-FLUSH-LOOP [251]
     1   0.1                   FORCE-OUTPUT [118]
     1   0.1                   SB-VM::UNDEFINED-TRAMP [4]
------------------------------------------------------------------------
     1   0.1                   (SB-PCL::FAST-METHOD SB-GRAY:STREAM-FINISH-OUTPUT (SWANK/GRAY::SLIME-OUTPUT-STREAM)) [253]
     0   0.0      1   0.1   SWANK/BACKEND:CALL-WITH-LOCK-HELD [252]
     1   0.1                   SB-IMPL::GET3 [195]
------------------------------------------------------------------------
     1   0.1                   (FLET #:FORM-FUN-3091 :IN SB-GRAY:STREAM-FORCE-OUTPUT) [254]
     0   0.0      1   0.1   (SB-PCL::FAST-METHOD SB-GRAY:STREAM-FINISH-OUTPUT (SWANK/GRAY::SLIME-OUTPUT-STREAM)) [253]
     1   0.1                   SWANK/BACKEND:CALL-WITH-LOCK-HELD [252]
------------------------------------------------------------------------
     1   0.1                   (SB-PCL::FAST-METHOD SB-GRAY:STREAM-FORCE-OUTPUT :AROUND (SWANK/GRAY::SLIME-OUTPUT-STREAM)) [255]
     0   0.0      1   0.1   (FLET #:FORM-FUN-3091 :IN SB-GRAY:STREAM-FORCE-OUTPUT) [254]
     1   0.1                   (SB-PCL::FAST-METHOD SB-GRAY:STREAM-FINISH-OUTPUT (SWANK/GRAY::SLIME-OUTPUT-STREAM)) [253]
------------------------------------------------------------------------
     1   0.1                   FORCE-OUTPUT [118]
     0   0.0      1   0.1   (SB-PCL::FAST-METHOD SB-GRAY:STREAM-FORCE-OUTPUT :AROUND (SWANK/GRAY::SLIME-OUTPUT-STREAM)) [255]
     1   0.1                   (FLET #:FORM-FUN-3091 :IN SB-GRAY:STREAM-FORCE-OUTPUT) [254]
------------------------------------------------------------------------
     1   0.1                   HUNCHENTOOT::GET-REQUEST-DATA [257]
     0   0.0      1   0.1   CHUNGA:READ-HTTP-HEADERS [256]
     1   0.1                   WRITE-SEQUENCE [62]
------------------------------------------------------------------------
     1   0.1                   (SB-PCL::FAST-METHOD HUNCHENTOOT:PROCESS-CONNECTION (HUNCHENTOOT:ACCEPTOR T)) [218]
     0   0.0      1   0.1   HUNCHENTOOT::GET-REQUEST-DATA [257]
     1   0.1                   CHUNGA:READ-HTTP-HEADERS [256]
------------------------------------------------------------------------
     1   0.1                   (LAMBDA (STREAM #:FORMAT-ARG216 #:FORMAT-ARG217 #:FORMAT-ARG219 #:FORMAT-ARG221 &REST SB-FORMAT::ARGS) :IN "/home/ealfonso/quicklisp/dists/quicklisp/software/hunchentoot-v1.2.38/headers.lisp") [259]
     0   0.0      1   0.1   PRINC [258]
     1   0.1                   (LABELS SB-IMPL::HANDLE-IT :IN SB-KERNEL:OUTPUT-OBJECT) [228]
------------------------------------------------------------------------
     1   0.1                   FORMAT [260]
     0   0.0      1   0.1   (LAMBDA (STREAM #:FORMAT-ARG216 #:FORMAT-ARG217 #:FORMAT-ARG219 #:FORMAT-ARG221 &REST SB-FORMAT::ARGS) :IN "/home/ealfonso/quicklisp/dists/quicklisp/software/hunchentoot-v1.2.38/headers.lisp") [259]
     1   0.1                   PRINC [258]
------------------------------------------------------------------------
     1   0.1                   HUNCHENTOOT::SEND-RESPONSE [261]
     0   0.0      1   0.1   FORMAT [260]
     1   0.1                   (LAMBDA (STREAM #:FORMAT-ARG216 #:FORMAT-ARG217 #:FORMAT-ARG219 #:FORMAT-ARG221 &REST SB-FORMAT::ARGS) :IN "/home/ealfonso/quicklisp/dists/quicklisp/software/hunchentoot-v1.2.38/headers.lisp") [259]
------------------------------------------------------------------------
     2   0.1                   HUNCHENTOOT::START-OUTPUT [262]
     0   0.0      2   0.1   HUNCHENTOOT::SEND-RESPONSE [261]
     1   0.1                   FINISH-OUTPUT [264]
     1   0.1                   FORMAT [260]
------------------------------------------------------------------------
     2   0.1                   (SB-PCL::FAST-METHOD HUNCHENTOOT:PROCESS-REQUEST (T)) [236]
     0   0.0      2   0.1   HUNCHENTOOT::START-OUTPUT [262]
     2   0.1                   HUNCHENTOOT::SEND-RESPONSE [261]
------------------------------------------------------------------------
     1   0.1                   FINISH-OUTPUT [264]
     0   0.0      1   0.1   SB-IMPL::FINISH-FD-STREAM-OUTPUT [263]
     1   0.1                   SB-IMPL::FLUSH-OUTPUT-BUFFER [96]
------------------------------------------------------------------------
     1   0.1                   HUNCHENTOOT::SEND-RESPONSE [261]
     0   0.0      1   0.1   FINISH-OUTPUT [264]
     1   0.1                   SB-IMPL::FINISH-FD-STREAM-OUTPUT [263]
------------------------------------------------------------------------
     1   0.1                   SB-THREAD:CONDITION-WAIT [266]
     0   0.0      1   0.1   (FLET #:WITHOUT-INTERRUPTS-BODY-654 :IN SB-THREAD::%CONDITION-WAIT) [265]
     1   0.1                   "foreign function syscall" [213]
------------------------------------------------------------------------
     1   0.1                   (FLET #:WITHOUT-INTERRUPTS-BODY-359 :IN SB-THREAD::CALL-WITH-MUTEX) [46]
     0   0.0      1   0.1   SB-THREAD:CONDITION-WAIT [266]
     1   0.1                   (FLET #:WITHOUT-INTERRUPTS-BODY-654 :IN SB-THREAD::%CONDITION-WAIT) [265]
------------------------------------------------------------------------
     1   0.1                   SWANK::WAIT-FOR-EVENT [268]
     0   0.0      1   0.1   (FLET SWANK/BACKEND:RECEIVE-IF :IN "/home/ealfonso/quicklisp/dists/quicklisp/software/slime-v2.20/swank/sbcl.lisp") [267]
     1   0.1                   SB-THREAD::CALL-WITH-MUTEX [151]
------------------------------------------------------------------------
     1   0.1                   SWANK::SLDB-LOOP [269]
     0   0.0      1   0.1   SWANK::WAIT-FOR-EVENT [268]
     1   0.1                   (FLET SWANK/BACKEND:RECEIVE-IF :IN "/home/ealfonso/quicklisp/dists/quicklisp/software/slime-v2.20/swank/sbcl.lisp") [267]
------------------------------------------------------------------------
     1   0.1                   (FLET SWANK/BACKEND:CALL-WITH-DEBUGGING-ENVIRONMENT :IN "/home/ealfonso/quicklisp/dists/quicklisp/software/slime-v2.20/swank/sbcl.lisp") [270]
     0   0.0      1   0.1   SWANK::SLDB-LOOP [269]
     1   0.1                   SWANK::WAIT-FOR-EVENT [268]
------------------------------------------------------------------------
     1   0.1                   SWANK::DEBUG-IN-EMACS [271]
     0   0.0      1   0.1   (FLET SWANK/BACKEND:CALL-WITH-DEBUGGING-ENVIRONMENT :IN "/home/ealfonso/quicklisp/dists/quicklisp/software/slime-v2.20/swank/sbcl.lisp") [270]
     1   0.1                   SWANK::SLDB-LOOP [269]
------------------------------------------------------------------------
     1   0.1                   SWANK/SBCL::CALL-WITH-BREAK-HOOK [272]
     0   0.0      1   0.1   SWANK::DEBUG-IN-EMACS [271]
     1   0.1                   (FLET SWANK/BACKEND:CALL-WITH-DEBUGGING-ENVIRONMENT :IN "/home/ealfonso/quicklisp/dists/quicklisp/software/slime-v2.20/swank/sbcl.lisp") [270]
------------------------------------------------------------------------
     1   0.1                   (FLET SWANK/BACKEND:CALL-WITH-DEBUGGER-HOOK :IN "/home/ealfonso/quicklisp/dists/quicklisp/software/slime-v2.20/swank/sbcl.lisp") [273]
     0   0.0      1   0.1   SWANK/SBCL::CALL-WITH-BREAK-HOOK [272]
     1   0.1                   SWANK:INVOKE-SLIME-DEBUGGER [275]
     1   0.1                   SWANK::DEBUG-IN-EMACS [271]
------------------------------------------------------------------------
     1   0.1                   SWANK:SWANK-DEBUGGER-HOOK [276]
     1   0.1                   SWANK::CALL-WITH-BINDINGS [274]
     0   0.0      1   0.1   (FLET SWANK/BACKEND:CALL-WITH-DEBUGGER-HOOK :IN "/home/ealfonso/quicklisp/dists/quicklisp/software/slime-v2.20/swank/sbcl.lisp") [273]
     1   0.1                   SWANK/SBCL::CALL-WITH-BREAK-HOOK [272]
------------------------------------------------------------------------
     1   0.1                   SWANK:INVOKE-SLIME-DEBUGGER [275]
     0   0.0      1   0.1   SWANK::CALL-WITH-BINDINGS [274]
     1   0.1                   (FLET SWANK/BACKEND:CALL-WITH-DEBUGGER-HOOK :IN "/home/ealfonso/quicklisp/dists/quicklisp/software/slime-v2.20/swank/sbcl.lisp") [273]
------------------------------------------------------------------------
     1   0.1                   SWANK/SBCL::CALL-WITH-BREAK-HOOK [272]
     0   0.0      1   0.1   SWANK:INVOKE-SLIME-DEBUGGER [275]
     1   0.1                   SWANK::CALL-WITH-BINDINGS [274]
------------------------------------------------------------------------
     1   0.1                   SB-DEBUG::RUN-HOOK [277]
     0   0.0      1   0.1   SWANK:SWANK-DEBUGGER-HOOK [276]
     1   0.1                   (FLET SWANK/BACKEND:CALL-WITH-DEBUGGER-HOOK :IN "/home/ealfonso/quicklisp/dists/quicklisp/software/slime-v2.20/swank/sbcl.lisp") [273]
------------------------------------------------------------------------
     1   0.1                   INVOKE-DEBUGGER [278]
     0   0.0      1   0.1   SB-DEBUG::RUN-HOOK [277]
     1   0.1                   SWANK:SWANK-DEBUGGER-HOOK [276]
------------------------------------------------------------------------
     1   0.1                   (SB-PCL::FAST-METHOD HUNCHENTOOT:MAYBE-INVOKE-DEBUGGER (T)) [279]
     0   0.0      1   0.1   INVOKE-DEBUGGER [278]
     1   0.1                   SB-DEBUG::RUN-HOOK [277]
------------------------------------------------------------------------
     1   0.1                   (FLET #:H0 :IN HUNCHENTOOT:PROCESS-REQUEST) [280]
     0   0.0      1   0.1   (SB-PCL::FAST-METHOD HUNCHENTOOT:MAYBE-INVOKE-DEBUGGER (T)) [279]
     1   0.1                   INVOKE-DEBUGGER [278]
------------------------------------------------------------------------
     1   0.1                   SIGNAL [281]
     0   0.0      1   0.1   (FLET #:H0 :IN HUNCHENTOOT:PROCESS-REQUEST) [280]
     1   0.1                   (SB-PCL::FAST-METHOD HUNCHENTOOT:MAYBE-INVOKE-DEBUGGER (T)) [279]
------------------------------------------------------------------------
     1   0.1                   ERROR [282]
     0   0.0      1   0.1   SIGNAL [281]
     1   0.1                   (FLET #:H0 :IN HUNCHENTOOT:PROCESS-REQUEST) [280]
------------------------------------------------------------------------
     1   0.1                   SB-IMPL::INPUT-UNSIGNED-8BIT-BYTE [54]
     0   0.0      1   0.1   ERROR [282]
     1   0.1                   SIGNAL [281]
------------------------------------------------------------------------


           Self        Total        Cumul
  Nr  Count     %  Count     %  Count     %    Calls  Function
------------------------------------------------------------------------
   1    256  13.5    256  13.5    256  13.5        -  "foreign function write"
   2    161   8.5    161   8.5    417  22.0        -  "foreign function __poll"
   3     74   3.9     85   4.5    491  26.0        -  STRING-EQUAL
   4     68   3.6     68   3.6    559  29.5        -  SB-VM::UNDEFINED-TRAMP
   5     51   2.7     51   2.7    610  32.2        -  (FLET #:CLEANUP-FUN-2093 :IN SB-IMPL::REFILL-INPUT-BUFFER)
   6     34   1.8     77   4.1    644  34.0        -  PPRINT-DISPATCH
   7     34   1.8     34   1.8    678  35.8        -  SB-IMPL::%MAKE-STRING-OUTPUT-STREAM
   8     34   1.8     34   1.8    712  37.6        -  (LAMBDA (SB-PCL::.ARG0.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/dlisp3.fasl")
   9     32   1.7     32   1.7    744  39.3        -  SB-C:RETURN-MULTIPLE
  10     26   1.4     26   1.4    770  40.7        -  SB-KERNEL:UB32-BASH-COPY
  11     26   1.4     26   1.4    796  42.1        -  (LAMBDA (SB-PCL::.ARG0.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/braid.fasl")
  12     25   1.3    367  19.4    821  43.4        -  (SB-PCL::FAST-METHOD JONATHAN.ENCODE:%TO-JSON (MY-PACKAGE:GAME-MOVE))
  13     22   1.2     35   1.8    843  44.6        -  SB-KERNEL:%MAKE-ARRAY
  14     21   1.1     37   2.0    864  45.7        -  SB-KERNEL:%FIND-POSITION
  15     21   1.1     32   1.7    885  46.8        -  WRITE-CHAR
  16     20   1.1     20   1.1    905  47.8        -  (LAMBDA (SB-PCL::.ARG0. SB-INT:&MORE SB-PCL::.MORE-CONTEXT. SB-PCL::.MORE-COUNT.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/dlisp3.fasl")
  17     18   1.0     18   1.0    923  48.8        -  (LAMBDA (SB-PCL::.ARG0.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/braid.fasl")
  18     17   0.9     17   0.9    940  49.7        -  STRING
  19     17   0.9     17   0.9    957  50.6        -  SB-UNIX:UNIX-SIMPLE-POLL
  20     17   0.9     17   0.9    974  51.5        -  (LAMBDA (SB-PCL::.ARG0. SB-PCL::.ARG1.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/dlisp3.fasl")
  21     16   0.8    106   5.6    990  52.3        -  SB-KERNEL:%ASSOC-TEST
  22     15   0.8     17   0.9   1005  53.1        -  (SB-PCL::EMF SHARED-INITIALIZE)
  23     15   0.8     15   0.8   1020  53.9        -  WRITE-STRING
  24     13   0.7     29   1.5   1033  54.6        -  SB-IMPL::STRING-SOUT
  25     13   0.7     29   1.5   1046  55.3        -  FIND
  26     13   0.7     13   0.7   1059  56.0        -  EQL
  27     13   0.7     13   0.7   1072  56.7        -  "PPRINT-ARRAY-P"
  28     12   0.6     84   4.4   1084  57.3        -  (SB-PCL::FAST-METHOD SHARED-INITIALIZE (SB-PCL::SLOT-OBJECT T))
  29     12   0.6     44   2.3   1096  57.9        -  GET-OUTPUT-STREAM-STRING
  30     12   0.6     41   2.2   1108  58.6        -  SB-IMPL::%WRITE-STRING
  31     12   0.6     12   0.6   1120  59.2        -  SB-KERNEL:HAIRY-DATA-VECTOR-REF/CHECK-BOUNDS
  32     11   0.6     24   1.3   1131  59.8        -  FLEXI-STREAMS::EXTERNAL-FORMAT-CLASS-NAME
  33     11   0.6     17   0.9   1142  60.4        -  (SB-PCL::EMF MAKE-INSTANCE)
  34     11   0.6     11   0.6   1153  60.9        -  (LAMBDA (SB-PCL::.ARG0. SB-PCL::.ARG1. SB-PCL::.ARG2. SB-PCL::.ARG3.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/dlisp3.fasl")
  35     11   0.6     11   0.6   1164  61.5        -  SB-KERNEL:CLASSOID-TYPEP
  36     11   0.6     11   0.6   1175  62.1        -  SB-IMPL::STRING-OUCH
  37     11   0.6     11   0.6   1186  62.7        -  SB-KERNEL:COPY-UB8-TO-SYSTEM-AREA
  38     11   0.6     11   0.6   1197  63.3        -  SB-PCL::CHECK-APPLICABLE-KEYWORDS
  39     10   0.5    265  14.0   1207  63.8        -  PRINC-TO-STRING
  40     10   0.5    213  11.3   1217  64.3        -  (SB-PCL::FAST-METHOD MAKE-INSTANCE (CLASS))
  41     10   0.5    109   5.8   1227  64.9        -  FLEXI-STREAMS:MAKE-EXTERNAL-FORMAT
  42     10   0.5     29   1.5   1237  65.4        -  SB-IMPL::ANSI-STREAM-READ-SEQUENCE
  43     10   0.5     18   1.0   1247  65.9        -  (LAMBDA (SB-IMPL::BUFFER SB-IMPL::FROM) :IN GET-OUTPUT-STREAM-STRING)
  44     10   0.5     10   0.5   1257  66.4        -  SB-IMPL::OUTPUT-VECTOR
  45     10   0.5     10   0.5   1267  67.0        -  SB-IMPL::FD-STREAM-READ-N-BYTES
  46      9   0.5   1864  98.5   1276  67.4        -  (FLET #:WITHOUT-INTERRUPTS-BODY-359 :IN SB-THREAD::CALL-WITH-MUTEX)
  47      9   0.5   1494  79.0   1285  67.9        -  HUNCHENSOCKET::HANDLE-FRAME
  48      9   0.5    102   5.4   1294  68.4        -  FLEXI-STREAMS::MAKE-EXTERNAL-FORMAT%
  49      9   0.5     41   2.2   1303  68.9        -  (SB-PCL::FAST-METHOD FLEXI-STREAMS::STRING-TO-OCTETS* (FLEXI-STREAMS::FLEXI-UTF-8-FORMAT T T T))
  50      9   0.5     20   1.1   1312  69.3        -  (SB-PCL::EMF (SETF HUNCHENTOOT:HEADER-OUT))
  51      9   0.5     14   0.7   1321  69.8        -  SB-IMPL::%OUTPUT-REASONABLE-INTEGER-IN-BASE
  52      9   0.5      9   0.5   1330  70.3        -  (SB-PCL::FAST-METHOD PRINT-OBJECT (VECTOR T))
  53      9   0.5      9   0.5   1339  70.8        -  (SB-IMPL::OPTIMIZED-DATA-VECTOR-REF CHARACTER)
  54      8   0.4    352  18.6   1347  71.2        -  HUNCHENSOCKET::READ-FRAME
  55      8   0.4    276  14.6   1355  71.6        -  SB-IMPL::INPUT-UNSIGNED-8BIT-BYTE
  56      8   0.4     16   0.8   1363  72.0        -  (LAMBDA (FLEXI-STREAMS::ITEM FLEXI-STREAMS::PAIR) :IN FLEXI-STREAMS::NORMALIZE-EXTERNAL-FORMAT-NAME)
  57      8   0.4     11   0.6   1371  72.5        -  (SB-PCL::EMF SB-MOP:CLASS-SLOTS)
  58      8   0.4      8   0.4   1379  72.9        -  "PPRINT-FUN-CALL-P"
  59      8   0.4      8   0.4   1387  73.3        -  REDUCE
  60      8   0.4      8   0.4   1395  73.7        -  SB-KERNEL:%COERCE-CALLABLE-TO-FUN
  61      7   0.4    284  15.0   1402  74.1        -  READ-BYTE
  62      7   0.4     28   1.5   1409  74.5        -  WRITE-SEQUENCE
  63      7   0.4     10   0.5   1416  74.8        -  (SB-PCL::EMF SB-MOP:CLASS-PROTOTYPE)
  64      7   0.4      7   0.4   1423  75.2        -  SB-PCL::PLIST-KEYS
  65      7   0.4      7   0.4   1430  75.6        -  (LAMBDA (SB-PCL::.ARG0. SB-PCL::.ARG1. SB-PCL::.ARG2. SB-PCL::.ARG3. SB-PCL::.ARG4.))
  66      7   0.4      7   0.4   1437  76.0        -  (LAMBDA (SB-PCL::.ARG0.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/braid.fasl")
  67      6   0.3     36   1.9   1443  76.3        -  FLEXI-STREAMS::NORMALIZE-EXTERNAL-FORMAT-NAME
  68      6   0.3     12   0.6   1449  76.6        -  (SB-PCL::FAST-METHOD ALLOCATE-INSTANCE (STANDARD-CLASS))
  69      6   0.3     11   0.6   1455  76.9        -  REPLACE
  70      6   0.3      9   0.5   1461  77.2        -  SB-KERNEL:TWO-ARG-STRING-EQUAL
  71      6   0.3      6   0.3   1467  77.5        -  (SETF HUNCHENTOOT:RETURN-CODE*)
  72      6   0.3      6   0.3   1473  77.9        -  SB-IMPL::ALLOCATE-VECTOR-WITH-WIDETAG
  73      6   0.3      6   0.3   1479  78.2        -  SB-IMPL::FD-STREAM-MISC-ROUTINE
  74      6   0.3      6   0.3   1485  78.5        -  (LAMBDA (SB-PCL::.PV. SB-PCL::.NEXT-METHOD-CALL. SB-KERNEL:INSTANCE) :IN SB-PCL::MAKE-STD-READER-METHOD-FUNCTION)
  75      6   0.3      6   0.3   1491  78.8        -  (LAMBDA (SB-PCL::|.P0.| SB-PCL::|.P1.| SB-PCL::|.P2.| SB-PCL::|.P3.|))
  76      5   0.3     80   4.2   1496  79.1        -  (LABELS SB-IMPL::PRINT-IT :IN SB-KERNEL:OUTPUT-OBJECT)
  77      5   0.3     36   1.9   1501  79.3        -  READ-SEQUENCE
  78      5   0.3     31   1.6   1506  79.6        -  SB-PCL::CHECK-MI-INITARGS
  79      5   0.3     27   1.4   1511  79.9        -  (FLET SB-IMPL::REPLACE-ALL :IN GET-OUTPUT-STREAM-STRING)
  80      5   0.3     16   0.8   1516  80.1        -  SB-IMPL::BUFFER-OUTPUT
  81      5   0.3     15   0.8   1521  80.4        -  (SB-PCL::FAST-METHOD FLEXI-STREAMS::COMPUTE-NUMBER-OF-OCTETS (FLEXI-STREAMS::FLEXI-UTF-8-FORMAT T T T))
  82      5   0.3     13   0.7   1526  80.7        -  FIND-CLASS
  83      5   0.3      8   0.4   1531  80.9        -  GET-INTERNAL-REAL-TIME
  84      5   0.3      6   0.3   1536  81.2        -  (SB-PCL::EMF INITIALIZE-INSTANCE)
  85      5   0.3      5   0.3   1541  81.4        -  CONSP
  86      5   0.3      5   0.3   1546  81.7        -  CLASS-OF
  87      5   0.3      5   0.3   1551  82.0        -  (LAMBDA (SB-PCL::.ARG0. SB-PCL::.ARG1. SB-INT:&MORE SB-PCL::.MORE-CONTEXT. SB-PCL::.MORE-COUNT.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/dlisp3.fasl")
  88      5   0.3      5   0.3   1556  82.2        -  (LAMBDA (SB-PCL::NV SB-KERNEL:INSTANCE) :IN SB-PCL::MAKE-OPTIMIZED-STD-WRITER-METHOD-FUNCTION)
  89      5   0.3      5   0.3   1561  82.5        -  "PPRINT-DATA-LIST-P"
  90      5   0.3      5   0.3   1566  82.8        -  FLEXI-STREAMS::KOI8-R-NAME-P
  91      5   0.3      5   0.3   1571  83.0        -  SB-PCL::SLOT-BOUNDP-USING-CLASS-DFUN
  92      5   0.3      5   0.3   1576  83.3        -  (LAMBDA (SB-PCL::.ARG0. SB-PCL::.ARG1.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/braid.fasl")
  93      5   0.3      5   0.3   1581  83.6        -  SB-KERNEL:TWO-ARG-*
  94      5   0.3      5   0.3   1586  83.8        -  SB-IMPL::VALIDATE-ARRAY-INITARGS
  95      5   0.3      5   0.3   1591  84.1        -  FLEXI-STREAMS::MAYBE-CONVERT-EXTERNAL-FORMAT
  96      4   0.2    267  14.1   1595  84.3        -  SB-IMPL::FLUSH-OUTPUT-BUFFER
  97      4   0.2     23   1.2   1599  84.5        -  (SB-PCL::FAST-METHOD FLEXI-STREAMS::OCTETS-TO-STRING* (FLEXI-STREAMS::FLEXI-UTF-8-FORMAT T T T))
  98      4   0.2     23   1.2   1603  84.7        -  SB-IMPL::OUTPUT-INTEGER
  99      4   0.2     15   0.8   1607  84.9        -  SB-VM::GENERIC-+
 100      4   0.2      8   0.4   1611  85.1        -  SB-KERNEL:FIND-CLASSOID-CELL
 101      4   0.2      7   0.4   1615  85.4        -  SB-KERNEL:TWO-ARG->
 102      4   0.2      5   0.3   1619  85.6        -  "foreign function __vdso_gettimeofday"
 103      4   0.2      5   0.3   1623  85.8        -  SB-KERNEL:LIST-FILL*
 104      4   0.2      4   0.2   1627  86.0        -  CAR
 105      4   0.2      4   0.2   1631  86.2        -  SB-KERNEL:%ASSOC-EQ
 106      4   0.2      4   0.2   1635  86.4        -  SB-INT:COMMA-P
 107      4   0.2      4   0.2   1639  86.6        -  SB-KERNEL:EXTENDED-SEQUENCE-P
 108      4   0.2      4   0.2   1643  86.8        -  SB-KERNEL:OUTPUT-OBJECT
 109      4   0.2      4   0.2   1647  87.1        -  (LAMBDA (SB-PCL::.ARG0. SB-PCL::.ARG1. SB-INT:&MORE SB-PCL::.DFUN-MORE-CONTEXT. SB-PCL::.DFUN-MORE-COUNT.))
 110      4   0.2      4   0.2   1651  87.3        -  SB-KERNEL:%UNARY-TRUNCATE
 111      4   0.2      4   0.2   1655  87.5        -  TRUNCATE
 112      4   0.2      4   0.2   1659  87.7        -  "foreign function memcpy"
 113      4   0.2      4   0.2   1663  87.9        -  ASH
 114      4   0.2      4   0.2   1667  88.1        -  SB-IMPL::GET-CAT-ENTRY
 115      4   0.2      4   0.2   1671  88.3        -  (SB-IMPL::OPTIMIZED-DATA-VECTOR-REF (UNSIGNED-BYTE 8))
 116      4   0.2      4   0.2   1675  88.5        -  (LAMBDA (SB-PCL::.ARG0. SB-PCL::.ARG1. SB-PCL::.ARG2.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/dlisp3.fasl")
 117      4   0.2      4   0.2   1679  88.7        -  (LAMBDA (SB-PCL::.ARG0. SB-PCL::.ARG1. SB-PCL::.ARG2. SB-PCL::.ARG3.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/dlisp3.fasl")
 118      3   0.2   1064  56.2   1682  88.9        -  (SB-PCL::FAST-METHOD HUNCHENSOCKET:TEXT-MESSAGE-RECEIVED (SESSION T T))
 119      3   0.2    275  14.5   1685  89.1        -  FORCE-OUTPUT
 120      3   0.2    266  14.1   1688  89.2        -  SB-IMPL::REFILL-INPUT-BUFFER
 121      3   0.2    259  13.7   1691  89.4        -  HUNCHENSOCKET:SEND-TEXT-MESSAGE
 122      3   0.2    255  13.5   1694  89.5        -  SB-INT:STRINGIFY-OBJECT
 123      3   0.2    227  12.0   1697  89.7        -  JSON-RESP
 124      3   0.2    207  10.9   1700  89.9        -  FLEXI-STREAMS:STRING-TO-OCTETS
 125      3   0.2    168   8.9   1703  90.0        -  SB-SYS:WAIT-UNTIL-FD-USABLE
 126      3   0.2    115   6.1   1706  90.2        -  (SB-PCL::FAST-METHOD JONATHAN.ENCODE:%TO-JSON (NUMBER))
 127      3   0.2     62   3.3   1709  90.3        -  HUNCHENSOCKET::READ-N-BYTES-INTO-SEQUENCE
 128      3   0.2     39   2.1   1712  90.5        -  FLEXI-STREAMS::ISO-8859-NAME-P
 129      3   0.2     24   1.3   1715  90.6        -  (FLET HUNCHENSOCKET::MAYBE-ACCEPT-DATA-FRAME :IN HUNCHENSOCKET::HANDLE-FRAME)
 130      3   0.2     23   1.2   1718  90.8        -  GAME-EXC-MOVE
 131      3   0.2     23   1.2   1721  91.0        -  SB-SYS:DECODE-TIMEOUT
 132      3   0.2     21   1.1   1724  91.1        -  SB-IMPL::ANSI-STREAM-WRITE-SEQUENCE
 133      3   0.2     14   0.7   1727  91.3        -  SB-KERNEL:%CONCATENATE-TO-SIMPLE-VECTOR
 134      3   0.2      7   0.4   1730  91.4        -  WRITE-BYTE
 135      3   0.2      4   0.2   1733  91.6        -  SB-C::GET-INFO-VALUE
 136      3   0.2      3   0.2   1736  91.8        -  SB-PCL::FIND-CLASS-FROM-CELL
 137      3   0.2      3   0.2   1739  91.9        -  LENGTH
 138      3   0.2      3   0.2   1742  92.1        -  (LAMBDA (SB-PCL::.ARG0. SB-PCL::.ARG1.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/braid.fasl")
 139      3   0.2      3   0.2   1745  92.2        -  SB-PCL::%MAKE-STANDARD-INSTANCE
 140      3   0.2      3   0.2   1748  92.4        -  (LAMBDA (SB-PCL::.ARG0.) :IN "/build/sbcl-YlyDP6/sbcl-1.3.14/src/pcl/braid.fasl")
 141      3   0.2      3   0.2   1751  92.5        -  SB-IMPL::LIST-NREVERSE
 142      3   0.2      3   0.2   1754  92.7        -  HUNCHENSOCKET::CONTROL-FRAME-P
 143      3   0.2      3   0.2   1757  92.9        -  SB-INT:MEMQ
 144      3   0.2      3   0.2   1760  93.0        -  (SB-PCL::FAST-METHOD FLEXI-STREAMS::CHECK-END (T T T T))
 145      3   0.2      3   0.2   1763  93.2        -  SB-IMPL::%OUTPUT-INTEGER-IN-BASE
 146      3   0.2      3   0.2   1766  93.3        -  SB-KERNEL:OUTPUT-UGLY-OBJECT
 147      3   0.2      3   0.2   1769  93.5        -  SB-EXT:FLOAT-INFINITY-P
 148      3   0.2      3   0.2   1772  93.7        -  (LABELS SB-IMPL::EQUAL-AUX :IN EQUAL)
 149      3   0.2      3   0.2   1775  93.8        -  (LAMBDA (SB-KERNEL::CACHE SB-KERNEL::OBJECT) :IN SB-KERNEL::CACHED-TYPEP)
 150      3   0.2      3   0.2   1778  94.0        -  (SB-PCL::FAST-METHOD SB-MOP:CLASS-SLOTS :BEFORE (SB-PCL::SLOT-CLASS))
 151      2   0.1   1864  98.5   1780  94.1        -  SB-THREAD::CALL-WITH-MUTEX
 152      2   0.1   1858  98.2   1782  94.2        -  HUNCHENSOCKET::READ-HANDLE-LOOP
 153      2   0.1    793  41.9   1784  94.3        -  SEND-HUNCHENSOCKET-MESSAGE
 154      2   0.1    326  17.2   1786  94.4        -  HUNCHENSOCKET::SEND-FRAME
 155      2   0.1    287  15.2   1788  94.5        -  FLEXI-STREAMS:OCTETS-TO-STRING
 156      2   0.1     11   0.6   1790  94.6        -  (SB-PCL::FAST-METHOD FLEXI-STREAMS::COMPUTE-NUMBER-OF-CHARS (FLEXI-STREAMS::FLEXI-UTF-8-FORMAT T T T))
 157      2   0.1     10   0.5   1792  94.7        -  (SB-PCL::FAST-METHOD (SETF HUNCHENTOOT:HEADER-OUT) (T SYMBOL))
 158      2   0.1      9   0.5   1794  94.8        -  PARSE-INTEGER
 159      2   0.1      8   0.4   1796  94.9        -  SB-PCL::PLIST-VALUE
 160      2   0.1      7   0.4   1798  95.0        -  SB-PCL::SETF-SLOT-VALUE-USING-CLASS-DFUN
 161      2   0.1      3   0.2   1800  95.1        -  SB-PCL::ALLOCATE-STANDARD-INSTANCE
 162      2   0.1      3   0.2   1802  95.2        -  SB-IMPL::OUTPUT-UNSIGNED-BYTE-FULL-BUFFERED
 163      2   0.1      3   0.2   1804  95.3        -  HUNCHENSOCKET::READ-FRAME-FROM-CLIENT
 164      2   0.1      2   0.1   1806  95.5        -  (SB-IMPL::OPTIMIZED-DATA-VECTOR-SET (UNSIGNED-BYTE 8))
 165      2   0.1      2   0.1   1808  95.6        -  (SB-IMPL::OPTIMIZED-DATA-VECTOR-REF (UNSIGNED-BYTE 8))
 166      2   0.1      2   0.1   1810  95.7        -  (SETF HUNCHENTOOT:CONTENT-TYPE*)
 167      2   0.1      2   0.1   1812  95.8        -  SB-IMPL::SYNCHRONIZE-STREAM-OUTPUT
 168      2   0.1      2   0.1   1814  95.9        -  SB-KERNEL:HAIRY-DATA-VECTOR-REF
 169      2   0.1      2   0.1   1816  96.0        -  MY-PACKAGE::GAME-MOVE-ROT
 170      2   0.1      2   0.1   1818  96.1        -  IDENTITY
 171      2   0.1      2   0.1   1820  96.2        -  MY-PACKAGE::GAME-MOVE-SHAPE-CODE
 172      2   0.1      2   0.1   1822  96.3        -  (SB-PCL::FAST-METHOD HUNCHENSOCKET:CHECK-MESSAGE (HUNCHENSOCKET:WEBSOCKET-RESOURCE HUNCHENSOCKET:WEBSOCKET-CLIENT T T T))
 173      2   0.1      2   0.1   1824  96.4        -  (LAMBDA (&REST SB-IMPL::ARGUMENTS) :IN CONSTANTLY)
 174      2   0.1      2   0.1   1826  96.5        -  SB-KERNEL:CLASSOID-CELL-TYPEP
 175      2   0.1      2   0.1   1828  96.6        -  (SB-IMPL::OPTIMIZED-DATA-VECTOR-REF T)
 176      2   0.1      2   0.1   1830  96.7        -  SB-IMPL::LIST-REVERSE
 177      2   0.1      2   0.1   1832  96.8        -  SB-UNIX:UNIX-WRITE
 178      2   0.1      2   0.1   1834  96.9        -  FLEXI-STREAMS::CODE-PAGE-NAME-P
 179      2   0.1      2   0.1   1836  97.0        -  (SB-PCL::FAST-METHOD PRINT-OBJECT (INTEGER T))
 180      2   0.1      2   0.1   1838  97.1        -  (LAMBDA (SB-KERNEL:INSTANCE) :IN SB-PCL::MAKE-OPTIMIZED-STD-BOUNDP-METHOD-FUNCTION)
 181      2   0.1      2   0.1   1840  97.3        -  SB-KERNEL:SEQUENCEP
 182      2   0.1      2   0.1   1842  97.4        -  DIGIT-CHAR-P
 183      2   0.1      2   0.1   1844  97.5        -  (FLET SB-INT:%WRITE :IN SB-UNIX:UNIX-WRITE)
 184      2   0.1      2   0.1   1846  97.6        -  (LAMBDA (SB-PCL::.PV. SB-PCL::.NEXT-METHOD-CALL. SB-PCL::.ARG0. SB-PCL::.ARG1. SB-PCL::.ARG2. SB-PCL::.ARG3. SB-PCL::.ARG4.))
 185      2   0.1      2   0.1   1848  97.7        -  SB-KERNEL:%UNARY-TRUNCATE/SINGLE-FLOAT
 186      2   0.1      2   0.1   1850  97.8        -  SB-KERNEL:TWO-ARG-=
 187      1   0.1     44   2.3   1851  97.8        -  SB-IMPL::SYSREAD-MAY-BLOCK-P
 188      1   0.1     35   1.8   1852  97.9        -  HUNCHENSOCKET::WRITE-FRAME
 189      1   0.1     20   1.1   1853  97.9        -  HUNCHENSOCKET::READ-APPLICATION-DATA
 190      1   0.1     16   0.8   1854  98.0        -  (SB-PCL::FAST-METHOD MAKE-INSTANCE (SYMBOL))
 191      1   0.1     15   0.8   1855  98.0        -  CONCATENATE
 192      1   0.1     14   0.7   1856  98.1        -  HUNCHENSOCKET::MASK-UNMASK
 193      1   0.1      3   0.2   1857  98.1        -  (FLET SB-THREAD::WITH-MUTEX-THUNK :IN HUNCHENSOCKET::SEND-FRAME)
 194      1   0.1      1   0.1   1858  98.2        -  SB-IMPL::SLOW-HAIRY-DATA-VECTOR-REF/CHECK-BOUNDS
 195      1   0.1      1   0.1   1859  98.3        -  SB-IMPL::GET3
 196      1   0.1      1   0.1   1860  98.3        -  GETF
 197      1   0.1      1   0.1   1861  98.4        -  SB-KERNEL:HAIRY-DATA-VECTOR-SET/CHECK-BOUNDS
 198      1   0.1      1   0.1   1862  98.4        -  (SB-PCL::FAST-METHOD SB-MOP:CLASS-PROTOTYPE :BEFORE (T))
 199      1   0.1      1   0.1   1863  98.5        -  SB-C::PACKED-INFO-VALUE-INDEX
 200      1   0.1      1   0.1   1864  98.5        -  MY-PACKAGE::GAME-MOVE-COL
 201      1   0.1      1   0.1   1865  98.6        -  SB-VM::FILL-VECTOR/T
 202      1   0.1      1   0.1   1866  98.6        -  (FLET #:CLEANUP-FUN-371 :IN SB-THREAD::CALL-WITH-MUTEX)
 203      1   0.1      1   0.1   1867  98.7        -  SB-IMPL::STRING-OUT-MISC
 204      1   0.1      1   0.1   1868  98.7        -  (FLET #:CLEANUP-FUN-500 :IN HUNCHENSOCKET::HANDLE-FRAME)
 205      1   0.1      1   0.1   1869  98.8        -  SB-IMPL::ANSI-STREAM-READ-N-BYTES
 206      1   0.1      1   0.1   1870  98.8        -  "PPRINT-MACRO-CALL-P"
 207      1   0.1      1   0.1   1871  98.9        -  (SB-PCL::FAST-METHOD SB-MOP:CLASS-DEFAULT-INITARGS (SB-PCL::SLOT-CLASS))
 208      1   0.1      1   0.1   1872  98.9        -  (SB-PCL::EMF SB-GRAY:STREAM-WRITE-CHAR)
 209      1   0.1      1   0.1   1873  99.0        -  (SB-PCL::FAST-METHOD INITIALIZE-INSTANCE (SB-PCL::SLOT-OBJECT))
 210      1   0.1      1   0.1   1874  99.0        -  SB-KERNEL:TWO-ARG-XOR
 211      1   0.1      1   0.1   1875  99.1        -  "foreign function sb_gettimeofday"
 212      1   0.1      1   0.1   1876  99.2        -  (SB-IMPL::OPTIMIZED-DATA-VECTOR-SET T)
 213      1   0.1      1   0.1   1877  99.2        -  "foreign function syscall"
 214      0   0.0   1864  98.5   1877  99.2        -  (FLET #:WITHOUT-INTERRUPTS-BODY-1139 :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE)
 215      0   0.0   1864  98.5   1877  99.2        -  (FLET SB-THREAD::WITH-MUTEX-THUNK :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE)
 216      0   0.0   1864  98.5   1877  99.2        -  SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE
 217      0   0.0   1864  98.5   1877  99.2        -  "foreign function call_into_lisp"
 218      0   0.0   1864  98.5   1877  99.2        -  "foreign function new_thread_trampoline"
 219      0   0.0   1862  98.4   1877  99.2        -  (SB-PCL::FAST-METHOD HUNCHENTOOT:PROCESS-CONNECTION (HUNCHENTOOT:ACCEPTOR T))
 220      0   0.0   1862  98.4   1877  99.2        -  (SB-PCL::FAST-METHOD HUNCHENTOOT:PROCESS-CONNECTION :AROUND (HUNCHENTOOT:ACCEPTOR T))
 221      0   0.0   1862  98.4   1877  99.2        -  (FLET HUNCHENTOOT::PROCESS-CONNECTION% :IN HUNCHENTOOT::HANDLE-INCOMING-CONNECTION%)
 222      0   0.0   1862  98.4   1877  99.2        -  (LAMBDA NIL :IN BORDEAUX-THREADS::BINDING-DEFAULT-SPECIALS)
 223      0   0.0   1861  98.4   1877  99.2        -  HUNCHENTOOT::DO-WITH-ACCEPTOR-REQUEST-COUNT-INCREMENTED
 224      0   0.0   1861  98.4   1877  99.2        -  (SB-PCL::FAST-METHOD HUNCHENTOOT:PROCESS-CONNECTION :AROUND (HUNCHENSOCKET:WEBSOCKET-ACCEPTOR T))
 225      0   0.0   1860  98.3   1877  99.2        -  (SB-PCL::EMF HUNCHENTOOT:PROCESS-REQUEST)
 226      0   0.0   1858  98.2   1877  99.2        -  (LAMBDA NIL :IN HUNCHENTOOT:PROCESS-REQUEST)
 227      0   0.0   1858  98.2   1877  99.2        -  HUNCHENSOCKET::CALL-WITH-NEW-CLIENT-FOR-RESOURCE
 228      0   0.0    186   9.8   1877  99.2        -  (LABELS SB-IMPL::HANDLE-IT :IN SB-KERNEL:OUTPUT-OBJECT)
 229      0   0.0     10   0.5   1877  99.2        -  (FLET SB-IMPL::COPY-TO-BUFFER :IN SB-IMPL::BUFFER-OUTPUT)
 230      0   0.0      8   0.4   1877  99.2        -  SB-PCL::MAYBE-CALL-CTOR
 231      0   0.0      3   0.2   1877  99.2        -  (SB-PCL::FAST-METHOD HUNCHENTOOT:PROCESS-REQUEST (T))
 232      0   0.0      2   0.1   1877  99.2        -  SWANK::AUTO-FLUSH-LOOP
 233      0   0.0      2   0.1   1877  99.2        -  HUNCHENTOOT::SEND-RESPONSE
 234      0   0.0      2   0.1   1877  99.2        -  HUNCHENTOOT::START-OUTPUT
 235      0   0.0      1   0.1   1877  99.2        -  INIT-SESSION
 236      0   0.0      1   0.1   1877  99.2        -  (FLET #:WRAPPER715 :IN HUNCHENSOCKET::FIND-WEBSOCKET-RESOURCE)
 237      0   0.0      1   0.1   1877  99.2        -  SB-KERNEL:%MAP-FOR-EFFECT-ARITY-1
 238      0   0.0      1   0.1   1877  99.2        -  HUNCHENSOCKET::FIND-WEBSOCKET-RESOURCE
 239      0   0.0      1   0.1   1877  99.2        -  (SB-PCL::FAST-METHOD HUNCHENTOOT:ACCEPTOR-DISPATCH-REQUEST (HUNCHENSOCKET:WEBSOCKET-ACCEPTOR HUNCHENSOCKET::WEBSOCKET-REQUEST))
 240      0   0.0      1   0.1   1877  99.2        -  (SB-PCL::FAST-METHOD HUNCHENTOOT:HANDLE-REQUEST (HUNCHENTOOT:ACCEPTOR HUNCHENTOOT:REQUEST))
 241      0   0.0      1   0.1   1877  99.2        -  SB-IMPL::INPUT-CHAR/UTF-8
 242      0   0.0      1   0.1   1877  99.2        -  (LAMBDA (&REST REST) :IN SB-IMPL::GET-EXTERNAL-FORMAT)
 243      0   0.0      1   0.1   1877  99.2        -  READ-CHAR
 244      0   0.0      1   0.1   1877  99.2        -  SB-IMPL::%READ-PRESERVING-WHITESPACE
 245      0   0.0      1   0.1   1877  99.2        -  READ
 246      0   0.0      1   0.1   1877  99.2        -  SB-IMPL::REPL-READ-FORM-FUN
 247      0   0.0      1   0.1   1877  99.2        -  SB-IMPL::REPL-FUN
 248      0   0.0      1   0.1   1877  99.2        -  (LAMBDA NIL :IN SB-IMPL::TOPLEVEL-REPL)
 249      0   0.0      1   0.1   1877  99.2        -  SB-IMPL::%WITH-REBOUND-IO-SYNTAX
 250      0   0.0      1   0.1   1877  99.2        -  SB-IMPL::TOPLEVEL-REPL
 251      0   0.0      1   0.1   1877  99.2        -  SB-IMPL::TOPLEVEL-INIT
 252      0   0.0      1   0.1   1877  99.2        -  (FLET #:WITHOUT-INTERRUPTS-BODY-77 :IN SB-EXT:SAVE-LISP-AND-DIE)
 253      0   0.0      1   0.1   1877  99.2        -  (LABELS SB-IMPL::RESTART-LISP :IN SB-EXT:SAVE-LISP-AND-DIE)
 254      0   0.0      1   0.1   1877  99.2        -  SWANK/BACKEND:CALL-WITH-LOCK-HELD
 255      0   0.0      1   0.1   1877  99.2        -  (SB-PCL::FAST-METHOD SB-GRAY:STREAM-FINISH-OUTPUT (SWANK/GRAY::SLIME-OUTPUT-STREAM))
 256      0   0.0      1   0.1   1877  99.2        -  (FLET #:FORM-FUN-3091 :IN SB-GRAY:STREAM-FORCE-OUTPUT)
 257      0   0.0      1   0.1   1877  99.2        -  (SB-PCL::FAST-METHOD SB-GRAY:STREAM-FORCE-OUTPUT :AROUND (SWANK/GRAY::SLIME-OUTPUT-STREAM))
 258      0   0.0      1   0.1   1877  99.2        -  CHUNGA:READ-HTTP-HEADERS
 259      0   0.0      1   0.1   1877  99.2        -  HUNCHENTOOT::GET-REQUEST-DATA
 260      0   0.0      1   0.1   1877  99.2        -  PRINC
 261      0   0.0      1   0.1   1877  99.2        -  (LAMBDA (STREAM #:FORMAT-ARG216 #:FORMAT-ARG217 #:FORMAT-ARG219 #:FORMAT-ARG221 &REST SB-FORMAT::ARGS) :IN "/home/ealfonso/quicklisp/dists/quicklisp/software/hunchentoot-v1.2.38/headers.lisp")
 262      0   0.0      1   0.1   1877  99.2        -  FORMAT
 263      0   0.0      1   0.1   1877  99.2        -  SB-IMPL::FINISH-FD-STREAM-OUTPUT
 264      0   0.0      1   0.1   1877  99.2        -  FINISH-OUTPUT
 265      0   0.0      1   0.1   1877  99.2        -  (FLET #:WITHOUT-INTERRUPTS-BODY-654 :IN SB-THREAD::%CONDITION-WAIT)
 266      0   0.0      1   0.1   1877  99.2        -  SB-THREAD:CONDITION-WAIT
 267      0   0.0      1   0.1   1877  99.2        -  (FLET SWANK/BACKEND:RECEIVE-IF :IN "/home/ealfonso/quicklisp/dists/quicklisp/software/slime-v2.20/swank/sbcl.lisp")
 268      0   0.0      1   0.1   1877  99.2        -  SWANK::WAIT-FOR-EVENT
 269      0   0.0      1   0.1   1877  99.2        -  SWANK::SLDB-LOOP
 270      0   0.0      1   0.1   1877  99.2        -  (FLET SWANK/BACKEND:CALL-WITH-DEBUGGING-ENVIRONMENT :IN "/home/ealfonso/quicklisp/dists/quicklisp/software/slime-v2.20/swank/sbcl.lisp")
 271      0   0.0      1   0.1   1877  99.2        -  SWANK::DEBUG-IN-EMACS
 272      0   0.0      1   0.1   1877  99.2        -  SWANK/SBCL::CALL-WITH-BREAK-HOOK
 273      0   0.0      1   0.1   1877  99.2        -  (FLET SWANK/BACKEND:CALL-WITH-DEBUGGER-HOOK :IN "/home/ealfonso/quicklisp/dists/quicklisp/software/slime-v2.20/swank/sbcl.lisp")
 274      0   0.0      1   0.1   1877  99.2        -  SWANK::CALL-WITH-BINDINGS
 275      0   0.0      1   0.1   1877  99.2        -  SWANK:INVOKE-SLIME-DEBUGGER
 276      0   0.0      1   0.1   1877  99.2        -  SWANK:SWANK-DEBUGGER-HOOK
 277      0   0.0      1   0.1   1877  99.2        -  SB-DEBUG::RUN-HOOK
 278      0   0.0      1   0.1   1877  99.2        -  INVOKE-DEBUGGER
 279      0   0.0      1   0.1   1877  99.2        -  (SB-PCL::FAST-METHOD HUNCHENTOOT:MAYBE-INVOKE-DEBUGGER (T))
 280      0   0.0      1   0.1   1877  99.2        -  (FLET #:H0 :IN HUNCHENTOOT:PROCESS-REQUEST)
 281      0   0.0      1   0.1   1877  99.2        -  SIGNAL
 282      0   0.0      1   0.1   1877  99.2        -  ERROR

I tried gprof2dot ./prof.out but got error: unexpected end of file

Homebrew formula

I am planning on submitting a Homebrew formula for easy installation on Mac, so long as @jrfonseca approves of the idea. I just wanted to check here first to make sure that you approved of the idea.

Is the latest version compatible with Python3?

Using the version from brew I am getting the following:
brew info gprof2dot
gprof2dot: stable 2015.02.03 (bottled), HEAD
Convert the output from many profilers into a Graphviz dot graph.
https://github.com/jrfonseca/gprof2dot
/usr/local/Cellar/gprof2dot/2015.02.03 (10 files, 202.0K) *
Poured from bottle on 2016-10-12 at 13:32:44
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/gprof2dot.rb
==> Dependencies
Recommended: graphviz โœ”
==> Options
--without-graphviz
Build without graphviz support
--HEAD
Install HEAD version

Traceback (most recent call last):
File "/usr/local/Cellar/gprof2dot/2015.02.03/libexec/bin/gprof2dot", line 9, in
load_entry_point('gprof2dot==2015.02.03', 'console_scripts', 'gprof2dot')()
File "/usr/local/Cellar/gprof2dot/2015.02.03/libexec/lib/python2.7/site-packages/gprof2dot.py", line 3139, in main
parser = Format(*args)
File "/usr/local/Cellar/gprof2dot/2015.02.03/libexec/lib/python2.7/site-packages/gprof2dot.py", line 2565, in init
self.stats = hotshot.stats.load(filename[0])
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/hotshot/stats.py", line 12, in load
return StatsLoader(filename).load()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/hotshot/stats.py", line 29, in load
for event in log:
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/hotshot/log.py", line 98, in next
what, tdelta, fileno, lineno = self._nextitem()
ValueError: unknown record type in log file

Assertion Error assert abs(call_ratio*total - partial) <= 0.001*call_ratio*total

I've a .prof file exported with the flag --kcachegrind while running django-extention - runprofileserver. The file looks like this: users.001928ms.1439448963.prof

Based upon the help, I found that I've to format it well first and then export .dot file to make the png.

Here's the what I ran for formatting and generating .dot file.

$ gprof2dot --format=callgrind --output=output.dot users.001928ms.1439448963.prof

The error I got:

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.4/bin/gprof2dot", line 9, in <module>
    load_entry_point('gprof2dot==2015.2.3', 'console_scripts', 'gprof2dot')()
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/gprof2dot.py", line 3145, in main
    profile = parser.parse()
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/gprof2dot.py", line 1565, in parse
    self.profile.integrate(TOTAL_TIME_RATIO, TIME_RATIO)
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/gprof2dot.py", line 478, in integrate
    self._integrate_function(function, outevent, inevent)
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/gprof2dot.py", line 483, in _integrate_function
    return self._integrate_cycle(function.cycle, outevent, inevent)
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/gprof2dot.py", line 538, in _integrate_cycle
    assert abs(call_ratio*total - partial) <= 0.001*call_ratio*total
AssertionError

Any luck / help about it? Why gprof2dot is crashing?

`-p` doesn't work for callgrind input

Thanks to @barakshelef for #32 .
Yet it doesn't work with callgrind:

$  python3 ~/bin/gprof2dot.py -p $MODNAME -f callgrind callgrind.out.* > /tmp/1.dot
Traceback (most recent call last):
  File "$HOME/bin/gprof2dot.py", line 3328, in <module>
    main()
  File "$HOME/bin/gprof2dot.py", line 3309, in main
    profile.prune(options.node_thres/100.0, options.edge_thres/100.0, options.filter_paths, options.color_nodes_by_selftime)
  File "$HOME/bin/gprof2dot.py", line 717, in prune
    if paths and not any(function.filename.startswith(path) for path in paths):
  File "$HOME/bin/gprof2dot.py", line 717, in <genexpr>
    if paths and not any(function.filename.startswith(path) for path in paths):
AttributeError: 'NoneType' object has no attribute 'startswith'

Possible to fix?

Error: <stdin>: syntax error in line 11 scanning a quoted string (missing endquote? longer than 16384?)

Hi, I am getting the following error:

Error: <stdin>: syntax error in line 11 scanning a quoted string (missing endquote? longer than 16384?)
String starting:"boost::proto::switch_<boost::phoenix::meta_grammar, boost::proto::tag_of<boost::
Traceback (most recent call last):
  File "/usr/bin/gprof2dot", line 11, in <module>
    load_entry_point('gprof2dot==2016.10.13', 'console_scripts', 'gprof2dot')()
  File "/usr/lib/python3.6/site-packages/gprof2dot.py", line 3270, in main
    dot.graph(profile, theme)
  File "/usr/lib/python3.6/site-packages/gprof2dot.py", line 2998, in graph
    tooltip = function.filename,
  File "/usr/lib/python3.6/site-packages/gprof2dot.py", line 3046, in node
    self.attr_list(attrs)
  File "/usr/lib/python3.6/site-packages/gprof2dot.py", line 3071, in attr_list
    self.id(value)
  File "/usr/lib/python3.6/site-packages/gprof2dot.py", line 3084, in id
    self.write(s)
  File "/usr/lib/python3.6/site-packages/gprof2dot.py", line 3108, in write
    self.fp.write(s)
BrokenPipeError: [Errno 32] Broken pipe

Profile input: prof.zip

Unclean error when trying to pass invalid parameters

Trying to execute gprof2dot by specifying -f perf option while the profile file is an output of gprof tool results to the following unclean message:

gprof2dot -f perf lsp-plugins-fx8350-profile.log 
Traceback (most recent call last):
  File "/usr/bin/gprof2dot", line 9, in <module>
    load_entry_point('gprof2dot==2017.9.19', 'console_scripts', 'gprof2dot')()
  File "/usr/lib/python3.4/site-packages/gprof2dot.py", line 3284, in main
    profile = parser.parse()
  File "/usr/lib/python3.4/site-packages/gprof2dot.py", line 1963, in parse
    self.parse_event()
  File "/usr/lib/python3.4/site-packages/gprof2dot.py", line 1995, in parse_event
    callchain = self.parse_callchain()
  File "/usr/lib/python3.4/site-packages/gprof2dot.py", line 2023, in parse_callchain
    function = self.parse_call()
  File "/usr/lib/python3.4/site-packages/gprof2dot.py", line 2037, in parse_call
    assert mo
AssertionError

Problems with Intel VTune Amplifier XE 2015

I'm having problems with files generated from the latest version of VTune running on windows 10. I get " unrecognized call graph entry" warning for every line of the file. From what i could tell the problem is the lack of carriage return in files generated in VTune. I tried running the files in the test folder and the graphs were created successfully but when i used a program to remove the carriage returns from the files the graphs came out empty.

New input filter for FlameGraph collapse output

FlameGraph is another profiling visualization tool. It grokes a simple text-based line-oriented format. It ships with a series of stackcollapse scripts which generate the expected input from different tools (gdb, instruments, jstack, ljp, perf, GDB based Poor Man's profiler, stap, VTune).

It might be interesting to add a parser for this format:

  • Any tool implemented by FlameGraph could be supported directly;
  • The format being simple, it is very easy to post-process the stackcollpase data using grep (in order to focus on a given part of the execution), sed, perl, awk and friends. One example of this is the stackcollapse-recursive script which merges direct recursive calls.

valgrind: A lot of information is lost, graph has few disconnected components

asdf.c:

#include <stdio.h>
#include <SDL2/SDL.h>

void a(void) {
	long long sum = 0;
	for (long long i = 0; i <= 100000000LL; i++)
		sum += i;
	printf("%lld\n", sum);
}
void b(void) { a(); }
void c(void) { b(); }
int main(void) { SDL_CreateWindow("a", 5, 5, 100, 100, 0); c(); return 0; }

commands:

gcc asdf.c -lSDL2
valgrind --tool=callgrind --callgrind-out-file=callgrind.out ./a.out
gprof2dot callgrind.out --format=callgrind --output=foo.dot
dot -Tpng foo.dot -o foo.png

resulting foo.png:

foo

I believe the problem is in gprof2dot, because kcachegrind callgrind.out correctly shows that most of the time is spent in a():

k

Content of callgrind.out (71191 lines): https://termbin.com/e2k8

If I comment out the call to SDL_CreateWindow(), valgrind's brk segment overflow in thread #1 warning disappears, and I also get much better results:

foo

How to use --path option

Hello. I am trying to exclude some nodes from my graph so that it can be less cluttered. Unfortunately, though, I was unable to find documentation on how to use the --path option.

This is my graph:

https://i.imgur.com/qhxLusT.png

What I'd like to do is remove:

  • remote:758:fetch and its descendants
  • cmd:542: and its descendant

These are all methods of an external library (GitPython), so that is why I'd like to remove them.
Is this possible using the --path option (or with some others)? Could you please provide an example of how to achieve this?

Thank you in advance.

(Code rot) perf script format has changed

The output from perf script has changed. Where it used to say

7f023a570d85 __libc_start_main (/lib64/libc-2.17.so)

Now (kernel version 4.8.12) it says

207d0 __libc_start_main+0xffff0082383ac0f0 (/lib64/libc-2.23.so)

gprof2dot.py needs an adjustment to avoid parsing the suffixed address as part of the function name.

gprof2dot-patch.txt

Module name may not be sufficient for Python profiles

Python profiles are sometimes hard to read because all you see is:

  • module name
  • line number
  • function/method name

but you don't see

  • package name
  • class name

There may be a dozen different modules with the same name in different packages, and don't let me get started about methods called __init__.

Now it's hard to do anything about class names if the profiling data doesn't contain that information (at least on Python 2.7; Python 3 introduced __qualname__ that gives me hope for the eventual bright future, although I haven't actually checked if the profiler records those).

Package names are also difficult, since all we have is filenames. (If the files still exist you could walk up the tree looking for __init__.py files: when these stop, you found the root package. Except Python 3.3 breaks that heuristic with its implicit namespace packages and anyway, you cannot always rely on having the source code available -- what if the profile was made on a different machine?).

Still, not all hope is lost: the full filename is available, and humans can figure out the package name from that (or look up the class name from filename + line number). Filenames are long, though, and would not fit in the graph nicely -- but wouldn't it be awesome if they were available via tooltips?

Certain graphviz formats (such as SVG) support tooltips. I have a patch prepared.

how can i use gprof2dot on a binary executable file with a config file?

for normal excutable file to see running time picture.

I can do like this:

gprof -p -q ./backtest | ~/gprof2dot/gprof2dot.py -n0 -e0 | dot -Tpng -o out.png
backtest is my executable file.

but how if backtest need a config? for example, running command for backtest is:

./backtest a.cfg > a
i think:

gprof -p -q ./backtest a.cfg > b | ~/gprof2dot/gprof2dot.py -n0 -e0 | dot -Tpng -o out.png
this command is not good, how can i make it work

Enhancement request: support per thread plots

By default when feeding oprofile data, it sums across all threads and presents a plot for that. However, in many multithreaded programs, this frequently points to the wrong place to look at for optimization. For example, in a recent test, we have many threads that wait either on condition variables or go to sleep for intervals, and other threads that are CPU bound. What happens in this case is that gprof2dot shows that most of the time is spent in the code to wait (60% of the time in nanosleep, for example).

It would be really useful in the case of oprofile and vtune (not sure if the other programs give the ability to report samples per thread) to generate one plot per thread, or to have a command line option that indicates which thread to process. In one of our use cases, we have up to 100 threads (or more, many are short lived), and would like to look at specific threads - the text output is too wide to be useful for viewing, which is why I started using gprof2dot.

Allow to show the full-path of the functions

Lots of cases are, when simple module names are not enough to be able to differentiate them.
A simple switch and if does the trick, as you already have this here: https://github.com/jrfonseca/gprof2dot/blob/master/gprof2dot.py#L2729 (at least in case of cProfile)
The only change would be that the module would not have been extracted, so the filename goes straight forward.
For eg.:

2698     def get_function_name(self, key):
2699         filename, line, name = key
new           if self._display_full_path:
new             return "%s:%d:%s" % (filename, line, name)
2700         module = os.path.splitext(filename)[0]
2701         module = os.path.basename(module)
2702         return "%s:%d:%s" % (module, line, name)

Visualization results are abnormal

Hello,
The picture I got after using the Gprof2Dot visualization tool did not show the details of the function call between the python program modules. But this information is what I need, what should I do. The png image I got is provided in the attachment. The command line parameters are as follows.
Looking forward to your answer.

python -m cProfile -o output.pstats spades.py -t 28 -m 1024 --meta -k 21,33,55,77 -1 output_forward_paired.fq.gz -2 output_reverse_paired.fq.gz -o ./spa_out

python gprof2dot.py -f pstats output.pstats | dot -x -Tpng -o output.png

output

UnicodeEncodeError: 'ascii' codec can't encode character on systems without unicode support

There appears to be a problem dealing with functions that have non-ascii encodable names:

File "redacted.py", line XX, in main
produce_profiles(redacted)
dot_writer.graph(parsed_profile, gprof2dot.themes['color'])
File "/vagrant/venv/lib/python3.5/site-packages/gprof2dot-2017.9.19-py3.5.egg/gprof2dot.py", line 3037, in graph
File "/vagrant/venv/lib/python3.5/site-packages/gprof2dot-2017.9.19-py3.5.egg/gprof2dot.py", line 3085, in node
File "/vagrant/venv/lib/python3.5/site-packages/gprof2dot-2017.9.19-py3.5.egg/gprof2dot.py", line 3110, in attr_list
File "/vagrant/venv/lib/python3.5/site-packages/gprof2dot-2017.9.19-py3.5.egg/gprof2dot.py", line 3123, in id
File "/vagrant/venv/lib/python3.5/site-packages/gprof2dot-2017.9.19-py3.5.egg/gprof2dot.py", line 3147, in write
UnicodeEncodeError: 'ascii' codec can't encode character '\xd7' in position 51: ordinal not in range(128)

Colour nodes by self-time

Sometimes it is useful to draw attention to functions which have high self-time rather than total-time. (For example, to guide optimisation effort it can be desirable to focus on time-intensive core functions, with minimal distraction by the calling layers of light-weight wrapper functions.) I think it would be good if gprof2dot had a command line argument to colour nodes by self-time instead of total-time. It may also be worth switching to a smaller default skew value (since self-time < total-time).

Currently gprof2dot computes weights separately for functions and calls, but the same function weights are used for both pruning the graph (in Profile.prune) and for colouring the nodes (in the Dotwriter class). I think it would be undesirable to prune by self-time (because important context like "main" functions may be cut otherwise). The function weights are computed in Profile.prune, which has access to both total-time (TOTAL_TIME_RATIO) and self-time (TIME_RATIO). At present, one easy way to change the node colouring (and preserve the current pruning) is at the very end of Profile.prune (currently at line 648) to "compute the prune ratios" a second time (but differently):

    colour_nodes_by_selftime = True
    if colour_nodes_by_selftime:
        for function in compat_itervalues(self.functions):
            try:
                function.weight = function[TIME_RATIO]
            except UndefinedEvent:
                pass

Too slow on a big cycle

I have profile data in the sleepy format. The data contains about 14000 functions with a huge cycle (~7500). Processing data takes about 6 hours.

I fixed the problem. The processing time was reduced to 2 minutes. I want to share the fix. The patch (gprof2dot.py.diff.txt) consists of the following changes

  • improved implementation of Tarjan's algorithm to search for cycles
  • ranking of cycle functions uses the Dijkstra's algorithm to search for shortest paths

Gprof2Dot can't parse my prof file :/

I have a .prof file, which is generated by python 3.9.2 which is built into Blender 2.93.1.
Now I try to parse it with my system's python 3.9.2:

[portnov]$ python3 ./gprof2dot.py /tmp/test.prof                                                          master [9:58]
Traceback (most recent call last):
  File "/home/portnov/src/gprof2dot/./gprof2dot.py", line 3555, in <module>
    main()
  File "/home/portnov/src/gprof2dot/./gprof2dot.py", line 3509, in main
    profile = parser.parse()
  File "/home/portnov/src/gprof2dot/./gprof2dot.py", line 1322, in parse
    self.parse_cg()
  File "/home/portnov/src/gprof2dot/./gprof2dot.py", line 1304, in parse_cg
    while not self._cg_header_re.match(self.readline()):
  File "/home/portnov/src/gprof2dot/./gprof2dot.py", line 1142, in readline
    line = self.fp.readline()
  File "/usr/lib/python3.9/codecs.py", line 322, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfb in position 0: invalid start byte

I also tried with Blender's python, just in case the problem is in python's compilation options:

[portnov]$ ~/soft/blender-2.93.1-linux-x64/2.93/python/bin/python3.9 ./gprof2dot.py /tmp/test.prof       master [10:01]
Traceback (most recent call last):
  File "/home/portnov/src/gprof2dot/./gprof2dot.py", line 3555, in <module>
    main()
  File "/home/portnov/src/gprof2dot/./gprof2dot.py", line 3509, in main
    profile = parser.parse()
  File "/home/portnov/src/gprof2dot/./gprof2dot.py", line 1322, in parse
    self.parse_cg()
  File "/home/portnov/src/gprof2dot/./gprof2dot.py", line 1304, in parse_cg
    while not self._cg_header_re.match(self.readline()):
  File "/home/portnov/src/gprof2dot/./gprof2dot.py", line 1142, in readline
    line = self.fp.readline()
  File "/home/portnov/soft/blender-2.93.1-linux-x64/2.93/python/lib/python3.9/codecs.py", line 322, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfb in position 0: invalid start byte

No luck either :/

Attaching prof file:
test.zip

Also note: https://github.com/baverman/flameprof tool parses the same file successfully.

Add units to timings in node labels

Currently, the timings on node labels are shown like this: 0.1234

It's not immediately clear that that's in seconds. Can we add a " s" to the label? Or maybe even consider changing it to milliseconds and adding " ms".

I'm not familiar with all the input formats and if they have the timing information in seconds or not, but if it's just a matter of changing the label formatting, I'm happy to raise a PR.

Compiling errors when using the command

HI dear author,
It's truly a honor to write a letter to you, I'm building your project nowadays and found the error when building as following, I wonder if there is a chance that you know the reason? :)

image

thank you
best regards to you
William

Produce graph from union of two roots?

I have portion of a call graph that is defined by the union of two functions' call graphs.
For example:

foo():
    bar()
    baz()

asdf():
   fn1234()
   bar()
   fn9321()

Is there a way to get a call graph of only this region?
Ideally, Id list a few functions I was interested in seeing, and a 'reach' and it would give the graph of all those functions, plus functions connected to them by at most 'reach' distance away in both the ancestors and descendants directions.

I dont think I can do this with the root/leaves since neither accept multiple arguments and specifying a function as both a root and leaf gives a graph of exactly that node.

I'm currently doing this by producing a limited call graph from these two functions as roots, then manually combining the two.

I'd be willing to write it myself and back contribute if you pointed me in the right direction.

main missing

I try to get familiar with gprof profiling and use gprof2dot to visualize the results. The used gcc is a cross compiler that produces Amiga executables. gprof2dot produces pretty pictures for big projects.. Now I have an understanding problem. Please see the attached tiny example. In the produced picture I see no main(). Is that abug or am I doing something wrong?

gprof test | gprof2dot -n0 -e0 | dot -Tpng -o output.png && mirage output.png

granularity: each sample hit covers 2 byte(s) for 100.00% of 0.02 seconds

index % time    self  children    called     name
                                                 <spontaneous>
[1]    100.0    0.02    0.00                 strlen [1]
-----------------------------------------------
                0.00    0.00       1/1           main [53]
[2]      0.0    0.00    0.00       1         fct_1 [2]
                0.00    0.00       1/1           fct_2 [3]
-----------------------------------------------
                0.00    0.00       1/1           fct_1 [2]
[3]      0.0    0.00    0.00       1         fct_2 [3]
-----------------------------------------------

output

test.tar.gz

AttributeError: 'ellipsis' object has no attribute 'items'

I encountered this when trying to run

gprof2dot -f pstats <file>

Traceback (most recent call last):
  File "/home/ajamato/.local/bin/gprof2dot", line 8, in <module>
    sys.exit(main())
  File "/home/ajamato/.local/lib/python3.9/site-packages/gprof2dot.py", line 3457, in main
    parser = Format(*args)
  File "/home/ajamato/.local/lib/python3.9/site-packages/gprof2dot.py", line 2685, in __init__
    self.stats = pstats.Stats(*filename)
  File "/usr/lib/python3.9/pstats.py", line 114, in __init__
    self.init(arg)
  File "/usr/lib/python3.9/pstats.py", line 130, in init
    self.get_top_level_stats()
  File "/usr/lib/python3.9/pstats.py", line 159, in get_top_level_stats
    for func, (cc, nc, tt, ct, callers) in self.stats.items():
AttributeError: 'ellipsis' object has no attribute 'items'

Unfortunately I can't share the file.
I am not sure if its related to the input files or not. But if you have any ideas what to look for I can look at the file and share findings to help debug

From pip list:
gprof2dot 2021.2.21

I also did try to load the sample pstat files on this repro, but got this error as well. Perhaps there is some reason this version can't process those files?

gprof2dot -f pstats cProfile.pstats 
error: failed to load cProfile.pstats, maybe they are generated by different python version?
gprof2dot -f pstats profile.pstats 
error: failed to load profile.pstats, maybe they are generated by different python version?

I also downloaded the standalone version and got that error as well

~/gprof2dot.py -f pstats profile.pstats 
error: failed to load profile.pstats, maybe they are generated by different python version?

/usr/bin/env python3 --version
Python 3.9.2

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.