vanilla-wow-addons – Rev 1
?pathlinks?
TITAN_PERFORMANCE_ID = "Performance";
TITAN_PERFORMANCE_FREQUENCY = 1;
TITAN_FPS_THRESHOLD_TABLE = {
Values = { 20, 30 },
Colors = { RED_FONT_COLOR, NORMAL_FONT_COLOR, GREEN_FONT_COLOR },
}
TITAN_LATENCY_THRESHOLD_TABLE = {
Values = { PERFORMANCEBAR_LOW_LATENCY, PERFORMANCEBAR_MEDIUM_LATENCY },
Colors = { GREEN_FONT_COLOR, NORMAL_FONT_COLOR, RED_FONT_COLOR },
}
TITAN_MEMORY_RATE_THRESHOLD_TABLE = {
Values = { 1, 2 },
Colors = { GREEN_FONT_COLOR, NORMAL_FONT_COLOR, RED_FONT_COLOR },
}
TITAN_MEMORY_TIMETOGC_THRESHOLD_TABLE = {
Values = { 60, 300 },
Colors = { RED_FONT_COLOR, NORMAL_FONT_COLOR, GREEN_FONT_COLOR },
}
TITAN_MEMORY_MENU_TOGGLE_TABLE = {
"ShowFPS", "ShowLatency", "ShowMemory",
}
function TitanPanelPerformanceButton_OnLoad()
this.registry = {
id = TITAN_PERFORMANCE_ID,
builtIn = 1,
version = TITAN_VERSION,
menuText = TITAN_PERFORMANCE_MENU_TEXT,
buttonTextFunction = "TitanPanelPerformanceButton_GetButtonText";
tooltipCustomFunction = TitanPanelPerformanceButton_SetTooltip;
icon = TITAN_ARTWORK_PATH.."TitanPerformance",
iconWidth = 16,
frequency = TITAN_PERFORMANCE_FREQUENCY,
savedVariables = {
ShowFPS = 1,
ShowLatency = 1,
ShowMemory = 1,
ShowIcon = 1,
ShowLabelText = TITAN_NIL,
ShowColoredText = 1,
}
};
this.fpsSampleCount = 0;
end
function TitanPanelPerformanceButton_GetButtonText(id)
local button = TitanPanelPerformanceButton;
local color, fpsRichText, latencyRichText, memoryRichText;
local showFPS = TitanGetVar(TITAN_PERFORMANCE_ID, "ShowFPS");
local showLatency = TitanGetVar(TITAN_PERFORMANCE_ID, "ShowLatency");
local showMemory = TitanGetVar(TITAN_PERFORMANCE_ID, "ShowMemory");
-- Update real time data
TitanPanelPerformanceButton_UpdateData()
-- FPS text
if ( showFPS ) then
local fpsText = format(TITAN_FPS_FORMAT, button.fps);
if ( TitanGetVar(TITAN_PERFORMANCE_ID, "ShowColoredText") ) then
color = TitanUtils_GetThresholdColor(TITAN_FPS_THRESHOLD_TABLE, button.fps);
fpsRichText = TitanUtils_GetColoredText(fpsText, color);
else
fpsRichText = TitanUtils_GetHighlightText(fpsText);
end
end
-- Latency text
if ( showLatency ) then
local latencyText = format(TITAN_LATENCY_FORMAT, button.latency);
if ( TitanGetVar(TITAN_PERFORMANCE_ID, "ShowColoredText") ) then
color = TitanUtils_GetThresholdColor(TITAN_LATENCY_THRESHOLD_TABLE, button.latency);
latencyRichText = TitanUtils_GetColoredText(latencyText, color);
else
latencyRichText = TitanUtils_GetHighlightText(latencyText);
end
end
-- Memory text
if ( showMemory ) then
local memoryText = format(TITAN_MEMORY_FORMAT, button.memory/1024);
memoryRichText = TitanUtils_GetHighlightText(memoryText);
end
if ( showFPS ) then
if ( showLatency ) then
if ( showMemory ) then
return TITAN_FPS_BUTTON_LABEL, fpsRichText, TITAN_LATENCY_BUTTON_LABEL, latencyRichText, TITAN_MEMORY_BUTTON_LABEL, memoryRichText;
else
return TITAN_FPS_BUTTON_LABEL, fpsRichText, TITAN_LATENCY_BUTTON_LABEL, latencyRichText;
end
else
if ( showMemory ) then
return TITAN_FPS_BUTTON_LABEL, fpsRichText, TITAN_MEMORY_BUTTON_LABEL, memoryRichText;
else
return TITAN_FPS_BUTTON_LABEL, fpsRichText;
end
end
else
if ( showLatency ) then
if ( showMemory ) then
return TITAN_LATENCY_BUTTON_LABEL, latencyRichText, TITAN_MEMORY_BUTTON_LABEL, memoryRichText;
else
return TITAN_LATENCY_BUTTON_LABEL, latencyRichText;
end
else
if ( showMemory ) then
return TITAN_MEMORY_BUTTON_LABEL, memoryRichText;
else
return;
end
end
end
end
function TitanPanelPerformanceButton_SetTooltip()
local showFPS = TitanGetVar(TITAN_PERFORMANCE_ID, "ShowFPS");
local showLatency = TitanGetVar(TITAN_PERFORMANCE_ID, "ShowLatency");
local showMemory = TitanGetVar(TITAN_PERFORMANCE_ID, "ShowMemory");
-- Tooltip title
GameTooltip:SetText(TITAN_PERFORMANCE_TOOLTIP, HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b);
-- FPS tooltip
if ( showFPS ) then
local fpsText = format(TITAN_FPS_FORMAT, this.fps);
local avgFPSText = format(TITAN_FPS_FORMAT, this.avgFPS);
local minFPSText = format(TITAN_FPS_FORMAT, this.minFPS);
local maxFPSText = format(TITAN_FPS_FORMAT, this.maxFPS);
GameTooltip:AddLine("\n");
GameTooltip:AddLine(TitanUtils_GetHighlightText(TITAN_FPS_TOOLTIP));
GameTooltip:AddDoubleLine(TITAN_FPS_TOOLTIP_CURRENT_FPS, TitanUtils_GetHighlightText(fpsText));
GameTooltip:AddDoubleLine(TITAN_FPS_TOOLTIP_AVG_FPS, TitanUtils_GetHighlightText(avgFPSText));
GameTooltip:AddDoubleLine(TITAN_FPS_TOOLTIP_MIN_FPS, TitanUtils_GetHighlightText(minFPSText));
GameTooltip:AddDoubleLine(TITAN_FPS_TOOLTIP_MAX_FPS, TitanUtils_GetHighlightText(maxFPSText));
end
-- Latency tooltip
if ( showLatency ) then
local latencyText = format(TITAN_LATENCY_FORMAT, this.latency);
local bandwidthInText = format(TITAN_LATENCY_BANDWIDTH_FORMAT, this.bandwidthIn);
local bandwidthOutText = format(TITAN_LATENCY_BANDWIDTH_FORMAT, this.bandwidthOut);
GameTooltip:AddLine("\n");
GameTooltip:AddLine(TitanUtils_GetHighlightText(TITAN_LATENCY_TOOLTIP));
GameTooltip:AddDoubleLine(TITAN_LATENCY_TOOLTIP_LATENCY, TitanUtils_GetHighlightText(latencyText));
GameTooltip:AddDoubleLine(TITAN_LATENCY_TOOLTIP_BANDWIDTH_IN, TitanUtils_GetHighlightText(bandwidthInText));
GameTooltip:AddDoubleLine(TITAN_LATENCY_TOOLTIP_BANDWIDTH_OUT, TitanUtils_GetHighlightText(bandwidthOutText));
end
-- Memory tooltip
if ( showMemory ) then
local memoryText = format(TITAN_MEMORY_FORMAT, this.memory/1024);
local initialMemoryText = format(TITAN_MEMORY_FORMAT, this.initialMemory/1024);
local gcThresholdText = format(TITAN_MEMORY_FORMAT, this.gcThreshold/1024);
local sessionTime = TitanUtils_GetSessionTime() - this.startSessionTime;
local rateRichText, timeToGCRichText, rate, timeToGC, color;
if ( sessionTime == 0 ) then
rateRichText = TitanUtils_GetHighlightText("N/A");
else
rate = (this.memory - this.initialMemory) / sessionTime;
color = TitanUtils_GetThresholdColor(TITAN_MEMORY_RATE_THRESHOLD_TABLE, rate);
rateRichText = TitanUtils_GetColoredText(format(TITAN_MEMORY_RATE_FORMAT, rate), color);
end
if ( this.memory == this.initialMemory ) then
timeToGCRichText = TitanUtils_GetHighlightText("N/A");
else
timeToGC = (this.gcThreshold - this.memory) / (this.memory - this.initialMemory) * sessionTime;
color = TitanUtils_GetThresholdColor(TITAN_MEMORY_TIMETOGC_THRESHOLD_TABLE, timeToGC);
timeToGCRichText = TitanUtils_GetColoredText(TitanUtils_GetAbbrTimeText(timeToGC), color);
end
GameTooltip:AddLine("\n");
GameTooltip:AddLine(TitanUtils_GetHighlightText(TITAN_MEMORY_TOOLTIP));
GameTooltip:AddDoubleLine(TITAN_MEMORY_TOOLTIP_CURRENT_MEMORY, TitanUtils_GetHighlightText(memoryText));
GameTooltip:AddDoubleLine(TITAN_MEMORY_TOOLTIP_INITIAL_MEMORY, TitanUtils_GetHighlightText(initialMemoryText));
GameTooltip:AddDoubleLine(TITAN_MEMORY_TOOLTIP_INCREASING_RATE, rateRichText);
GameTooltip:AddLine("\n");
GameTooltip:AddLine(TitanUtils_GetHighlightText(TITAN_MEMORY_TOOLTIP_GC_INFO));
GameTooltip:AddDoubleLine(TITAN_MEMORY_TOOLTIP_GC_THRESHOLD, TitanUtils_GetHighlightText(gcThresholdText));
GameTooltip:AddDoubleLine(TITAN_MEMORY_TOOLTIP_TIME_TO_GC, timeToGCRichText);
end
end
function TitanPanelRightClickMenu_PreparePerformanceMenu()
TitanPanelRightClickMenu_AddTitle(TitanPlugins[TITAN_PERFORMANCE_ID].menuText);
TitanPanelRightClickMenu_AddToggleVar(TITAN_PERFORMANCE_MENU_SHOW_FPS, TITAN_PERFORMANCE_ID, "ShowFPS");
TitanPanelRightClickMenu_AddToggleVar(TITAN_PERFORMANCE_MENU_SHOW_LATENCY, TITAN_PERFORMANCE_ID, "ShowLatency");
TitanPanelRightClickMenu_AddToggleVar(TITAN_PERFORMANCE_MENU_SHOW_MEMORY, TITAN_PERFORMANCE_ID, "ShowMemory");
TitanPanelRightClickMenu_AddSpacer();
TitanPanelRightClickMenu_AddToggleIcon(TITAN_PERFORMANCE_ID);
TitanPanelRightClickMenu_AddToggleLabelText(TITAN_PERFORMANCE_ID);
TitanPanelRightClickMenu_AddToggleColoredText(TITAN_PERFORMANCE_ID);
TitanPanelRightClickMenu_AddSpacer();
TitanPanelRightClickMenu_AddCommand(TITAN_PANEL_MENU_HIDE, TITAN_PERFORMANCE_ID, TITAN_PANEL_MENU_FUNC_HIDE);
end
function TitanPanelPerformanceButton_UpdateData()
local button = TitanPanelPerformanceButton;
local showFPS = TitanGetVar(TITAN_PERFORMANCE_ID, "ShowFPS");
local showLatency = TitanGetVar(TITAN_PERFORMANCE_ID, "ShowLatency");
local showMemory = TitanGetVar(TITAN_PERFORMANCE_ID, "ShowMemory");
-- FPS Data
if ( showFPS ) then
button.fps = GetFramerate();
button.fpsSampleCount = button.fpsSampleCount + 1;
if (button.fpsSampleCount == 1) then
button.minFPS = button.fps;
button.maxFPS = button.fps;
button.avgFPS = button.fps;
else
if (button.fps < button.minFPS) then
button.minFPS = button.fps;
elseif (button.fps > button.maxFPS) then
button.maxFPS = button.fps;
end
button.avgFPS = (button.avgFPS * (button.fpsSampleCount - 1) + button.fps) / button.fpsSampleCount;
end
end
-- Latency Data
if ( showLatency ) then
button.bandwidthIn, button.bandwidthOut, button.latency = GetNetStats();
end
-- Memory data
if ( showMemory ) then
local previousMemory = button.memory;
button.memory, button.gcThreshold = gcinfo();
if ( not button.startSessionTime ) then
-- Initial data
button.startSessionTime = TitanUtils_GetSessionTime();
button.initialMemory = button.memory;
elseif (previousMemory and button.memory and previousMemory > button.memory) then
-- Reset data after garbage collection
button.startSessionTime = TitanUtils_GetSessionTime();
button.initialMemory = button.memory;
end
end
end
function TitanPanelPerformanceButton_ResetMemory()
local button = TitanPanelPerformanceButton;
button.memory, button.gcThreshold = gcinfo();
button.initialMemory = button.memory;
button.startSessionTime = TitanUtils_GetSessionTime();
end