feat: add profiling support with environment variable configuration

This commit is contained in:
2024-08-28 06:35:28 -04:00
parent 40ad835130
commit 96a309216d
2 changed files with 63 additions and 0 deletions
+16
View File
@@ -51,6 +51,9 @@
-- ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
-- The rootiest NeoVim configuration!
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ OPTIONS ━━━━━━━━━━━━━━━━━━━━━━━━━━━
-- Options are configured in the lua/config/options.lua file
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ROOTIEST ━━━━━━━━━━━━━━━━━━━━━━━━━━━
-- Rootiest Configuration
require("config.rootiest").setup()
@@ -62,3 +65,16 @@ require("config.lazy")
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ROCKS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-- Load LuaRocks package manager and plugins
require("config.rocks")
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ PROFILING ━━━━━━━━━━━━━━━━━━━━━━━━━━
-- Load profiling package
require("config.profile")
-- Profiling options: Set by environment variable
-- ──────────────────────────────────────────────────────────────────────
-- NVIM_PROFILE=1 Start profiling at startup
-- NVIM_PROFILE_MODILE="lualine" Set profiling target to lualine
-- ──────────────────────────────────────────────────────────────────────
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ KEYMAPS ━━━━━━━━━━━━━━━━━━━━━━━━━━━
-- Keymaps are configured in the lua/config/keymaps.lua file
+47
View File
@@ -0,0 +1,47 @@
-- ╭─────────────────────────────────────────────────────────╮
-- │ PROFILER │
-- ╰─────────────────────────────────────────────────────────╯
-- Check if the environment variable is set
local should_profile = os.getenv("NVIM_PROFILE")
local profile_module = os.getenv("NVIM_PROFILE_MODULE") or "*"
-- Start the profiler
if should_profile then
require("profile").instrument_autocmds()
if should_profile:lower():match("^start") then
require("profile").start(profile_module)
else
require("profile").instrument(profile_module)
end
end
-- Function to toggle the profiler
local function toggle_profile()
local prof = require("profile")
if prof.is_recording() then
prof.stop()
vim.ui.input({
prompt = "Save profile to:",
completion = "file",
default = "profile.json",
}, function(filename)
if filename then
prof.export(filename)
vim.notify(string.format("Wrote %s", filename))
end
end)
else
prof.start(profile_module)
end
end
-- Add the keybind to toggle the profiler
require("data").func.add_keymap("<leader>d<f1>", function()
local prof_name = profile_module
if profile_module == "*" then
prof_name = "all"
end
print("Profiling module: " .. prof_name)
toggle_profile()
end, "Toggle Profiler")