mirror of
https://github.com/gnh1201/welsonjs.git
synced 2025-05-18 07:31:04 +00:00
73 lines
1.9 KiB
JavaScript
73 lines
1.9 KiB
JavaScript
/*!
|
|
{
|
|
"name": "Transferables Objects",
|
|
"property": "transferables",
|
|
"tags": ["performance", "workers"],
|
|
"builderAliases": ["transferables"],
|
|
"notes": [{
|
|
"name": "Transferable Objects: Lightning Fast!",
|
|
"href": "https://developers.google.com/web/updates/2011/12/Transferable-Objects-Lightning-Fast"
|
|
}],
|
|
"async": true
|
|
}
|
|
!*/
|
|
/* DOC
|
|
Detects whether web workers can use `transferables` objects.
|
|
*/
|
|
define(['Modernizr', 'addTest', 'test/blob', 'test/url/bloburls', 'test/workers/webworkers', 'test/typed-arrays'], function(Modernizr, addTest) {
|
|
Modernizr.addAsyncTest(function() {
|
|
var prerequisites = !!(Modernizr.blobconstructor &&
|
|
Modernizr.bloburls &&
|
|
Modernizr.webworkers &&
|
|
Modernizr.typedarrays);
|
|
|
|
// Early exit
|
|
if (!prerequisites) {
|
|
return addTest('transferables', false);
|
|
}
|
|
|
|
// Proper test if prerequisites are met
|
|
try {
|
|
var buffer,
|
|
scriptText = 'var hello = "world"',
|
|
blob = new Blob([scriptText], {type: 'text/javascript'}),
|
|
url = URL.createObjectURL(blob),
|
|
worker = new Worker(url),
|
|
timeout;
|
|
|
|
// Just in case...
|
|
worker.onerror = fail;
|
|
timeout = setTimeout(fail, 200);
|
|
|
|
// Building an minimal array buffer to send to the worker
|
|
buffer = new ArrayBuffer(1);
|
|
|
|
// Sending the buffer to the worker
|
|
worker.postMessage(buffer, [buffer]);
|
|
|
|
// If length of buffer is now 0, transferables are working
|
|
addTest('transferables', buffer.byteLength === 0);
|
|
cleanup();
|
|
} catch (e) {
|
|
fail();
|
|
}
|
|
|
|
function fail() {
|
|
addTest('transferables', false);
|
|
cleanup();
|
|
}
|
|
|
|
function cleanup() {
|
|
if (url) {
|
|
URL.revokeObjectURL(url);
|
|
}
|
|
if (worker) {
|
|
worker.terminate();
|
|
}
|
|
if (timeout) {
|
|
clearTimeout(timeout);
|
|
}
|
|
}
|
|
});
|
|
});
|