Sat, 03 Jan 2015 20:18:00 +0100
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));