dgs icon indicating copy to clipboard operation
dgs copied to clipboard

DGS on idle uses a lot of processing power

Open PlatinMTA opened this issue 3 years ago • 4 comments

DGS while idle runs dgsCoreRender every frame. This should be unnecesary, since no DGS elements are on screen or even loaded.

You can check this by opening a clean server, starting DGS and IPB and search Lua timing (option d).

image

This should not be the case. Unless there is a DGS element created or something like debugdgs enabled, there should be no onClientRender or onClientPreRender functions running. They should be added after a DGS element has been created, or even better, when a DGS element is being rendered. This will make DGS perform MUCH better while is not loaded.

On high FPS it can lead for up to 1.5% CPU usage (AMD Ryzen 5 2600 on Windows 10), while on low FPS it gets like 0.4-0.5% CPU usage.

PlatinMTA avatar Jan 14 '22 00:01 PlatinMTA

Note that: @client.lua:137 is the "onClientRender". the real usage should be 1.45% - 0.51% = 0.94% Because DGS has some basic running requirement. DGS' structure determines this, and fortunately, this can enhance the performance when you have a lot of DGS elements. In the main renderer, we can make some optimization. But adding extra code to detect the cursor will be much more costly (Or maybe there will be other method to optimize this). Thanks for your advice. We are on the way to improvement !

thisdp avatar Jan 14 '22 06:01 thisdp

Note that: @client.lua:137 is the "onClientRender". the real usage should be 1.45% - 0.51% = 0.94% Because DGS has some basic running requirement. DGS' structure determines this, and fortunately, this can enhance the performance when you have a lot of DGS elements. In the main renderer, we can make some optimization. But adding extra code to detect the cursor will be much more costly (Or maybe there will be other method to optimize this). Thanks for your advice. We are on the way to improvement !

I did make a "hack" for an older version of DGS. I started onClientRender on dgsCoreRender after the creation of any DGS element. And every 5000 tick~~ i check on the dgsCoreRender function if there are still DGS elements created, if there are not then the event is removed. The same with onClientCursorMove. I should made it so that it removes the event when there is no element rendering tho, but it's an improvment and I didn't see any side-problems (the event also adds itself when using debugdgs).

I don't know if it's feaseable to do that in a non-hacky way. Didn't bother to think too much about it.

PlatinMTA avatar Jan 14 '22 07:01 PlatinMTA

Optimized onClientPreRender in 3.518. Need further optimization.

thisdp avatar Oct 16 '22 04:10 thisdp

dgs uses a lot of processing power on my server. On idle it's around 1% too, and when used in some UI it can become pretty high

Fernando-A-Rocha avatar Feb 14 '24 12:02 Fernando-A-Rocha