profiler.nvim icon indicating copy to clipboard operation
profiler.nvim copied to clipboard

Usage:

luafile /home/ashkan/works/profiler.nvim/lua/profiler.lua
lua require 'init'

sets a global function WRAP(fn) which wraps a function to be timed or M(name, fn, ...) which executes the function with the name.

By default, require will be wrapped.

Now run env AK_PROFILER=1 nvim 2>&1 >/dev/null | less

Here's what it could produce:

root(): infms (0.000000 -> inf)
  require("init"): 93.3103ms (0.028835 -> 93.339106)
    require("init/prelude"): 0.594505ms (0.206642 -> 0.801147)
      require("shims"): 0.140296ms (0.525094 -> 0.665390)
    require("bookmarks"): 0.778714ms (0.802570 -> 1.581284)
      require("cjson"): 0.268398ms (0.906176 -> 1.174574)
      require("path"): 0.293506ms (1.177219 -> 1.470725)
        require("luv"): 0.001423ms (1.412254 -> 1.413677)
        require("flatten"): 0.038032ms (1.414759 -> 1.452791)
      require("cjson"): 0.001122ms (1.559583 -> 1.560705)
    require("nvim_utils"): 0.63387ms (1.582075 -> 2.215945)
      require("bit"): 0.001262ms (2.212379 -> 2.213641)
    all(): 91.1139ms (2.223770 -> 93.337643)
      require("init/settings"): 0.422019ms (2.224572 -> 2.646591)
      plugins(): 61.2789ms (2.654405 -> 63.933269)
        require("init/plugins"): 6.33917ms (2.655477 -> 8.994648)
          require("vim.uri"): 0.214706ms (3.158089 -> 3.372795)
            require("bit"): 0.001382ms (3.368688 -> 3.370070)
          require("vim.lsp"): 5.55751ms (3.373587 -> 8.931098)
            require("vim.lsp.callbacks"): 3.50985ms (4.662387 -> 8.172241)
              require("vim.lsp.log"): 0.210649ms (5.060070 -> 5.270719)
              require("vim.lsp.protocol"): 0.710224ms (5.271971 -> 5.982195)
              require("vim.lsp.util"): 1.83278ms (5.983748 -> 7.816528)
                require("vim.lsp.protocol"): 0.001563ms (7.413024 -> 7.414587)
                require("vim.highlight"): 0.148131ms (7.415889 -> 7.564020)
              require("vim.lsp.buf"): 0.341386ms (7.817790 -> 8.159176)
                require("vim.lsp.util"): 0.001283ms (8.150580 -> 8.151863)
            require("vim.lsp.log"): 0.000691ms (8.172953 -> 8.173644)
            require("vim.lsp.rpc"): 0.646043ms (8.174235 -> 8.820278)
              require("vim.lsp.log"): 0.001543ms (8.799539 -> 8.801082)
              require("vim.lsp.protocol"): 0.000642ms (8.802013 -> 8.802655)
            require("vim.lsp.protocol"): 0.000632ms (8.821059 -> 8.821691)
            require("vim.lsp.util"): 0.000531ms (8.822292 -> 8.822823)
            require("vim.lsp.buf"): 0.000491ms (8.823895 -> 8.824386)
        require("plug"): 0.239634ms (8.996972 -> 9.236606)
          require("path"): 0.001403ms (9.233129 -> 9.234532)
      require("colorizer"): 1.33796ms (64.647842 -> 65.985805)
        require("colorizer/nvim"): 0.176905ms (65.344040 -> 65.520945)
        require("colorizer/trie"): 0.303284ms (65.522538 -> 65.825822)
          require("ffi"): 0.014798ms (65.684224 -> 65.699022)
        require("bit"): 0.000571ms (65.826563 -> 65.827134)
        require("ffi"): 0.000381ms (65.827565 -> 65.827946)
      require("base16"): 1.45858ms (67.734785 -> 69.193367)
      require("path"): 0.000752ms (69.205339 -> 69.206091)
      require("path"): 0.000511ms (69.217863 -> 69.218374)
      require("base16"): 0.000942ms (69.883533 -> 69.884475)
      require("popterm"): 0.712138ms (72.150004 -> 72.862142)
        require("popterm.nvim"): 0.23254ms (72.529001 -> 72.761541)
      require("nav"): 0.48612ms (72.863184 -> 73.349304)
        require("luv"): 0.000952ms (73.285984 -> 73.286936)
        require("buffer_manager"): 0.047791ms (73.288719 -> 73.336510)
        require("colorizer"): 0.000531ms (73.342341 -> 73.342872)
      require("init/lsp"): 1.87781ms (73.418766 -> 75.296581)
        require("nvim_utils"): 0.000741ms (73.587776 -> 73.588517)
        require("nvim_lsp"): 0.661482ms (73.597975 -> 74.259457)
          require("nvim_lsp/configs"): 0.5547ms (73.702052 -> 74.256752)
            require("nvim_lsp/util"): 0.333752ms (73.896530 -> 74.230282)
          require("nvim_lsp/util"): 0.000571ms (74.257584 -> 74.258155)
        require("nvim_lsp/pyls"): 0.071736ms (74.261040 -> 74.332776)
          require("nvim_lsp/configs"): 0.0005ms (74.320914 -> 74.321414)
        require("nvim_lsp/julials"): 0.108515ms (74.357383 -> 74.465898)
          require("nvim_lsp/configs"): 0.000601ms (74.434148 -> 74.434749)
          require("nvim_lsp/util"): 0.00029ms (74.435230 -> 74.435520)
        require("nvim_lsp/texlab"): 0.112523ms (74.506635 -> 74.619158)
          require("nvim_lsp/configs"): 0.000681ms (74.601565 -> 74.602246)
          require("nvim_lsp/util"): 0.000361ms (74.602707 -> 74.603068)
        require("nvim_lsp/gopls"): 0.06855ms (74.640659 -> 74.709209)
          require("nvim_lsp/configs"): 0.000631ms (74.698438 -> 74.699069)
          require("nvim_lsp/util"): 0.000391ms (74.699590 -> 74.699981)
        require("nvim_lsp/clangd"): 0.105459ms (74.739326 -> 74.844785)
          require("nvim_lsp/configs"): 0.000711ms (74.829376 -> 74.830087)
          require("nvim_lsp/util"): 0.000331ms (74.831059 -> 74.831390)
        require("nvim_lsp/rust_analyzer"): 0.070934ms (74.868390 -> 74.939324)
          require("nvim_lsp/configs"): 0.000621ms (74.927502 -> 74.928123)
          require("nvim_lsp/util"): 0.000381ms (74.928654 -> 74.929035)
        require("nvim_lsp/tsserver"): 0.112342ms (74.977567 -> 75.089909)
          require("nvim_lsp/configs"): 0.000622ms (75.062467 -> 75.063089)
          require("nvim_lsp/util"): 0.00047ms (75.063600 -> 75.064070)
        require("nvim_lsp/elmls"): 0.147559ms (75.131849 -> 75.279408)
          require("nvim_lsp/configs"): 0.000731ms (75.225977 -> 75.226708)
          require("nvim_lsp/util"): 0.000371ms (75.227229 -> 75.227600)
      require("init/commands"): 0.346436ms (75.297382 -> 75.643818)
        require("nvim_utils"): 0.000822ms (75.502320 -> 75.503142)
        require("path"): 0.00036ms (75.503703 -> 75.504063)
        require("base16"): 0.000441ms (75.515575 -> 75.516016)
        require("bit"): 0.000461ms (75.517789 -> 75.518250)
      require("init/events"): 4.01516ms (75.644650 -> 79.659810)
        require("nvim_utils"): 0.000871ms (76.077319 -> 76.078190)
        require("events"): 0.617219ms (76.078831 -> 76.696050)
          require("trie"): 0.186813ms (76.203658 -> 76.390471)
            require("ffi"): 0.000682ms (76.384570 -> 76.385252)
        require("ftdetect"): 0.070203ms (76.729082 -> 76.799285)
          require("trie"): 0.000651ms (76.781692 -> 76.782343)
        require("init/filetype_hooks"): 0.377935ms (76.914053 -> 77.291988)
          require("nvim_utils"): 0.000892ms (77.287499 -> 77.288391)
        require("init/syn"): 2.08064ms (77.309952 -> 79.390591)
          require("nvim"): 0.305989ms (78.369778 -> 78.675767)
          require("synbuf"): 0.245004ms (78.676609 -> 78.921613)
          require("nvim_utils"): 0.000541ms (78.922414 -> 78.922955)
          require("splitter"): 0.064813ms (78.923376 -> 78.988189)
          require("maker"): 0.393826ms (78.988800 -> 79.382626)
            require("spawn"): 0.117462ms (79.261767 -> 79.379229)
            require("synbuf"): 0.000481ms (79.380812 -> 79.381293)
          require("path"): 0.000351ms (79.382986 -> 79.383337)
          require("spawn"): 0.0003ms (79.383748 -> 79.384048)
          require("colorizer"): 0.00038ms (79.388487 -> 79.388867)
      require("init/snippets"): 7.49855ms (79.660912 -> 87.159457)
        require("path"): 0.000781ms (79.845452 -> 79.846233)
        require("luv"): 0.000461ms (79.846894 -> 79.847355)
        require("snippets.utils"): 0.94581ms (79.847686 -> 80.793496)
          require("snippets.common"): 0.3381ms (79.990536 -> 80.328636)
            require("snippets.validate"): 0.075904ms (80.248855 -> 80.324759)
          require("snippets.parser"): 0.261034ms (80.329147 -> 80.590181)
            require("snippets.common"): 0.000862ms (80.522814 -> 80.523676)
            require("snippets.splitter"): 0.064201ms (80.524277 -> 80.588478)
          require("snippets.nvim"): 0.200199ms (80.590642 -> 80.790841)
        require("snippets.common"): 0.000531ms (80.794017 -> 80.794548)
        require("snippets"): 0.427449ms (80.796041 -> 81.223490)
          require("snippets.parser"): 0.000691ms (80.945464 -> 80.946155)
          require("snippets.inserters.floaty"): 0.271284ms (80.946726 -> 81.218010)
            require("snippets.common"): 0.000862ms (81.212820 -> 81.213682)
            require("snippets.nvim"): 0.000421ms (81.214293 -> 81.214714)
          require("snippets.common"): 0.000451ms (81.218451 -> 81.218902)
          require("snippets.nvim"): 0.000401ms (81.219162 -> 81.219563)
          require("snippets.utils"): 0.000431ms (81.221927 -> 81.222358)
        require("once"): 0.33839ms (83.384371 -> 83.722761)
        require("snippets"): 0.001303ms (86.447349 -> 86.448652)
        require("snippets"): 0.000651ms (86.782574 -> 86.783225)
      require("init/mappings"): 2.06335ms (87.160649 -> 89.223995)
        require("nvim_utils"): 0.000952ms (88.254630 -> 88.255582)
        require("utils"): 0.099829ms (88.256935 -> 88.356764)
        require("init/actions"): 0.212351ms (88.363016 -> 88.575367)
          require("nvim_utils"): 0.000812ms (88.571390 -> 88.572202)
        require("path"): 0.000401ms (88.575868 -> 88.576269)
        require("snippets"): 0.000802ms (88.818187 -> 88.818989)
        require("init/text_objects"): 0.227421ms (88.819710 -> 89.047131)
          require("nvim_utils"): 0.000762ms (89.038604 -> 89.039366)
          require("nvim"): 0.000341ms (89.039997 -> 89.040338)
        require("snippets"): 0.001112ms (89.047702 -> 89.048814)
        require("snippets"): 0.00033ms (89.049205 -> 89.049535)
        require("popterm"): 0.00034ms (89.052972 -> 89.053312)
        require("popterm"): 0.00027ms (89.053603 -> 89.053873)
        require("tmux"): 0.055435ms (89.166637 -> 89.222072)
  require("nvim_lsp"): 0.000982ms (94.236785 -> 94.237767)
  require("events"): 0.001844ms (125.774718 -> 125.776562)
  require("rooter"): 0.330696ms (125.811748 -> 126.142444)
    require("nvim_utils"): 0.001362ms (126.136473 -> 126.137835)
    require("path"): 0.000802ms (126.138807 -> 126.139609)
  require("ftdetect"): 0.000952ms (126.165007 -> 126.165959)