Skip to content

Conversation

@t-bltg
Copy link

@t-bltg t-bltg commented Nov 16, 2022

@carstenbauer, thanks for this attempt, I'm also interested in an automated allocations reporting tool.

  • allow tracking all functions (even unexported ones) from a module;
  • attempt to print method source file and line number (an optionally remove a prefix from filename);
  • add basic ci configuration;
  • add more tests, and rework test output;
  • fix @timetracked macro (current master fails the following):
julia> using UnicodePlots, TimerOutputsTracked
julia> @timetracked lineplot(1:2)
ERROR: MethodError: no method matching lineplot(::Expr)

By the way, should the repo be renamed to TimerOutputsTracked.jl ?

Example usage (it is now trivial to focus on reducing allocations, and the process in non-intrusive):

julia> using UnicodePlots, TimerOutputsTracked
julia> TimerOutputsTracked.reset();
julia> TimerOutputsTracked.track(UnicodePlots; all = true);  # track all `UnicodePlots` methods (even unexported ones)
julia> @timetracked lineplot(1:2) functionloc=true;
julia> timings_tracked();
  ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
                                                                                                                        Time                    Allocations      
                                                                                                               ───────────────────────   ────────────────────────
                                               Tot / % measured:                                                    1.30s /  23.6%           6.23MiB /  99.4%    

 Section                                                                                               ncalls     time    %tot     avg     alloc    %tot      avg
 ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
 lineplot at ~/.julia/dev/UnicodePlots.jl/src/interface/lineplot.jl:78                                      1    307ms  100.0%   307ms   6.20MiB  100.0%  6.20MiB
   #lineplot#150 at ~/.julia/dev/UnicodePlots.jl/src/interface/lineplot.jl:78                               1    307ms  100.0%   307ms   6.19MiB   99.9%  6.19MiB
     lineplot at ~/.julia/dev/UnicodePlots.jl/src/interface/lineplot.jl:67                                  1    306ms   99.9%   306ms   6.19MiB   99.8%  6.19MiB
       lineplot at ~/.julia/dev/UnicodePlots.jl/src/interface/lineplot.jl:67                                1    306ms   99.9%   306ms   6.18MiB   99.8%  6.18MiB
         #lineplot#149 at ~/.julia/dev/UnicodePlots.jl/src/interface/lineplot.jl:67                         1    306ms   99.9%   306ms   6.17MiB   99.7%  6.17MiB
           lineplot! at ~/.julia/dev/UnicodePlots.jl/src/interface/lineplot.jl:80                           1    306ms   99.7%   306ms   6.14MiB   99.2%  6.14MiB
             #lineplot!#151 at ~/.julia/dev/UnicodePlots.jl/src/interface/lineplot.jl:80                    1    306ms   99.7%   306ms   6.14MiB   99.1%  6.14MiB
               lines! at ~/.julia/dev/UnicodePlots.jl/src/plot.jl:510                                       1    305ms   99.6%   305ms   6.13MiB   98.9%  6.13MiB
                 #lines!#88 at ~/.julia/dev/UnicodePlots.jl/src/plot.jl:510                                 1    305ms   99.6%   305ms   6.12MiB   98.8%  6.12MiB
                   lines! at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:180                                 1    305ms   99.5%   305ms   6.11MiB   98.6%  6.11MiB
                     lines! at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:114                               1    305ms   99.5%   305ms   6.10MiB   98.5%  6.10MiB
                       lines! at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:114                             1    305ms   99.4%   305ms   6.10MiB   98.4%  6.10MiB
                         pixel! at ~/.julia/dev/UnicodePlots.jl/src/canvas/braillecanvas.jl:76             81    296ms   96.6%  3.66ms   5.49MiB   88.6%  69.4KiB
                           pixel_to_char_point_off at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:304       81    259ms   84.5%  3.20ms   1.46MiB   23.5%  18.4KiB
                             x_pixel_per_char at ?:?                                                      162    494μs    0.2%  3.05μs     0.00B    0.0%    0.00B
                             y_pixel_per_char at ?:?                                                      162    409μs    0.1%  2.52μs     0.00B    0.0%    0.00B
                             pixel_width at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:12                  81   47.8μs    0.0%   590ns   6.33KiB    0.1%    80.0B
                             pixel_height at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:11                 81   40.8μs    0.0%   504ns   6.33KiB    0.1%    80.0B
                           ansi_color at ~/.julia/dev/UnicodePlots.jl/src/common.jl:537                    81   10.3ms    3.3%   127μs   1.05MiB   16.9%  13.3KiB
                             ansi_color at ~/.julia/dev/UnicodePlots.jl/src/common.jl:542                  81   4.61ms    1.5%  56.9μs    375KiB    5.9%  4.63KiB
                               ansi_4bit_to_8bit at ~/.julia/dev/UnicodePlots.jl/src/common.jl:521         81   1.37ms    0.4%  16.9μs   16.5KiB    0.3%     208B
                             ignored_color at ~/.julia/dev/UnicodePlots.jl/src/common.jl:515               81    172μs    0.1%  2.12μs   7.59KiB    0.1%    96.0B
                           set_color! at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:54                     81   4.51ms    1.5%  55.7μs    545KiB    8.6%  6.72KiB
                             set_color! at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:54                   81   1.52ms    0.5%  18.7μs    157KiB    2.5%  1.94KiB
                               blend_colors at ~/.julia/dev/UnicodePlots.jl/src/common.jl:497              32    123μs    0.0%  3.84μs   6.00KiB    0.1%     192B
                           valid_x_pixel at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:38                  81   2.71ms    0.9%  33.4μs    348KiB    5.5%  4.30KiB
                             pixel_width at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:12                  81   74.1μs    0.0%   915ns   6.33KiB    0.1%    80.0B
                           valid_y_pixel at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:37                  81   2.42ms    0.8%  29.9μs    348KiB    5.5%  4.30KiB
                             pixel_height at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:11                 81   52.0μs    0.0%   642ns   6.33KiB    0.1%    80.0B
                         scale_y_to_pixel at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:31                  2    550μs    0.2%   275μs   36.9KiB    0.6%  18.5KiB
                           y_to_pixel at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:18                      2    431μs    0.1%   215μs   27.7KiB    0.4%  13.9KiB
                             pixel_height at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:11                  2   5.46μs    0.0%  2.73μs      160B    0.0%    80.0B
                             origin_y at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:13                      2   5.35μs    0.0%  2.67μs      192B    0.0%    96.0B
                             height at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:15                        2   3.76μs    0.0%  1.88μs      192B    0.0%    96.0B
                         scale_x_to_pixel at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:32                  2    498μs    0.2%   249μs   36.9KiB    0.6%  18.4KiB
                           x_to_pixel at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:24                      2    372μs    0.1%   186μs   27.6KiB    0.4%  13.8KiB
                             pixel_width at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:12                   2   4.67μs    0.0%  2.33μs      160B    0.0%    80.0B
                             origin_x at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:14                      2   4.43μs    0.0%  2.21μs      192B    0.0%    96.0B
                             width at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:16                         2   3.65μs    0.0%  1.82μs      192B    0.0%    96.0B
                         y_to_pixel at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:18                        2    370μs    0.1%   185μs   27.8KiB    0.4%  13.9KiB
                           pixel_height at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:11                    2   4.62μs    0.0%  2.31μs      160B    0.0%    80.0B
                           height at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:15                          2   3.80μs    0.0%  1.90μs      192B    0.0%    96.0B
                           origin_y at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:13                        2   2.31μs    0.0%  1.15μs      192B    0.0%    96.0B
                         x_to_pixel at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:24                        2    350μs    0.1%   175μs   27.7KiB    0.4%  13.9KiB
                           pixel_width at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:12                     2   4.07μs    0.0%  2.04μs      160B    0.0%    80.0B
                           width at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:16                           2   3.79μs    0.0%  1.90μs      192B    0.0%    96.0B
                           origin_x at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:14                        2   2.56μs    0.0%  1.28μs      192B    0.0%    96.0B
                         valid_y at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:34                           1    212μs    0.1%   212μs   14.1KiB    0.2%  14.1KiB
                           origin_y at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:13                        2   6.84μs    0.0%  3.42μs      192B    0.0%    96.0B
                           height at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:15                          1   3.51μs    0.0%  3.51μs     96.0B    0.0%    96.0B
                         valid_x at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:35                           1    197μs    0.1%   197μs   14.1KiB    0.2%  14.1KiB
                           origin_x at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:14                        2   5.75μs    0.0%  2.88μs      192B    0.0%    96.0B
                           width at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:16                           1   4.08μs    0.0%  4.08μs     96.0B    0.0%    96.0B
                         origin_y at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:13                          2   5.57μs    0.0%  2.78μs      192B    0.0%    96.0B
                         origin_x at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:14                          2   4.25μs    0.0%  2.13μs      192B    0.0%    96.0B
                         height at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:15                            1   1.03μs    0.0%  1.03μs     96.0B    0.0%    96.0B
                         width at ~/.julia/dev/UnicodePlots.jl/src/canvas.jl:16                             1    868ns    0.0%   868ns     96.0B    0.0%    96.0B
                   transform at ~/.julia/dev/UnicodePlots.jl/src/plot.jl:506                                1   10.7μs    0.0%  10.7μs      240B    0.0%     240B
               next_color! at ~/.julia/dev/UnicodePlots.jl/src/plot.jl:292                                  1   46.6μs    0.0%  46.6μs      560B    0.0%     560B
           split_plot_kw at ~/.julia/dev/UnicodePlots.jl/src/common.jl:624                                  1   92.4μs    0.0%  92.4μs   4.94KiB    0.1%  4.94KiB
             #split_plot_kw#22 at ~/.julia/dev/UnicodePlots.jl/src/common.jl:624                            1   7.95μs    0.0%  7.95μs     0.00B    0.0%    0.00B
 ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

EDIT: awesome, I've already cut down allocations on the example by ~20%.

Regarding keyword arguments, we seem to hit JuliaLabs/Cassette.jl#48 - JuliaLabs/Cassette.jl#152 😢.
Can anyone advise what to do here ?

@t-bltg t-bltg changed the title fix args expansion fix args expansion - add more features Nov 16, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant