diff options
| author | kylo252 <[email protected]> | 2022-10-17 17:29:15 +0200 | 
|---|---|---|
| committer | kylo252 <[email protected]> | 2022-10-17 17:29:15 +0200 | 
| commit | 4ef07315003f723bb8e97d5a91b2bde3773ec1b8 (patch) | |
| tree | e9889a492f76e3f9573228343aaba647dfd48136 /lua/lvim/impatient | |
| parent | e4a5fe97abe500bbbe78fb137d57a59f558da05a (diff) | |
| parent | 6f6cbc394d2a7e64964b6067a2f42d2e6a07824e (diff) | |
Merge remote-tracking branch 'origin/rolling'
Diffstat (limited to 'lua/lvim/impatient')
| -rw-r--r-- | lua/lvim/impatient/profile.lua | 109 | 
1 files changed, 60 insertions, 49 deletions
| diff --git a/lua/lvim/impatient/profile.lua b/lua/lvim/impatient/profile.lua index 0ab04d65..2eafbbf2 100644 --- a/lua/lvim/impatient/profile.lua +++ b/lua/lvim/impatient/profile.lua @@ -1,12 +1,13 @@  local M = {} -local api, uv = vim.api, vim.loop +local sep +if jit.os == "Windows" then +  sep = "\\" +else +  sep = "/" +end -local std_data = vim.fn.stdpath "data" -local std_config = vim.fn.stdpath "config" -local vimruntime = os.getenv "VIMRUNTIME" -local lvim_runtime = get_runtime_dir() -local lvim_config = get_config_dir() +local api, uv = vim.api, vim.loop  local function load_buffer(title, lines)    local bufnr = api.nvim_create_buf(false, false) @@ -19,19 +20,6 @@ local function load_buffer(title, lines)    api.nvim_set_current_buf(bufnr)  end -local function mod_path(path) -  if not path then -    return "?" -  end -  path = path:gsub(std_data .. "/site/pack/packer/", "<PACKER>/") -  path = path:gsub(std_data .. "/", "<STD_DATA>/") -  path = path:gsub(std_config .. "/", "<STD_CONFIG>/") -  path = path:gsub(vimruntime .. "/", "<VIMRUNTIME>/") -  path = path:gsub(lvim_runtime .. "/", "<LVIM_RUNTIME>/") -  path = path:gsub(lvim_config .. "/", "<LVIM_CONFIG>/") -  return path -end -  local function time_tostr(x)    if x == 0 then      return "?" @@ -51,7 +39,7 @@ local function mem_tostr(x)    return string.format("%1.1f%s", x, unit)  end -function M.print_profile(I) +function M.print_profile(I, std_dirs)    local mod_profile = I.modpaths.profile    local chunk_profile = I.chunks.profile @@ -67,42 +55,50 @@ function M.print_profile(I)    for path, m in pairs(chunk_profile) do      m.load = m.load_end - m.load_start      m.load = m.load / 1000000 -    m.path = mod_path(path) +    m.path = path or "?"    end    local module_content_width = 0 +  local unloaded = {} +    for module, m in pairs(mod_profile) do -    m.resolve = 0 -    if m.resolve_end then -      m.resolve = m.resolve_end - m.resolve_start -      m.resolve = m.resolve / 1000000 -    end +    local module_dot = module:gsub(sep, ".") +    m.module = module_dot -    m.module = module:gsub("/", ".") -    m.loader = m.loader or m.loader_guess +    if not package.loaded[module_dot] and not package.loaded[module] then +      unloaded[#unloaded + 1] = m +    else +      m.resolve = 0 +      if m.resolve_start and m.resolve_end then +        m.resolve = m.resolve_end - m.resolve_start +        m.resolve = m.resolve / 1000000 +      end -    local path = I.modpaths.cache[module] -    local path_prof = chunk_profile[path] -    m.path = mod_path(path) +      m.loader = m.loader or m.loader_guess -    if path_prof then -      chunk_profile[path] = nil -      m.load = path_prof.load -      m.ploader = path_prof.loader -    else -      m.load = 0 -      m.ploader = "NA" -    end +      local path = I.modpaths.cache[module] +      local path_prof = chunk_profile[path] +      m.path = path or "?" -    total_resolve = total_resolve + m.resolve -    total_load = total_load + m.load +      if path_prof then +        chunk_profile[path] = nil +        m.load = path_prof.load +        m.ploader = path_prof.loader +      else +        m.load = 0 +        m.ploader = "NA" +      end -    if #module > module_content_width then -      module_content_width = #module -    end +      total_resolve = total_resolve + m.resolve +      total_load = total_load + m.load + +      if #module > module_content_width then +        module_content_width = #module +      end -    modules[#modules + 1] = m +      modules[#modules + 1] = m +    end    end    table.sort(modules, function(a, b) @@ -181,6 +177,12 @@ function M.print_profile(I)    end    add "" +  add "Standard directories:" +  for alias, path in pairs(std_dirs) do +    add("  %-12s -> %s", alias, path) +  end +  add "" +    add("%s─%s┬%s─%s┐", tcwl, lcwl, tcwl, lcwl)    add(title1_fmt, "Resolve", "Load")    add("%s┬%s┼%s┬%s┼%s┬%s", tcwl, lcwl, tcwl, lcwl, mcwl, n) @@ -207,7 +209,17 @@ function M.print_profile(I)        add(f3, p.load, p.loader, p.path)      end      add("%s┴%s┴%s", tcwl, lcwl, n) +  end + +  if #unloaded > 0 then      add "" +    add(n) +    add "Modules which were unable to loaded" +    add(n) +    for _, p in ipairs(unloaded) do +      lines[#lines + 1] = p.module +    end +    add(n)    end    load_buffer("Impatient Profile Report", lines) @@ -216,13 +228,12 @@ end  M.setup = function(profile)    local _require = require -  -- luacheck: ignore 121    require = function(mod) -    local basename = mod:gsub("%.", "/") +    local basename = mod:gsub("%.", sep)      if not profile[basename] then        profile[basename] = {}        profile[basename].resolve_start = uv.hrtime() -      profile[basename].loader_guess = "C" +      profile[basename].loader_guess = ""      end      return _require(mod)    end @@ -232,7 +243,7 @@ M.setup = function(profile)    for i = 1, #pl do      local l = pl[i]      pl[i] = function(mod) -      local basename = mod:gsub("%.", "/") +      local basename = mod:gsub("%.", sep)        profile[basename].loader_guess = i == 1 and "preloader" or "loader #" .. i        return l(mod)      end | 
