[lua] Garbage

» опубликован
» Способ реализации: Lua
» Тип: Наработка
» Версия Warcraft: 1.31+
Показывает текущее потребление памяти lua и позволяет вызывать collectgarbage из чата. Единицы измерения Kb.
Настройка
local IS_VISIBLE = true -- is visible on map start
Вызов функции: -garbage <argument>
  • show - показывает фрэйм
  • hide - скрывает фрэйм
  • collect - запускает сборщик мусора
  • stop - останавливает сборщик мусора
  • restart - перезапускает сборщик мусора
  • count - выводит в чат текущее значение потребления памяти
  • isrunning - выводит в чат запущен ли сборщик
» Код
---@author https://xgm.guru/p/wc3/garbage
do
	local IS_VISIBLE        = true -- is visible on map start
	
	local InitGlobalsOrigin = InitGlobals
	function InitGlobals()
		InitGlobalsOrigin()
		
		local GAME = BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0)
		local menu = BlzCreateFrame('LoadingPlayerSlot', GAME, 0, 0)
		BlzFrameSetSize(menu, 0.256, 0.0217)
		BlzFrameSetPoint(menu, FRAMEPOINT_BOTTOM, GAME, FRAMEPOINT_BOTTOM, 0, 0.16)
		BlzFrameSetVisible(menu, IS_VISIBLE)
		
		local left  = BlzGetFrameByName('LoadingPlayerSlotName', 0)
		local right = BlzGetFrameByName('LoadingPlayerSlotRace', 0)
		BlzFrameSetVisible(BlzGetFrameByName('LoadingPlayerSlotReadyHighlight', 0), true)
		
		local ChatTrigger = CreateTrigger()
		for i = 0, bj_MAX_PLAYER_SLOTS - 1 do
			TriggerRegisterPlayerChatEvent(ChatTrigger, Player(i), '-', false)
		end
		
		TriggerAddAction(ChatTrigger, function()
			local param = {}
			for w in GetEventPlayerChatString():gmatch('[^%%s]+') do
				table.insert(param, w)
			end
			if param[1] ~= '-garbage' then return end
			local arg = param[2]
			if arg == 'collect' or arg == 'stop' or arg == 'restart' then
				print('collectgarbage(' .. arg .. ')')
				collectgarbage(arg)
			elseif arg == 'count' or arg == 'isrunning' or arg == 'step' then
				print('collectgarbage(' .. arg .. ') -->', collectgarbage(arg))
			elseif arg == 'show' then
				BlzFrameSetVisible(menu, true)
			elseif arg == 'hide' then
				BlzFrameSetVisible(menu, false)
			end
		end)
		
		local t = CreateTimer()
		TimerStart(t, 0.025, true, function()
			BlzFrameSetText(left, math.ceil(collectgarbage('count')))
			BlzFrameSetText(right, math.ceil(os.clock()))
		end)
	end
end


Просмотров: 191

» Лучшие комментарии


prog #1 - 2 недели назад 3
Красота. Еще бы возможность скрыть и показать фрейм командой и константу для изменения стартового состояния фрейма - чтобы не надо было код убирать когда фрейм не нужен.
Bergi_Bear #2 - 2 недели назад 0
Гратц, вот и хендел каунтер 131
Только я так и не понял, что за память он считает? чисто память потребления луа без учета вариковской? варик же 130 метров минимум кушает, а тут 1,5 метра всего
prog #3 - 2 недели назад 0
Bergi_Bear, Только память занятая луа - у луа нет доступа к информации о какой-то другой памяти.
NazarPunk #4 - 2 недели назад 0
Еще бы возможность скрыть и показать фрейм командой и константу для изменения стартового состояния фрейма - чтобы не надо было код убирать когда фрейм не нужен.
Придумаешь красивые имена к -garbage <argument>, запилю))
Bergi_Bear #5 - 2 недели назад 0
Придумаешь красивые имена к -garbage <argument>, запилю))
-garbage show
-garbage hide
pro100master #6 - 2 недели назад 0
-garbage install express mysql
NazarPunk #7 - 2 недели назад 0
-garbage show
-garbage hide
Обновил версию.

Заметил, что если выводить округлённое значение
math.ceil(collectgarbage('count'))
то память перестаёт расти.
pro100master #8 - 2 недели назад 0
NazarPunk, он у тя там для всех игроков скрывает и показывает мб добавить GetLocal и кто вел тому и скрываем =) не будет десинх!
и не нужен локал IS_VISIBLE достаточно узнать фрейм видим или нет от игрока тоже пашет!
NazarPunk #9 - 2 недели назад 2
добавить GetLocal
Зачем, если это код ля дебага?
и не нужен локал IS_VISIBLE достаточно узнать фрейм видим или нет от игрока тоже пашет!
Эта переменная не за это отвечает
local IS_VISIBLE = true -- is visible on map start