Tree of Savior Forum

I checked my GPU load during terrible city framerate loss. Here's what I discovered

No it doesn’t.
Client_tos.exe is a 32 bit process and is limited in memory use by this.
But also it doesn’t mean freezes occur only when all memory is used up, that would cause a crash, but also when there’s a lot of stuff in memory piled up that some function has to go through, thus causing freezes / lags.

I have not seen Client_tos.exe memory utilization reach 2 GB, but if you say you have, then you have…

We also don’t know if ToS is using IMAGE_FILE_LARGE_ADDRESS_AWARE that would extend the limit to 4 GB… (we just don’t know).

I meant 16gb ram system or not doesn’t matter for this.
I don’t think i noticed 2gb usage or more either.
but just imagine there’s like 10-50mb of data leaked at some place, and one single function that’s used regularly has to go through it a few times.
That would already create significant lags.

This community is amazing.

Thanks chronosanct. IMC should just hire you already

weapon swap was buggy in CBT2 and I regret buying it…
I remember when the loading screen wouldn’t go away also when the game finished loading…
It seems like weapon swap is still buggy? I guess I won’t get it this time…

Some more evidence of FPS drops due to other players in the screen. @Gwenyth was kind enough to provide this video of this kToS player also suffering terrible FPS drops.

Some interesting things to note:

  1. At the start of the video when there are no other players around, the FPS is ~30.

  2. (@ 0:25 seconds) the player starts to see 4-5 other players PvPing and the FPS is already dropping down to ~13.

  3. Pretty much as soon the player gets within 1.2 screens distance (@ 0:27 seconds into the video) from the center of the PvP cluster (I estimated ~15 players) the FPS drops to ~5-7.

  4. In the second PvP skirmish (@ ~5:10) there are only ~5 players and the FPS drops to ~13-15 which is interestingly similar to what we see in 2).


Prinny Notes:

1) Need to see if FPS is dropping even if you set “DrawActorPersent=0” to in user.xml located in C:\Program Files (x86)\Steam\steamapps\common\TreeOfSavior\release

Hypothesis (A): Setting “DrawActorPersent=0” will get rid of all FPS drops even in really crowded town/world boss/Guild vs. Guild situations.

Why?

Follow-up hypothesis (B): IF (A) is True, maybe the DrawActor function is waiting on the TCP thread? (this would make sense because the DrawActor function will need to depend on location of other players to figure out where to draw them on the screen. Location of other players requires ‘other’ player location packet to be sent to server and server to send packet to client… if TCP packet fails, then DrawActor function may be in “wait” state because the TCP socket thread is in a “blocked” state.)

If B is true then, the reason why setting “DrawActorPersent=0” will work is because it will completely skip the “DrawActor” function (which is hypothesized to be hanging because it waits for TCP packets describing player positions)

What makes me wonder:
What is the difference on how mobs and players are handled.
Because you can have lots of mobs on screen (e.g. demon prison 2)
and it runs completely fine. Positioning them, drawing them, animation, attack effects and whatnot.
But as soon as you get like 5-10 players on screen FPS start dropping.
Even if they’re just idleing in town.

Mobs have a lot less possible positions and moves than players; thus allowing for a smaller data transfer.

Additionally mob positions are determined by the server so it only needs to be:

Server --> You

But if you’re talking about other players then:

Other player --> Server --> You

If each connection has an x% chance of dropped packets, then you’ve doubled your chance for a failure.

@Maavy @ridleyco

Sorry to ask this of you two, but could one of you try setting “DrawActorPersent=” to 0 or 1 in your user.xml?

It should be located in a similar path as:

C:\Program Files (x86)\Steam\steamapps\common\TreeOfSavior\release

This will cause no other players to be drawn, but I hypothesize that if you enter into a crowded city, your FPS will not drop.

I’d do this myself, but I am at work haha.

Thank you so much!!!

I gave it a try.
Game automatically resets the value.
Made the file write protected.
But the game still showed other characters and caused low framerates for me in town on a full channel.

1 Like

uh does this game engine have a memory management like JVM or .NET Frameworks? It can cause problems with frame rate.
Doesn’t even have to be JVM or .net maybe a custom memory management.

Bummer…

@Staff_Julie looks like this test will have to be something the dev team tries:

What evidence have you seen that makes you think the ToS FPS drops are due to memory issues?

No, the game isn’t sandboxed like in the JVM or .NET.

JVM and .NETFx aren’t “memory management” tools, but sandboxes necessary for their frameworks to work. If you’re not using anything like this, sandboxing your software is stupid unless you want to protect the data that’s in the memory, which isn’t necessary to a game.

I will do so when I have time. Tonight or tomorrow morning at the latest.

@Fuzzy already tried it out and they couldn’t do it because the game automatically resets the value. It prevents “DrawActorPersent=0” or “DrawActorPersent=1” :frowning:

Pretty obvious: it starts at 1.1-1.3 Gb memory usage and starts to lag after some play time when it reaches 2.1 Gb of RAM used. And ToS being 32-bit application have a memory limit it can use (2Gb). The more mobs you fight and the more maps you visit - the faster you’ll reach that limit.

Didn’t try setting it to 1.
But right now I’m doing dungeons. Would have to pass that on to someone else or I’ll do it after.