1
|
|
|
#!/usr/bin/env python |
2
|
|
|
|
3
|
|
|
from __future__ import print_function |
4
|
|
|
|
5
|
|
|
import time |
6
|
|
|
import platform |
7
|
|
|
|
8
|
|
|
import tdl |
9
|
|
|
|
10
|
|
|
WIDTH = 80 # must be divisible by 16 |
11
|
|
|
HEIGHT = 48 |
12
|
|
|
|
13
|
|
|
RENDERER = 'OpenGL' |
14
|
|
|
|
15
|
|
|
log = None |
16
|
|
|
|
17
|
|
|
def print_result(string): |
18
|
|
|
print(string) |
19
|
|
|
print(string, file=log) |
20
|
|
|
|
21
|
|
|
class Benchmark: |
22
|
|
|
default_frames = 100 |
23
|
|
|
|
24
|
|
|
def run(self, console, frames=None, times=4): |
25
|
|
|
if times > 1: |
26
|
|
|
print_result('Running %s' % self.__class__.__name__) |
27
|
|
|
while times > 0: |
28
|
|
|
self.run(console, frames, times=1) |
29
|
|
|
times -= 1 |
30
|
|
|
print_result('') |
31
|
|
|
return |
32
|
|
|
if frames is None: |
33
|
|
|
frames = self.default_frames |
34
|
|
|
self.total_frames = 0 |
35
|
|
|
self.tiles = 0 |
36
|
|
|
console.clear() |
37
|
|
|
self.start_time = time.clock() |
38
|
|
|
while self.total_frames < frames: |
39
|
|
|
self.total_frames += 1 |
40
|
|
|
self.test(console) |
41
|
|
|
for event in tdl.event.get(): |
42
|
|
|
if event.type == 'QUIT': |
43
|
|
|
raise SystemExit('Benchmark Canceled') |
44
|
|
|
self.total_time = time.clock() - self.start_time |
45
|
|
|
self.tiles_per_second = self.tiles / self.total_time |
46
|
|
|
print_result( |
47
|
|
|
'%i tiles drawn in %.2f seconds, %.2f characters/ms, %.2f FPS' % |
48
|
|
|
(self.tiles, self.total_time,self.tiles_per_second / 1000, |
49
|
|
|
self.total_frames / self.total_time)) |
50
|
|
|
|
51
|
|
|
def test(self, console): |
52
|
|
|
for x,y in console: |
53
|
|
|
console.draw_char(x, y, '.') |
54
|
|
|
tiles += 1 |
55
|
|
|
tdl.flush() |
56
|
|
|
|
57
|
|
|
|
58
|
|
|
class Benchmark_DrawChar_DefaultColor(Benchmark): |
59
|
|
|
|
60
|
|
|
def test(self, console): |
61
|
|
|
for x,y in console: |
62
|
|
|
console.draw_char(x, y, 'A') |
63
|
|
|
self.tiles += 1 |
64
|
|
|
tdl.flush() |
65
|
|
|
|
66
|
|
|
|
67
|
|
|
class Benchmark_DrawChar_NoColor(Benchmark): |
68
|
|
|
|
69
|
|
|
def test(self, console): |
70
|
|
|
for x,y in console: |
71
|
|
|
console.draw_char(x, y, 'B', None, None) |
72
|
|
|
self.tiles += 1 |
73
|
|
|
tdl.flush() |
74
|
|
|
|
75
|
|
|
|
76
|
|
|
class Benchmark_DrawStr16_DefaultColor(Benchmark): |
77
|
|
|
default_frames = 100 |
78
|
|
|
|
79
|
|
|
def test(self, console): |
80
|
|
|
for y in range(HEIGHT): |
81
|
|
|
for x in range(0, WIDTH, 16): |
82
|
|
|
console.draw_str(x, y, '0123456789ABCDEF') |
83
|
|
|
self.tiles += 16 |
84
|
|
|
tdl.flush() |
85
|
|
|
|
86
|
|
|
|
87
|
|
|
class Benchmark_DrawStr16_NoColor(Benchmark): |
88
|
|
|
default_frames = 100 |
89
|
|
|
|
90
|
|
|
def test(self, console): |
91
|
|
|
for y in range(HEIGHT): |
92
|
|
|
for x in range(0, WIDTH, 16): |
93
|
|
|
console.draw_str(x, y, '0123456789ABCDEF', None, None) |
94
|
|
|
self.tiles += 16 |
95
|
|
|
tdl.flush() |
96
|
|
|
|
97
|
|
|
def run_benchmark(): |
98
|
|
|
global log |
99
|
|
|
log = open('results.log', 'a') |
100
|
|
|
print('', file=log) |
101
|
|
|
console = tdl.init(WIDTH, HEIGHT, renderer=RENDERER) |
102
|
|
|
|
103
|
|
|
print_result('Benchmark run on %s' % time.ctime()) |
104
|
|
|
print_result('Running under %s %s' % (platform.python_implementation(), |
105
|
|
|
platform.python_version())) |
106
|
|
|
print_result('In %s mode' % (['release', 'debug'][__debug__])) |
107
|
|
|
print_result('%i characters/frame' % (WIDTH * HEIGHT)) |
108
|
|
|
print_result('Opened console in %s mode' % RENDERER) |
109
|
|
|
Benchmark_DrawChar_DefaultColor().run(console) |
110
|
|
|
Benchmark_DrawChar_NoColor().run(console) |
111
|
|
|
#Benchmark_DrawStr16_DefaultColor().run(console) |
112
|
|
|
#Benchmark_DrawStr16_NoColor().run(console) |
113
|
|
|
log.close() |
114
|
|
|
print('results written to results.log') |
115
|
|
|
|
116
|
|
|
if __name__ == '__main__': |
117
|
|
|
run_benchmark() |
118
|
|
|
|