js/src/parjs-benchmarks/edges.js

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     1 load(libdir + "util.js");
     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]];
    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 }
    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;
    30   function compute(x, y) {
    31       var totalX = 0;
    32       var totalY = 0;
    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);
    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       }
    47     return (Math.abs(totalX) + Math.abs(totalY))/8.0 | 0;
    48   }
    49 }
    51 function edgesParallel(data) {
    52   var pa = new ParallelArray([Height, Width], function (y, x) {
    53     var totalX = 0;
    54     var totalY = 0;
    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);
    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     }
    69     return (Math.abs(totalX) + Math.abs(totalY))/8.0 | 0;
    70   });
    71   return pa.flatten();
    72 }
    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]);
    80 benchmark("EDGES", 2, DEFAULT_MEASURE * 20,
    81           function() edgesSequentially(ArrInput, Width, Height),
    82           function() edgesParallel(ParArrInput2D));

mercurial