136 lines
4.8 KiB
Lua
136 lines
4.8 KiB
Lua
require("Libs/Library")
|
|
local multi = require("multi")
|
|
local bin = require("bin")
|
|
GLOBAL,sThread = require("multi.integration.loveManager").init()
|
|
require("GuiManager")
|
|
require("parseManager")
|
|
--VNCore = require("VNCore").init(gui:newFullFrame("Main"), parseManager, multi)
|
|
--debug = require("VNCore.debug")
|
|
|
|
win = gui:newWindow("Taskmanager",500,20)
|
|
test = win:newTabMenu(0,0,500,600)
|
|
test:setTabHeight(30)
|
|
local tasks, tasks_b = test:addTab("Tasks",Color.new(60,60,60), Color.new(80,80,80))
|
|
threads,threads_b = test:addTab("Threads",Color.new(60,60,60), Color.new(80,80,80))
|
|
sthreads,sthreads_b = test:addTab("SThreads",Color.new(60,60,60), Color.new(80,80,80))
|
|
details,details_b = test:addTab("Details",Color.new(60,60,60), Color.new(80,80,80))
|
|
local ST_Menu = sthreads:newScrollMenu("System Threads")
|
|
local T_Menu = threads:newScrollMenu("Threads")
|
|
local TASKS_Menu = tasks:newScrollMenu("Tasks")
|
|
--local DETAILS_Menu -- We need to manage this one a bit differently
|
|
refFrame = gui:newFrame("Reference Object"):asRef() -- Makes cloning an object seamless, since we set this as an object we expect to be cloned
|
|
refFrame.ItemName = refFrame:newTextLabel("Item Name","Item Name",5,3,0,19)
|
|
refFrame.ItemName:widthToTextSize()
|
|
refFrame.ItemPR = refFrame.ItemName:newTextLabel("Running","Running",5,0,0,0,1,0,0,1) -- Doubles as Resume thread as well
|
|
refFrame.ItemPR:widthToTextSize()
|
|
refFrame.ItemKill = refFrame.ItemPR:newTextLabel("Kill","Kill",5,0,0,0,1,0,0,1) -- Doubles as Resume thread as well
|
|
refFrame.ItemKill:widthToTextSize()
|
|
refFrame.ItemUpTime = refFrame.ItemKill:newTextLabel("Uptime","Uptime",5,0,0,0,1,0,0,1) -- Doubles as Resume thread as well
|
|
refFrame.ItemUpTime:widthToTextSize()
|
|
local function pr(b,self)
|
|
if self.GLink:isPaused() then
|
|
self.text = "Running"
|
|
self:widthToTextSize()
|
|
self.GLink:Resume()
|
|
else
|
|
self.text = "Paused"
|
|
self:widthToTextSize()
|
|
self.GLink:Pause()
|
|
end
|
|
end
|
|
local function kill(b,self)
|
|
self.GLink:Destroy()
|
|
end
|
|
--temp:setRef{
|
|
-- [[fitFont()]],
|
|
--}
|
|
|
|
--ST_Menu:addItem("System Threads "..i, 25, 1,refFrame:clone())
|
|
--T_Menu:addItem("Threads "..i, 25, 1,refFrame:clone())
|
|
--
|
|
local listref = {
|
|
["ProcessName"] = true,
|
|
["CyclesPerSecondPerTask"] = true,
|
|
["MemoryUsage"] = true,
|
|
["ThreadCount"] = true,
|
|
["SystemLoad"] = true,
|
|
["PriorityScheme"] = true,
|
|
["SystemThreadCount"] = true,
|
|
_Tasks = {},
|
|
_Threads = {},
|
|
_SystemThreads = {},
|
|
}
|
|
function table.sync(a,b)
|
|
for i,v in pairs(b) do
|
|
if a[i] then
|
|
a[i] = v
|
|
end
|
|
end
|
|
end
|
|
multi:newThread("Updater",function()
|
|
while true do
|
|
local taskslist = multi:getTasksDetails("t")
|
|
table.sync(listref,taskslist) -- Managing details
|
|
thread.sleep(.1)
|
|
for i=1,#taskslist.Tasks do
|
|
if not listref._Tasks[taskslist.Tasks[i].TID] then
|
|
local ref = TASKS_Menu:addItem("Tasks "..i, 25, 1,refFrame:clone())
|
|
ref.GLink = taskslist.Tasks[i].Link
|
|
ref.ItemKill:OnReleased(kill)
|
|
ref.ItemKill.GLink = ref.GLink
|
|
ref.ItemPR:OnReleased(pr)
|
|
ref.ItemPR.GLink = ref.GLink
|
|
listref._Tasks[taskslist.Tasks[i].TID] = {ref,taskslist.Tasks[i].Link}
|
|
ref.ItemName.text = taskslist.Tasks[i].Name
|
|
ref.ItemName:widthToTextSize()
|
|
ref.ItemUpTime.text = "Uptime: "..taskslist.Tasks[i].Uptime
|
|
ref.ItemUpTime:widthToTextSize()
|
|
elseif listref._Tasks[taskslist.Tasks[i].TID] then
|
|
-- Update whats already there
|
|
listref._Tasks[taskslist.Tasks[i].TID][1].ItemUpTime.text = taskslist.Tasks[i].Priority.." | "..taskslist.Tasks[i].Type.." | "..taskslist.Tasks[i].Uptime
|
|
listref._Tasks[taskslist.Tasks[i].TID][1].ItemUpTime:widthToTextSize()
|
|
end
|
|
end
|
|
for i,v in pairs(listref._Tasks) do
|
|
if v[2].Destroyed then
|
|
TASKS_Menu:removeItem(v[1])
|
|
listref._Tasks[i] = nil
|
|
end
|
|
end
|
|
for i=1,#taskslist.Threads do
|
|
if not listref._Threads[taskslist.Threads[i].TID] then
|
|
local ref = T_Menu:addItem("Tasks "..i, 25, 1,refFrame:clone())
|
|
ref.GLink = taskslist.Threads[i].Link
|
|
ref.ItemKill:OnReleased(kill)
|
|
ref.ItemKill.GLink = ref.GLink
|
|
ref.ItemPR:OnReleased(pr)
|
|
ref.ItemPR.GLink = ref.GLink
|
|
listref._Threads[taskslist.Threads[i].TID] = {ref,taskslist.Threads[i].Link}
|
|
ref.ItemName.text = taskslist.Threads[i].Name
|
|
ref.ItemName:widthToTextSize()
|
|
ref.ItemUpTime.text = "Uptime: "..taskslist.Threads[i].Uptime
|
|
ref.ItemUpTime:widthToTextSize()
|
|
elseif listref._Threads[taskslist.Threads[i].TID] then
|
|
if taskslist.Tasks[i] then
|
|
listref._Threads[taskslist.Threads[i].TID][1].ItemUpTime.text = "Uptime: "..taskslist.Tasks[i].Uptime
|
|
listref._Threads[taskslist.Threads[i].TID][1].ItemUpTime:widthToTextSize()
|
|
end
|
|
end
|
|
end
|
|
for i,v in pairs(listref._Tasks) do
|
|
if v[2].Destroyed then
|
|
TASKS_Menu:removeItem(v[1])
|
|
listref._Tasks[i] = nil
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
settings = {protect = true,priority = 2}
|
|
function love.update()
|
|
multi:uManager(settings)
|
|
end
|
|
|
|
multi.OnError(function(...)
|
|
print(...)
|
|
end)
|