~ubuntu-branches/ubuntu/vivid/mozjs24/vivid

« back to all changes in this revision

Viewing changes to js/src/parjs-benchmarks/edges.js

  • Committer: Package Import Robot
  • Author(s): Tim Lunn
  • Date: 2014-02-11 21:55:34 UTC
  • Revision ID: package-import@ubuntu.com-20140211215534-m1zyq5aj59md3y07
Tags: upstream-24.2.0
ImportĀ upstreamĀ versionĀ 24.2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
load(libdir + "util.js");
 
2
 
 
3
var SobelX = [[-1.0,  0.0,  1.0],
 
4
              [-2.0,  0.0,  2.0],
 
5
              [-1.0,  0.0,  1.0]];
 
6
var SobelY = [[ 1.0,  2.0,  1.0],
 
7
              [ 0.0,  0.0,  0.0],
 
8
              [-1.0, -2.0, -1.0]];
 
9
 
 
10
function stripedImage(w, h) {
 
11
  var resultArray = new Array(w * h);
 
12
  for (var y = 0; y < h; y++) {
 
13
    for (var x = 0; x < w; x++) {
 
14
      resultArray[y*w + x] = (Math.abs(x%100-y%100) < 10) ? 32 : 0;
 
15
    }
 
16
  }
 
17
  return resultArray;
 
18
}
 
19
 
 
20
function edgesSequentially(data, width, height) {
 
21
  var data1 = new Array(width * height);
 
22
  for (var y = 0; y < height; y++) {
 
23
    for (var x = 0; x < width; x++) {
 
24
      var total = compute(x, y);
 
25
      data1[y*width + x] = total | 0;
 
26
    }
 
27
  }
 
28
  return data1;
 
29
 
 
30
  function compute(x, y) {
 
31
      var totalX = 0;
 
32
      var totalY = 0;
 
33
 
 
34
      var offYMin = (y == 0 ? 0 : -1);
 
35
      var offYMax = (y == height - 1 ? 0 : 1);
 
36
      var offXMin = (x == 0 ? 0 : -1);
 
37
      var offXMax = (x == width - 1 ? 0 : 1);
 
38
 
 
39
      for (var offY = offYMin; offY <= offYMax; offY++) {
 
40
        for (var offX = offXMin; offX <= offXMax; offX++) {
 
41
          var e = data[(y + offY) * width + x + offX];
 
42
          totalX += e * SobelX[offY + 1][offX + 1];
 
43
          totalY += e * SobelY[offY + 1][offX + 1];
 
44
        }
 
45
      }
 
46
 
 
47
    return (Math.abs(totalX) + Math.abs(totalY))/8.0 | 0;
 
48
  }
 
49
}
 
50
 
 
51
function edgesParallel(data) {
 
52
  var pa = new ParallelArray([Height, Width], function (y, x) {
 
53
    var totalX = 0;
 
54
    var totalY = 0;
 
55
 
 
56
    var offYMin = (y == 0 ? 0 : -1);
 
57
    var offYMax = (y == Height - 1 ? 0 : 1);
 
58
    var offXMin = (x == 0 ? 0 : -1);
 
59
    var offXMax = (x == Width - 1 ? 0 : 1);
 
60
 
 
61
    for (var offY = offYMin; offY <= offYMax; offY++) {
 
62
      for (var offX = offXMin; offX <= offXMax; offX++) {
 
63
        var e = data.get(y + offY, x + offX);
 
64
        totalX += e * SobelX[offY + 1][offX + 1];
 
65
        totalY += e * SobelY[offY + 1][offX + 1];
 
66
      }
 
67
    }
 
68
 
 
69
    return (Math.abs(totalX) + Math.abs(totalY))/8.0 | 0;
 
70
  });
 
71
  return pa.flatten();
 
72
}
 
73
 
 
74
var Width = 1024;
 
75
var Height = 768;
 
76
var ArrInput = stripedImage(Width, Height);
 
77
var ParArrInput2D = new ParallelArray([Height, Width],
 
78
                                      function (y, x) ArrInput[y*Width + x]);
 
79
 
 
80
benchmark("EDGES", 2, DEFAULT_MEASURE * 20,
 
81
          function() edgesSequentially(ArrInput, Width, Height),
 
82
          function() edgesParallel(ParArrInput2D));