简体   繁体   中英

Analyzing function memory and CPU usage

I am making a video game, which is a pretty small 2D shooter. Recently I noticed that the frame rate drops dramatically when there are about 9 bullets in the scene or more. My laptop can handle advanced 3D games and my game is very very simple so hardware should not be a problem.

So now I have a very big code (at least for one person) and I am pretty confused where I should look for? there are too many functions and classes related to bullets, and for example, I don't know how to analyze if the rendering function has problems or the update function? I could use MVS 2015 debugging tools for other programs, but for a game, it is not practical, for example, if I put a breakpoint before the render function, It should be checked 60 times in a second plus I can't input anything so I will never have bullets to test render function! I tried to use task manager, and I realized that CPU usage goes up really fast for each bullet, but when the game slows down only 10 percent of the CPU is used!

So my questions are:

  • How can I analyze functions when I can't use debugging tool?

  • And why game slows down while it still can use system resources?

To see what part consumes most of the processing power, you should use a function profiler . It doesn't "debug", but it creates a report when it's finished.

Valgrind is a good tool for that.

Why the game slows down? Depends on your implementation. I can create a program that divides two numbers and make it take 5 minutes to calculate the result.

We're in the video-game industry as well and we use a very simple tool on PC for CPU profiling: very sleepy.

http://www.codersnotes.com/sleepy/

It is simple, but really helped me out a lot of times. Just fire up the program from IDE and let very sleepy run for a few thousand samples and off you go!

When it comes to memory holes, Valgrind is a good tool, as already noted by The Quantum Physicist. For timing, I would write my own small tracing/profiling tool (if my IDE does not already have one). Use a text debugging output to write short messages to a log file. Something like that:

void HandleBullet() {
    printf("HandleBullet START: %i", GetSysTime());
    // do your function stuff
    printf("HandleBullet END: %i", GetSysTime()); // or calculate time of function directly
}

Write those debugging messages in all of the functions where you think they could take too long. After some execution time, you can look into that file and see if something obvious happened (blocking somewhere). If not, use a high level language of your choice to write a small parser for your created log file to tidy up and analyze your output. Calculate stuff like overall time spent in some function, or chart which functions took the longest. Should not be too difficult, if you stick to a log message style which is easy parsable for you.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM