GeminiProfiler

957 Downloads

Please do not hesitate to give feedback, even if that feedback consists of negative comments :)


Instructions:

  1. Type /profiler to open the profiler
  2. Click the On/Off button in the upper right
  3. Do stuff
  4. Click the On/Off button again to stop profiling
  5. Figure out what needs optimization
  6. ....
  7. Profit!
Options:
  • Exclude Carbine Addons
    • Hides Carbine Addons from profile results
  • Filename and Function name filters
    • Can be set by right clicking in the table or via the options pane
    • Uses string.find so you can use lua patterns.
    • Please note this only filters the collected data it does not change what is collected.
  • Function Inspection
    • Show the calling functions for the inspected function
    • Right click a function name to set inspection or enter it in the upper left edit box
    • Eye turns gold when a function is an inspection target
    • Depth slider determines how many levels above the calling function will be recorded
    • Inspection only occurs during profiling so you must run a profile after setting the inspect
  • Call/Return or Count Button.
    • Sets the type of profiling you wish do to.
    • Instructions per hook is only available during Count type.
  • Instructions slider
    • Sets how many instructions per hook, see debug.sethook for details
    • Can also type a number in where it displays the number being set.
    • Only present when in Count mode
GeminiProfiler can be interacted through via Methods.
  • StartProfiling
    Starts Profiling, this erases all previous profiling data

    Example:
    local GeminiProfiler = Apollo.GetAddon("GeminiProfiler")
    GeminiProfiler:StartProfiling()
  • StopProfiling
    Stops profiling and generates a report

    Example:
    local GeminiProfiler = Apollo.GetAddon("GeminiProfiler")
    GeminiProfiler:StopProfiling()
  • SetDebugType
    Arguments:
    bCount = boolean
    Effect on the debug hook:
    Use call count only no time records


    Default is bCount = false. This means that time is available (This is a higher load though)
    Example:
    local GeminiProfiler = Apollo.GetAddon("GeminiProfiler")
    GeminiProfiler:SetDebugType(true)
  • SetFilters
    Arguments:
    bExcludeCarbine = boolean
    tFilters = table

    tFilters Options:
    name
    namewhat
    addon
    file
    lineDefined
    timer
    relTime
    count
    Description:
    This field indicates if we should ignore all carbine addons
    Table of filters

    Description:
    Function name
    Type of function one of: "global", "local", "method", "field", or ""
    Name of Addon the function exists in
    Name of File the function exists in
    Line number the function is defined on
    How long the function ran
    Amount of time used by function / time profiling was ran
    How many times the function was called

    If there is no filter for a given field in the passed table that field will not be filtered on.
    Pass an empty table or nil to clear out all filters

    Example:
    local GeminiProfiler = Apollo.GetAddon("GeminiProfiler")
    GeminiProfiler:SetFilters(false, { name = "MyFunc", addon = "MyAddon" })
  • SetHookCount
    Arguments:
    nHookCount = integer
    Effect on the debug:
    Sets hook count, determines how many instructions before called

    Default is 300 so that it runs every 300 instructions. Only has an effect if the type is Count

    Example:
    local GeminiProfiler = Apollo.GetAddon("GeminiProfiler")
    GeminiProfiler:SetHookCount(100)
The window is resizable drag the lower left corner slightly outside the box.
The row columns are resizeable as well.  Sorting is support
None of your size changes are saved currently