Skip to content

Commit

Permalink
Encapsulate and test some Bucket logic that was broken by a prior commit
Browse files Browse the repository at this point in the history
  • Loading branch information
jfirebaugh committed Jul 7, 2016
1 parent 4a1d538 commit 2acb2e2
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 31 deletions.
32 changes: 32 additions & 0 deletions js/data/bucket.js
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,38 @@ Bucket.prototype.trimArrays = function() {
}
};

Bucket.prototype.isEmpty = function() {
for (var programName in this.arrayGroups) {
var arrayGroups = this.arrayGroups[programName];
for (var i = 0; i < arrayGroups.length; i++) {
var arrayGroup = arrayGroups[i];
if (arrayGroup.vertexArray.length > 0) {
return false;
}
}
}
return true;
};

Bucket.prototype.getTransferables = function(transferables) {
for (var programName in this.arrayGroups) {
var arrayGroups = this.arrayGroups[programName];
for (var i = 0; i < arrayGroups.length; i++) {
var arrayGroup = arrayGroups[i];
transferables.push(arrayGroup.vertexArray.arrayBuffer);
if (arrayGroup.elementArray) {
transferables.push(arrayGroup.elementArray.arrayBuffer);
}
if (arrayGroup.elementArray2) {
transferables.push(arrayGroup.elementArray2.arrayBuffer);
}
for (var paintArray in arrayGroup.paintArrays) {
transferables.push(arrayGroup.paintArrays[paintArray].arrayBuffer);
}
}
}
};

Bucket.prototype.setUniforms = function(gl, programName, program, layer, globalProperties) {
var uniforms = this.paintAttributes[programName][layer.id].uniforms;
for (var i = 0; i < uniforms.length; i++) {
Expand Down
36 changes: 5 additions & 31 deletions js/source/worker_tile.js
Original file line number Diff line number Diff line change
Expand Up @@ -216,8 +216,7 @@ WorkerTile.prototype.parse = function(data, layerFamilies, actor, rawTileData, c
var symbolInstancesArray = tile.symbolInstancesArray.serialize();
var symbolQuadsArray = tile.symbolQuadsArray.serialize();
var transferables = [rawTileData].concat(featureIndex_.transferables).concat(collisionTile_.transferables);

var nonEmptyBuckets = buckets.filter(isBucketEmpty);
var nonEmptyBuckets = buckets.filter(isBucketNonEmpty);

callback(null, {
buckets: nonEmptyBuckets.map(serializeBucket),
Expand Down Expand Up @@ -248,8 +247,7 @@ WorkerTile.prototype.redoPlacement = function(angle, pitch, showCollisionBoxes)
}

var collisionTile_ = collisionTile.serialize();

var nonEmptyBuckets = buckets.filter(isBucketEmpty);
var nonEmptyBuckets = buckets.filter(isBucketNonEmpty);

return {
result: {
Expand All @@ -260,20 +258,8 @@ WorkerTile.prototype.redoPlacement = function(angle, pitch, showCollisionBoxes)
};
};

function isBucketEmpty(bucket) {
for (var programName in bucket.arrayGroups) {
var programArrayGroups = bucket.arrayGroups[programName];
for (var k = 0; k < programArrayGroups.length; k++) {
var programArrayGroup = programArrayGroups[k];
for (var layoutOrPaint in programArrayGroup) {
var arrays = programArrayGroup[layoutOrPaint];
for (var bufferName in arrays) {
if (arrays[bufferName].length > 0) return true;
}
}
}
}
return false;
function isBucketNonEmpty(bucket) {
return !bucket.isEmpty();
}

function serializeBucket(bucket) {
Expand All @@ -283,19 +269,7 @@ function serializeBucket(bucket) {
function getTransferables(buckets) {
var transferables = [];
for (var i in buckets) {
var bucket = buckets[i];
for (var programName in bucket.arrayGroups) {
var programArrayGroups = bucket.arrayGroups[programName];
for (var k = 0; k < programArrayGroups.length; k++) {
var programArrayGroup = programArrayGroups[k];
for (var layoutOrPaint in programArrayGroup) {
var arrays = programArrayGroup[layoutOrPaint];
for (var bufferName in arrays) {
transferables.push(arrays[bufferName].arrayBuffer);
}
}
}
}
buckets[i].getTransferables(transferables);
}
return transferables;
}
Expand Down
31 changes: 31 additions & 0 deletions test/js/data/bucket.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,37 @@ test('Bucket', function(t) {
t.end();
});

t.test('isEmpty', function(t) {
var bucket = create()
t.ok(bucket.isEmpty());

bucket.createArrays();
t.ok(bucket.isEmpty());

bucket.features = [createFeature(17, 42)];
bucket.populateArrays();
t.ok(!bucket.isEmpty());

t.end();
});

t.test('getTransferables', function(t) {
var bucket = create();
bucket.features = [createFeature(17, 42)];
bucket.populateArrays();

var transferables = [];
bucket.getTransferables(transferables);

t.equal(4, transferables.length);
t.equal(bucket.arrayGroups.test[0].vertexArray.arrayBuffer, transferables[0]);
t.equal(bucket.arrayGroups.test[0].elementArray.arrayBuffer, transferables[1]);
t.equal(bucket.arrayGroups.test[0].elementArray2.arrayBuffer, transferables[2]);
t.equal(bucket.arrayGroups.test[0].paintArrays.layerid.arrayBuffer, transferables[3]);

t.end();
});

t.test('add features after resetting buffers', function(t) {
var bucket = create();

Expand Down

0 comments on commit 2acb2e2

Please sign in to comment.