add new comparison method rgb_difference that resembles arithmetical difference per...
[imager.git] / bench / box.pl
1 #!perl -w
2 use strict;
3 use Benchmark qw(:hireswallclock countit);
4 use Imager;
5
6 my $im = Imager->new(xsize => 1000, ysize => 1000);
7 my $im_pal = Imager->new(xsize => 1000, ysize => 1000, type => "paletted");
8 my @colors = map Imager::Color->new($_), qw/red green blue white black/;
9 $im_pal->addcolors(colors => \@colors);
10 my $color = $colors[0];
11 my $other = Imager::Color->new("pink");
12
13 countthese
14   (5,
15    {
16     box0010 => sub {
17       $im->box(xmax => 10, ymax => 10, color => $other)
18         for 1 .. 100;
19     },
20     box0010c => sub {
21       $im->box(xmax => 10, ymax => 10, color => "pink")
22         for 1 .. 100;
23     },
24     box0010d => sub {
25       $im->box(xmax => 10, ymax => 10)
26         for 1 .. 100;
27     },
28     box0100 => sub {
29       $im->box(xmax => 100, ymax => 100, color => $other)
30         for 1 .. 100;
31     },
32     box0500 => sub {
33       $im->box(xmax => 500, ymax => 500, color => $other)
34         for 1 .. 100;
35     },
36     box1000 => sub {
37       $im->box(color => $other)
38         for 1 .. 100;
39     },
40     palbox0010 => sub {
41       $im_pal->box(xmax => 10, ymax => 10, color => $color)
42         for 1 .. 100;
43     },
44     palbox0100 => sub {
45       $im_pal->box(xmax => 100, ymax => 100, color => $color)
46         for 1 .. 100;
47     },
48     palbox0500 => sub {
49       $im_pal->box(xmax => 500, ymax => 500, color => $color)
50         for 1 .. 100;
51     },
52     palbox1000 => sub {
53       $im_pal->box(color => $color)
54         for 1 .. 100;
55     },
56
57     fbox0010 => sub {
58       $im->box(xmax => 10, ymax => 10, filled => 1, color => $other)
59         for 1 .. 100;
60     },
61     fbox0010c => sub {
62       $im->box(xmax => 10, ymax => 10, filled => 1, color => "pink")
63         for 1 .. 100;
64     },
65     fbox0010d => sub {
66       $im->box(xmax => 10, ymax => 10, filled => 1)
67         for 1 .. 100;
68     },
69     fbox0100 => sub {
70       $im->box(xmax => 100, ymax => 100, filled => 1, color => $other)
71         for 1 .. 100;
72     },
73     fbox0500 => sub {
74       $im->box(xmax => 500, ymax => 500, filled => 1, color => $other)
75         for 1 .. 100;
76     },
77     fbox1000 => sub {
78       $im->box(color => $other, filled => 1)
79         for 1 .. 100;
80     },
81     fpalbox0010 => sub {
82       $im_pal->box(xmax => 10, ymax => 10, filled => 1, color => $color)
83         for 1 .. 100;
84     },
85     fpalbox0100 => sub {
86       $im_pal->box(xmax => 100, ymax => 100, filled => 1, color => $color)
87         for 1 .. 100;
88     },
89     fpalbox0500 => sub {
90       $im_pal->box(xmax => 500, ymax => 500, filled => 1, color => $color)
91         for 1 .. 100;
92     },
93     fpalbox1000 => sub {
94       $im_pal->box(filled => 1, color => $color)
95         for 1 .. 100;
96     },
97    }
98   );
99
100 $im_pal->type eq "paletted" or die "Not paletted anymore";
101
102 sub countthese {
103   my ($limit, $what) = @_;
104
105   for my $key (sort keys %$what) {
106     my $bench = countit($limit, $what->{$key});
107     printf "$key: %.1f /s (%f / iter)\n", $bench->iters / $bench->cpu_p,
108       $bench->cpu_p / $bench->iters;
109   }
110 }
111
112 __END__
113
114 Original:
115
116 box0010: 397.7 /s (0.002514 / iter)
117 box0010c: 3.3 /s (0.305882 / iter)
118 box0010d: 399.6 /s (0.002502 / iter)
119 box0100: 329.5 /s (0.003035 / iter)
120 box0500: 191.5 /s (0.005223 / iter)
121 box1000: 130.6 /s (0.007657 / iter)
122 fbox0010: 372.3 /s (0.002686 / iter)
123 fbox0010c: 3.3 /s (0.300588 / iter)
124 fbox0010d: 383.2 /s (0.002610 / iter)
125 fbox0100: 63.8 /s (0.015685 / iter)
126 fbox0500: 2.8 /s (0.361429 / iter)
127 fbox1000: 0.7 /s (1.435000 / iter)
128 fpalbox0010: 370.9 /s (0.002696 / iter)
129 fpalbox0100: 53.2 /s (0.018799 / iter)
130 fpalbox0500: 2.4 /s (0.413077 / iter)
131 fpalbox1000: 0.6 /s (1.700000 / iter)
132 palbox0010: 390.2 /s (0.002563 / iter)
133 palbox0100: 316.9 /s (0.003155 / iter)
134 palbox0500: 171.8 /s (0.005820 / iter)
135 palbox1000: 115.0 /s (0.008694 / iter)
136
137 Re-work sub box():
138
139 box0010: 786.0 /s (0.001272 / iter)
140 box0010c: 3.3 /s (0.300000 / iter)
141 box0010d: 463.7 /s (0.002157 / iter)
142 box0100: 556.6 /s (0.001797 / iter)
143 box0500: 254.4 /s (0.003930 / iter)
144 box1000: 154.8 /s (0.006460 / iter)
145 fbox0010: 700.9 /s (0.001427 / iter)
146 fbox0010c: 3.3 /s (0.302353 / iter)
147 fbox0010d: 437.0 /s (0.002288 / iter)
148 fbox0100: 69.2 /s (0.014444 / iter)
149 fbox0500: 2.8 /s (0.357143 / iter)
150 fbox1000: 0.7 /s (1.437500 / iter)
151 fpalbox0010: 673.5 /s (0.001485 / iter)
152 fpalbox0100: 46.8 /s (0.021377 / iter)
153 fpalbox0500: 2.0 /s (0.505000 / iter)
154 fpalbox1000: 0.5 /s (2.140000 / iter)
155 palbox0010: 740.9 /s (0.001350 / iter)
156 palbox0100: 473.2 /s (0.002113 / iter)
157 palbox0500: 186.2 /s (0.005371 / iter)
158 palbox1000: 109.1 /s (0.009167 / iter)
159
160 re-work i_box_filled():
161
162 box0010: 783.0 /s (0.001277 / iter)
163 box0010c: 3.3 /s (0.300588 / iter)
164 box0010d: 463.7 /s (0.002157 / iter)
165 box0100: 548.2 /s (0.001824 / iter)
166 box0500: 250.2 /s (0.003997 / iter)
167 box1000: 155.1 /s (0.006448 / iter)
168 fbox0010: 743.7 /s (0.001345 / iter)
169 fbox0010c: 3.3 /s (0.302941 / iter)
170 fbox0010d: 448.3 /s (0.002231 / iter)
171 fbox0100: 147.8 /s (0.006765 / iter)
172 fbox0500: 7.6 /s (0.132308 / iter)
173 fbox1000: 1.9 /s (0.521000 / iter)
174 fpalbox0010: 784.9 /s (0.001274 / iter)
175 fpalbox0100: 424.7 /s (0.002355 / iter)
176 fpalbox0500: 42.6 /s (0.023496 / iter)
177 fpalbox1000: 11.4 /s (0.087966 / iter)
178 palbox0010: 778.8 /s (0.001284 / iter)
179 palbox0100: 541.5 /s (0.001847 / iter)
180 palbox0500: 238.0 /s (0.004203 / iter)
181 palbox1000: 141.1 /s (0.007088 / iter)
182
183 optimize getwidth/getheight:
184
185 box0010: 832.5 /s (0.001201 / iter)
186 box0010c: 3.4 /s (0.297647 / iter)
187 box0010d: 491.3 /s (0.002035 / iter)
188 box0100: 594.7 /s (0.001682 / iter)
189 box0500: 259.1 /s (0.003859 / iter)
190 box1000: 158.5 /s (0.006310 / iter)
191 fbox0010: 798.1 /s (0.001253 / iter)
192 fbox0010c: 3.3 /s (0.300588 / iter)
193 fbox0010d: 477.7 /s (0.002093 / iter)
194 fbox0100: 148.5 /s (0.006735 / iter)
195 fbox0500: 7.5 /s (0.134103 / iter)
196 fbox1000: 1.9 /s (0.530000 / iter)
197 fpalbox0010: 829.0 /s (0.001206 / iter)
198 fpalbox0100: 444.1 /s (0.002252 / iter)
199 fpalbox0500: 43.0 /s (0.023260 / iter)
200 fpalbox1000: 11.5 /s (0.087333 / iter)
201 palbox0010: 826.0 /s (0.001211 / iter)
202 palbox0100: 553.2 /s (0.001808 / iter)
203 palbox0500: 242.7 /s (0.004119 / iter)
204 palbox1000: 144.4 /s (0.006923 / iter)
205
206 pull stuff out of the hash fast:
207
208 box0010: 1332.0 /s (0.000751 / iter)
209 box0010c: 3.4 /s (0.295882 / iter)
210 box0010d: 646.6 /s (0.001546 / iter)
211 box0100: 805.3 /s (0.001242 / iter)
212 box0500: 293.1 /s (0.003412 / iter)
213 box1000: 161.7 /s (0.006183 / iter)
214 fbox0010: 1215.2 /s (0.000823 / iter)
215 fbox0010c: 3.4 /s (0.295294 / iter)
216 fbox0010d: 600.9 /s (0.001664 / iter)
217 fbox0100: 160.2 /s (0.006241 / iter)
218 fbox0500: 7.6 /s (0.131250 / iter)
219 fbox1000: 1.9 /s (0.519000 / iter)
220 fpalbox0010: 1295.2 /s (0.000772 / iter)
221 fpalbox0100: 547.2 /s (0.001828 / iter)
222 fpalbox0500: 43.8 /s (0.022845 / iter)
223 fpalbox1000: 11.5 /s (0.087333 / iter)
224 palbox0010: 1314.1 /s (0.000761 / iter)
225 palbox0100: 752.2 /s (0.001330 / iter)
226 palbox0500: 269.4 /s (0.003712 / iter)
227 palbox1000: 145.3 /s (0.006884 / iter)
228
229 make _is_color_object xs
230
231 box0010: 1359.4 /s (0.000736 / iter)
232 box0010c: 3.4 /s (0.294118 / iter)
233 box0010d: 635.6 /s (0.001573 / iter)
234 box0100: 818.6 /s (0.001222 / iter)
235 box0500: 294.3 /s (0.003398 / iter)
236 box1000: 162.9 /s (0.006140 / iter)
237 fbox0010: 1230.8 /s (0.000813 / iter)
238 fbox0010c: 3.2 /s (0.313125 / iter)
239 fbox0010d: 608.7 /s (0.001643 / iter)
240 fbox0100: 158.5 /s (0.006308 / iter)
241 fbox0500: 7.5 /s (0.134103 / iter)
242 fbox1000: 1.9 /s (0.530000 / iter)
243 fpalbox0010: 1328.8 /s (0.000753 / iter)
244 fpalbox0100: 553.2 /s (0.001808 / iter)
245 fpalbox0500: 43.5 /s (0.022974 / iter)
246 fpalbox1000: 11.4 /s (0.087627 / iter)
247 palbox0010: 1344.8 /s (0.000744 / iter)
248 palbox0100: 783.0 /s (0.001277 / iter)
249 palbox0500: 274.5 /s (0.003643 / iter)
250 palbox1000: 147.9 /s (0.006761 / iter)
251
252 fix x color table caching check:
253
254 box0010: 1376.1 /s (0.000727 / iter)
255 box0010c: 257.9 /s (0.003877 / iter)
256 box0010d: 642.4 /s (0.001557 / iter)
257 box0100: 820.2 /s (0.001219 / iter)
258 box0500: 294.0 /s (0.003402 / iter)
259 box1000: 163.2 /s (0.006129 / iter)
260 fbox0010: 1228.5 /s (0.000814 / iter)
261 fbox0010c: 252.8 /s (0.003956 / iter)
262 fbox0010d: 617.8 /s (0.001619 / iter)
263 fbox0100: 158.5 /s (0.006308 / iter)
264 fbox0500: 7.5 /s (0.133846 / iter)
265 fbox1000: 1.9 /s (0.530000 / iter)
266 fpalbox0010: 1343.4 /s (0.000744 / iter)
267 fpalbox0100: 557.3 /s (0.001794 / iter)
268 fpalbox0500: 43.9 /s (0.022759 / iter)
269 fpalbox1000: 11.5 /s (0.087000 / iter)
270 palbox0010: 1365.3 /s (0.000732 / iter)
271 palbox0100: 787.7 /s (0.001270 / iter)
272 palbox0500: 275.6 /s (0.003629 / iter)
273 palbox1000: 148.4 /s (0.006739 / iter)