BGE Proposal: Reusing YoFrankie! game as benchmark suite

I have a little benchmark suite up and running now, that is based on the YoFranke! blender game. I Think its nice for testing because we have a complete level, with several effects, a lot of different materials (several hundred batches in most view directions) some static geometry and a lot group instanced assets.

It’s easy to make the scene a lot more complex or strip out some instances for testing.
We can very easy build a complete new level for benchmarking with all these nice assets.

For working properly I had to strip out some portions of logic, that is not needed or cause problems. I just killed all player stuff and enemies. For that reason, there is no animation in the scene right now, but it should be easy to add back some simple enemies with animations.

I created camera with simple keyframes to fly through the scene automatically. This should produce more representable benchmark data. There are some parameters on how often a fps snapshot should be taken etc.

The output is written to a simple python file, that could be easily forwarded to matplotlib to produce some nice diagrams:


# ------------------------
# BENCHMARK               
# ------------------------
....
Name         = "default"
Starttime    = "12-08-2012 19:16:40"
Endtime      = "12-08-2012 19:17:15"

Startsecond  = 1344791800
Endsecond    = 1344791835

seconds_run  = 35

maxframe     = 60.08699810940547
average      = 60.08699810940547
actual       = 60.01395324208425
count        = 76
framelist    = [(1, 64.84, 0.1), (2, 60.11, 0.1), (3, 59.59, 0.1), (4, 60.02, 0.1), (5, 60.03, 0.1), (6, 60.02, 0.1), (7, 60.15, 0.1), (8, 59.92, 0.1), (9, 60.04, 0.1), (10, 60.05, 0.1), (11, 60.02, 0.1), (12, 60.11, 0.1), (13, 59.93, 0.1), (14, 60.03, 0.1), (15, 60.03, 0.1), (16, 60.02, 0.1), (17, 60.04, 0.1), (18, 60.02, 0.1), (19, 60.0, 0.1), (20, 60.03, 0.1), (21, 60.03, 0.1), (22, 60.05, 0.1), (23, 59.99, 0.1), (24, 60.53, 0.1), (25, 60.08, 0.1), (26, 60.04, 0.1), (27, 60.03, 0.1), (28, 60.02, 0.1), (29, 60.02, 0.1), (30, 60.03, 0.1), (31, 60.05, 0.1), (32, 60.02, 0.1), (33, 60.02, 0.1), (34, 60.02, 0.1), (35, 59.99, 0.1), (36, 60.03, 0.1), (37, 60.0, 0.1), (38, 60.02, 0.1), (39, 59.96, 0.1), (40, 59.99, 0.1), (41, 60.08, 0.1), (42, 59.96, 0.1), (43, 59.96, 0.1), (44, 59.98, 0.1), (45, 60.02, 0.1), (46, 59.99, 0.1), (47, 59.99, 0.1), (48, 60.02, 0.1), (49, 60.03, 0.1), (50, 60.02, 0.1), (51, 60.02, 0.1), (52, 60.01, 0.1), (53, 60.01, 0.1), (54, 60.02, 0.1), (55, 60.04, 0.1), (56, 60.05, 0.1), (57, 60.07, 0.1), (58, 60.03, 0.1), (59, 60.07, 0.1), (60, 60.04, 0.1), (61, 60.04, 0.1), (62, 60.04, 0.1), (63, 60.0, 0.1), (64, 60.02, 0.1), (65, 60.02, 0.1), (66, 59.99, 0.1), (67, 60.09, 0.1), (68, 60.01, 0.1), (69, 60.02, 0.1), (70, 60.01, 0.1), (71, 60.01, 0.1), (72, 60.01, 0.1), (73, 60.02, 0.1), (74, 60.01, 0.1), (75, 60.0, 0.1), (76, 60.01, 0.1)]

frame        = 76

lists[len(lists)] = framelist
graphics     = "GeForce GTX 275/PCIe/SSE2"
opengl_vers  = "3.3.0 NVIDIA 295.40"
vendor       = "NVIDIA Corporation"

width        = 1435
height       = 807

graphic_mode = "GLSL"
python_vers  = "3.2.3"
Blender_vers = "2.5"

OS           = "Linux"
version      = "3.2.0-27-generic"

There are also some other useful data like versions, operating systems, modes or max and min frames listed.

One downside is the filesize of ~120MB for this thing. Otherwise it would be possible just to make a blendfile, that you can copy to your YoFrankie path.

Let me know if such a test environment is useful for you.

Download:
https://dl.dropbox.com/u/2779060/YoMark.zip

  • unzip package
  • copy Benchmark.blend to YoFrankie! root directory (where the binary is located)
  • copy level_1_home_b.blend to levels folder
  • open up Benchmark in blender, and hit p.

you can test with or without “enable all frames” option.

greetings,
moerdn

This is great, seeing the max and lowest fps is really helpful

I will implement some further python API methods that let you retrieve the actual polycount and more important the actual batch count.
Maybe getter methods for the whole debug stuff would be nice as well (getPhysicsTime(), getAnimationTime() … ). The more detailed the output is, the more you can optimize your game, based on these informations.

greetings,
moerdn

Cool i want to try it :slight_smile:

Download in the first post.

Thank you very much!!! :slight_smile: