~ubuntu-branches/ubuntu/trusty/enigmail/trusty

« back to all changes in this revision

Viewing changes to build/pgo/js-input/3d-cube.html

  • Committer: Package Import Robot
  • Author(s): Chris Coulson
  • Date: 2013-09-13 16:02:15 UTC
  • mfrom: (0.12.16)
  • Revision ID: package-import@ubuntu.com-20130913160215-mpeaob8bhtk42aun
Tags: 2:1.5.2-0ubuntu1
* New upstream release v1.5.2 for Thunderbird 24

* Build enigmail using a stripped down Thunderbird 17 build system, as it's
  now quite difficult to build the way we were doing previously, with the
  latest Firefox build system
* Add debian/patches/no_libxpcom.patch - Don't link against libxpcom, as it
  doesn't exist anymore (but exists in the build system)
* Add debian/patches/use_sdk.patch - Use the SDK version of xpt.py and
  friends
* Drop debian/patches/ipc-pipe_rename.diff (not needed anymore)
* Drop debian/patches/makefile_depth.diff (not needed anymore)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<!DOCTYPE html>
2
 
<head>
3
 
<!--
4
 
 Copyright (C) 2007 Apple Inc.  All rights reserved.
5
 
 
6
 
 Redistribution and use in source and binary forms, with or without
7
 
 modification, are permitted provided that the following conditions
8
 
 are met:
9
 
 1. Redistributions of source code must retain the above copyright
10
 
    notice, this list of conditions and the following disclaimer.
11
 
 2. Redistributions in binary form must reproduce the above copyright
12
 
    notice, this list of conditions and the following disclaimer in the
13
 
    documentation and/or other materials provided with the distribution.
14
 
 
15
 
 THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
16
 
 EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17
 
 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18
 
 PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
19
 
 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20
 
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21
 
 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22
 
 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
23
 
 OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24
 
 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25
 
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
26
 
-->
27
 
 
28
 
<title>SunSpider 3d-cube</title>
29
 
 
30
 
</head>
31
 
 
32
 
<body>
33
 
<h3>3d-cube</h3>
34
 
<div id="console">
35
 
</div>
36
 
 
37
 
<script>
38
 
 
39
 
var _sunSpiderStartDate = new Date();
40
 
 
41
 
// 3D Cube Rotation
42
 
// http://www.speich.net/computer/moztesting/3d.htm
43
 
// Created by Simon Speich
44
 
 
45
 
var Q = new Array();
46
 
var MTrans = new Array();  // transformation matrix
47
 
var MQube = new Array();  // position information of qube
48
 
var I = new Array();      // entity matrix
49
 
var Origin = new Object();
50
 
var Testing = new Object();
51
 
var LoopTimer;
52
 
 
53
 
var DisplArea = new Object();
54
 
DisplArea.Width = 300;
55
 
DisplArea.Height = 300;
56
 
 
57
 
function DrawLine(From, To) {
58
 
  var x1 = From.V[0];
59
 
  var x2 = To.V[0];
60
 
  var y1 = From.V[1];
61
 
  var y2 = To.V[1];
62
 
  var dx = Math.abs(x2 - x1);
63
 
  var dy = Math.abs(y2 - y1);
64
 
  var x = x1;
65
 
  var y = y1;
66
 
  var IncX1, IncY1;
67
 
  var IncX2, IncY2;  
68
 
  var Den;
69
 
  var Num;
70
 
  var NumAdd;
71
 
  var NumPix;
72
 
 
73
 
  if (x2 >= x1) {  IncX1 = 1; IncX2 = 1;  }
74
 
  else { IncX1 = -1; IncX2 = -1; }
75
 
  if (y2 >= y1)  {  IncY1 = 1; IncY2 = 1; }
76
 
  else { IncY1 = -1; IncY2 = -1; }
77
 
  if (dx >= dy) {
78
 
    IncX1 = 0;
79
 
    IncY2 = 0;
80
 
    Den = dx;
81
 
    Num = dx / 2;
82
 
    NumAdd = dy;
83
 
    NumPix = dx;
84
 
  }
85
 
  else {
86
 
    IncX2 = 0;
87
 
    IncY1 = 0;
88
 
    Den = dy;
89
 
    Num = dy / 2;
90
 
    NumAdd = dx;
91
 
    NumPix = dy;
92
 
  }
93
 
 
94
 
  NumPix = Math.round(Q.LastPx + NumPix);
95
 
 
96
 
  var i = Q.LastPx;
97
 
  for (; i < NumPix; i++) {
98
 
    Num += NumAdd;
99
 
    if (Num >= Den) {
100
 
      Num -= Den;
101
 
      x += IncX1;
102
 
      y += IncY1;
103
 
    }
104
 
    x += IncX2;
105
 
    y += IncY2;
106
 
  }
107
 
  Q.LastPx = NumPix;
108
 
}
109
 
 
110
 
function CalcCross(V0, V1) {
111
 
  var Cross = new Array();
112
 
  Cross[0] = V0[1]*V1[2] - V0[2]*V1[1];
113
 
  Cross[1] = V0[2]*V1[0] - V0[0]*V1[2];
114
 
  Cross[2] = V0[0]*V1[1] - V0[1]*V1[0];
115
 
  return Cross;
116
 
}
117
 
 
118
 
function CalcNormal(V0, V1, V2) {
119
 
  var A = new Array();   var B = new Array(); 
120
 
  for (var i = 0; i < 3; i++) {
121
 
    A[i] = V0[i] - V1[i];
122
 
    B[i] = V2[i] - V1[i];
123
 
  }
124
 
  A = CalcCross(A, B);
125
 
  var Length = Math.sqrt(A[0]*A[0] + A[1]*A[1] + A[2]*A[2]); 
126
 
  for (var i = 0; i < 3; i++) A[i] = A[i] / Length;
127
 
  A[3] = 1;
128
 
  return A;
129
 
}
130
 
 
131
 
function CreateP(X,Y,Z) {
132
 
  this.V = [X,Y,Z,1];
133
 
}
134
 
 
135
 
// multiplies two matrices
136
 
function MMulti(M1, M2) {
137
 
  var M = [[],[],[],[]];
138
 
  var i = 0;
139
 
  var j = 0;
140
 
  for (; i < 4; i++) {
141
 
    j = 0;
142
 
    for (; j < 4; j++) M[i][j] = M1[i][0] * M2[0][j] + M1[i][1] * M2[1][j] + M1[i][2] * M2[2][j] + M1[i][3] * M2[3][j];
143
 
  }
144
 
  return M;
145
 
}
146
 
 
147
 
//multiplies matrix with vector
148
 
function VMulti(M, V) {
149
 
  var Vect = new Array();
150
 
  var i = 0;
151
 
  for (;i < 4; i++) Vect[i] = M[i][0] * V[0] + M[i][1] * V[1] + M[i][2] * V[2] + M[i][3] * V[3];
152
 
  return Vect;
153
 
}
154
 
 
155
 
function VMulti2(M, V) {
156
 
  var Vect = new Array();
157
 
  var i = 0;
158
 
  for (;i < 3; i++) Vect[i] = M[i][0] * V[0] + M[i][1] * V[1] + M[i][2] * V[2];
159
 
  return Vect;
160
 
}
161
 
 
162
 
// add to matrices
163
 
function MAdd(M1, M2) {
164
 
  var M = [[],[],[],[]];
165
 
  var i = 0;
166
 
  var j = 0;
167
 
  for (; i < 4; i++) {
168
 
    j = 0;
169
 
    for (; j < 4; j++) M[i][j] = M1[i][j] + M2[i][j];
170
 
  }
171
 
  return M;
172
 
}
173
 
 
174
 
function Translate(M, Dx, Dy, Dz) {
175
 
  var T = [
176
 
  [1,0,0,Dx],
177
 
  [0,1,0,Dy],
178
 
  [0,0,1,Dz],
179
 
  [0,0,0,1]
180
 
  ];
181
 
  return MMulti(T, M);
182
 
}
183
 
 
184
 
function RotateX(M, Phi) {
185
 
  var a = Phi;
186
 
  a *= Math.PI / 180;
187
 
  var Cos = Math.cos(a);
188
 
  var Sin = Math.sin(a);
189
 
  var R = [
190
 
  [1,0,0,0],
191
 
  [0,Cos,-Sin,0],
192
 
  [0,Sin,Cos,0],
193
 
  [0,0,0,1]
194
 
  ];
195
 
  return MMulti(R, M);
196
 
}
197
 
 
198
 
function RotateY(M, Phi) {
199
 
  var a = Phi;
200
 
  a *= Math.PI / 180;
201
 
  var Cos = Math.cos(a);
202
 
  var Sin = Math.sin(a);
203
 
  var R = [
204
 
  [Cos,0,Sin,0],
205
 
  [0,1,0,0],
206
 
  [-Sin,0,Cos,0],
207
 
  [0,0,0,1]
208
 
  ];
209
 
  return MMulti(R, M);
210
 
}
211
 
 
212
 
function RotateZ(M, Phi) {
213
 
  var a = Phi;
214
 
  a *= Math.PI / 180;
215
 
  var Cos = Math.cos(a);
216
 
  var Sin = Math.sin(a);
217
 
  var R = [
218
 
  [Cos,-Sin,0,0],
219
 
  [Sin,Cos,0,0],
220
 
  [0,0,1,0],   
221
 
  [0,0,0,1]
222
 
  ];
223
 
  return MMulti(R, M);
224
 
}
225
 
 
226
 
function DrawQube() {
227
 
  // calc current normals
228
 
  var CurN = new Array();
229
 
  var i = 5;
230
 
  Q.LastPx = 0;
231
 
  for (; i > -1; i--) CurN[i] = VMulti2(MQube, Q.Normal[i]);
232
 
  if (CurN[0][2] < 0) {
233
 
    if (!Q.Line[0]) { DrawLine(Q[0], Q[1]); Q.Line[0] = true; };
234
 
    if (!Q.Line[1]) { DrawLine(Q[1], Q[2]); Q.Line[1] = true; };
235
 
    if (!Q.Line[2]) { DrawLine(Q[2], Q[3]); Q.Line[2] = true; };
236
 
    if (!Q.Line[3]) { DrawLine(Q[3], Q[0]); Q.Line[3] = true; };
237
 
  }
238
 
  if (CurN[1][2] < 0) {
239
 
    if (!Q.Line[2]) { DrawLine(Q[3], Q[2]); Q.Line[2] = true; };
240
 
    if (!Q.Line[9]) { DrawLine(Q[2], Q[6]); Q.Line[9] = true; };
241
 
    if (!Q.Line[6]) { DrawLine(Q[6], Q[7]); Q.Line[6] = true; };
242
 
    if (!Q.Line[10]) { DrawLine(Q[7], Q[3]); Q.Line[10] = true; };
243
 
  }
244
 
  if (CurN[2][2] < 0) {
245
 
    if (!Q.Line[4]) { DrawLine(Q[4], Q[5]); Q.Line[4] = true; };
246
 
    if (!Q.Line[5]) { DrawLine(Q[5], Q[6]); Q.Line[5] = true; };
247
 
    if (!Q.Line[6]) { DrawLine(Q[6], Q[7]); Q.Line[6] = true; };
248
 
    if (!Q.Line[7]) { DrawLine(Q[7], Q[4]); Q.Line[7] = true; };
249
 
  }
250
 
  if (CurN[3][2] < 0) {
251
 
    if (!Q.Line[4]) { DrawLine(Q[4], Q[5]); Q.Line[4] = true; };
252
 
    if (!Q.Line[8]) { DrawLine(Q[5], Q[1]); Q.Line[8] = true; };
253
 
    if (!Q.Line[0]) { DrawLine(Q[1], Q[0]); Q.Line[0] = true; };
254
 
    if (!Q.Line[11]) { DrawLine(Q[0], Q[4]); Q.Line[11] = true; };
255
 
  }
256
 
  if (CurN[4][2] < 0) {
257
 
    if (!Q.Line[11]) { DrawLine(Q[4], Q[0]); Q.Line[11] = true; };
258
 
    if (!Q.Line[3]) { DrawLine(Q[0], Q[3]); Q.Line[3] = true; };
259
 
    if (!Q.Line[10]) { DrawLine(Q[3], Q[7]); Q.Line[10] = true; };
260
 
    if (!Q.Line[7]) { DrawLine(Q[7], Q[4]); Q.Line[7] = true; };
261
 
  }
262
 
  if (CurN[5][2] < 0) {
263
 
    if (!Q.Line[8]) { DrawLine(Q[1], Q[5]); Q.Line[8] = true; };
264
 
    if (!Q.Line[5]) { DrawLine(Q[5], Q[6]); Q.Line[5] = true; };
265
 
    if (!Q.Line[9]) { DrawLine(Q[6], Q[2]); Q.Line[9] = true; };
266
 
    if (!Q.Line[1]) { DrawLine(Q[2], Q[1]); Q.Line[1] = true; };
267
 
  }
268
 
  Q.Line = [false,false,false,false,false,false,false,false,false,false,false,false];
269
 
  Q.LastPx = 0;
270
 
}
271
 
 
272
 
function Loop() {
273
 
  if (Testing.LoopCount > Testing.LoopMax) return;
274
 
  var TestingStr = String(Testing.LoopCount);
275
 
  while (TestingStr.length < 3) TestingStr = "0" + TestingStr;
276
 
  MTrans = Translate(I, -Q[8].V[0], -Q[8].V[1], -Q[8].V[2]);
277
 
  MTrans = RotateX(MTrans, 1);
278
 
  MTrans = RotateY(MTrans, 3);
279
 
  MTrans = RotateZ(MTrans, 5);
280
 
  MTrans = Translate(MTrans, Q[8].V[0], Q[8].V[1], Q[8].V[2]);
281
 
  MQube = MMulti(MTrans, MQube);
282
 
  var i = 8;
283
 
  for (; i > -1; i--) {
284
 
    Q[i].V = VMulti(MTrans, Q[i].V);
285
 
  }
286
 
  DrawQube();
287
 
  Testing.LoopCount++;
288
 
  Loop();
289
 
}
290
 
 
291
 
function Init(CubeSize) {
292
 
  // init/reset vars
293
 
  Origin.V = [150,150,20,1];
294
 
  Testing.LoopCount = 0;
295
 
  Testing.LoopMax = 50;
296
 
  Testing.TimeMax = 0;
297
 
  Testing.TimeAvg = 0;
298
 
  Testing.TimeMin = 0;
299
 
  Testing.TimeTemp = 0;
300
 
  Testing.TimeTotal = 0;
301
 
  Testing.Init = false;
302
 
 
303
 
  // transformation matrix
304
 
  MTrans = [
305
 
  [1,0,0,0],
306
 
  [0,1,0,0],
307
 
  [0,0,1,0],
308
 
  [0,0,0,1]
309
 
  ];
310
 
  
311
 
  // position information of qube
312
 
  MQube = [
313
 
  [1,0,0,0],
314
 
  [0,1,0,0],
315
 
  [0,0,1,0],
316
 
  [0,0,0,1]
317
 
  ];
318
 
  
319
 
  // entity matrix
320
 
  I = [
321
 
  [1,0,0,0],
322
 
  [0,1,0,0],
323
 
  [0,0,1,0],
324
 
  [0,0,0,1]
325
 
  ];
326
 
  
327
 
  // create qube
328
 
  Q[0] = new CreateP(-CubeSize,-CubeSize, CubeSize);
329
 
  Q[1] = new CreateP(-CubeSize, CubeSize, CubeSize);
330
 
  Q[2] = new CreateP( CubeSize, CubeSize, CubeSize);
331
 
  Q[3] = new CreateP( CubeSize,-CubeSize, CubeSize);
332
 
  Q[4] = new CreateP(-CubeSize,-CubeSize,-CubeSize);
333
 
  Q[5] = new CreateP(-CubeSize, CubeSize,-CubeSize);
334
 
  Q[6] = new CreateP( CubeSize, CubeSize,-CubeSize);
335
 
  Q[7] = new CreateP( CubeSize,-CubeSize,-CubeSize);
336
 
  
337
 
  // center of gravity
338
 
  Q[8] = new CreateP(0, 0, 0);
339
 
  
340
 
  // anti-clockwise edge check
341
 
  Q.Edge = [[0,1,2],[3,2,6],[7,6,5],[4,5,1],[4,0,3],[1,5,6]];
342
 
  
343
 
  // calculate squad normals
344
 
  Q.Normal = new Array();
345
 
  for (var i = 0; i < Q.Edge.length; i++) Q.Normal[i] = CalcNormal(Q[Q.Edge[i][0]].V, Q[Q.Edge[i][1]].V, Q[Q.Edge[i][2]].V);
346
 
  
347
 
  // line drawn ?
348
 
  Q.Line = [false,false,false,false,false,false,false,false,false,false,false,false];
349
 
  
350
 
  // create line pixels
351
 
  Q.NumPx = 9 * 2 * CubeSize;
352
 
  for (var i = 0; i < Q.NumPx; i++) CreateP(0,0,0);
353
 
  
354
 
  MTrans = Translate(MTrans, Origin.V[0], Origin.V[1], Origin.V[2]);
355
 
  MQube = MMulti(MTrans, MQube);
356
 
 
357
 
  var i = 0;
358
 
  for (; i < 9; i++) {
359
 
    Q[i].V = VMulti(MTrans, Q[i].V);
360
 
  }
361
 
  DrawQube();
362
 
  Testing.Init = true;
363
 
  Loop();
364
 
}
365
 
 
366
 
for ( var i = 20; i <= 160; i *= 2 ) {
367
 
  Init(i);
368
 
}
369
 
 
370
 
Q = null;
371
 
MTrans = null;
372
 
MQube = null;
373
 
I = null;
374
 
Origin = null;
375
 
Testing = null;
376
 
LoopTime = null;
377
 
DisplArea = null;
378
 
 
379
 
 
380
 
var _sunSpiderInterval = new Date() - _sunSpiderStartDate;
381
 
 
382
 
document.getElementById("console").innerHTML = _sunSpiderInterval;
383
 
</script>
384
 
 
385
 
 
386
 
</body>
387
 
</html>