-
Notifications
You must be signed in to change notification settings - Fork 3.4k
/
Copy pathfetch-worker.js
126 lines (114 loc) · 4.28 KB
/
fetch-worker.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
/**
* @license
* Copyright 2016 The Emscripten Authors
* SPDX-License-Identifier: MIT
*/
#include "Fetch.js"
if (typeof Atomics === 'undefined') {
// Polyfill singlethreaded atomics ops from http://lars-t-hansen.github.io/ecmascript_sharedmem/shmem.html#Atomics.add
// No thread-safety needed since we don't have multithreading support.
Atomics = {};
Atomics['add'] = function(t, i, v) { var w = t[i]; t[i] += v; return w; }
Atomics['and'] = function(t, i, v) { var w = t[i]; t[i] &= v; return w; }
Atomics['compareExchange'] = function(t, i, e, r) { var w = t[i]; if (w == e) t[i] = r; return w; }
Atomics['exchange'] = function(t, i, v) { var w = t[i]; t[i] = v; return w; }
Atomics['wait'] = function(t, i, v, o) { if (t[i] != v) return 'not-equal'; else return 'timed-out'; }
Atomics['notify'] = function(t, i, c) { return 0; }
Atomics['wakeOrRequeue'] = function(t, i1, c, i2, v) { return 0; }
Atomics['isLockFree'] = function(s) { return true; }
Atomics['load'] = function(t, i) { return t[i]; }
Atomics['or'] = function(t, i, v) { var w = t[i]; t[i] |= v; return w; }
Atomics['store'] = function(t, i, v) { t[i] = v; return v; }
Atomics['sub'] = function(t, i, v) { var w = t[i]; t[i] -= v; return w; }
Atomics['xor'] = function(t, i, v) { var w = t[i]; t[i] ^= v; return w; }
}
var Atomics_add = Atomics.add;
var Atomics_and = Atomics.and;
var Atomics_compareExchange = Atomics.compareExchange;
var Atomics_exchange = Atomics.exchange;
var Atomics_wait = Atomics.wait;
var Atomics_wake = Atomics.wake;
var Atomics_wakeOrRequeue = Atomics.wakeOrRequeue;
var Atomics_isLockFree = Atomics.isLockFree;
var Atomics_load = Atomics.load;
var Atomics_or = Atomics.or;
var Atomics_store = Atomics.store;
var Atomics_sub = Atomics.sub;
var Atomics_xor = Atomics.xor;
function load1(ptr) { return HEAP8[ptr>>2]; }
function store1(ptr, value) { HEAP8[ptr>>2] = value; }
function load2(ptr) { return HEAP16[ptr>>2]; }
function store2(ptr, value) { HEAP16[ptr>>2] = value; }
function load4(ptr) { return HEAP32[ptr>>2]; }
function store4(ptr, value) { HEAP32[ptr>>2] = value; }
var ENVIRONMENT_IS_FETCH_WORKER = true;
var ENVIRONMENT_IS_WORKER = true;
var ENVIRONMENT_IS_PTHREAD = true;
var __pthread_is_main_runtime_thread=0;
var DYNAMICTOP_PTR = 0;
var nan = NaN;
var inf = Infinity;
function _emscripten_asm_const_v() {}
function assert(condition) {
if (!condition) console.error('assert failure!');
}
Fetch.staticInit();
var queuePtr = 0;
var buffer = null;
var STACKTOP = 0;
var STACK_MAX = 0;
var HEAP8 = null;
var HEAPU8 = null;
var HEAP16 = null;
var HEAPU16 = null;
var HEAP32 = null;
var HEAPU32 = null;
function processWorkQueue() {
if (!queuePtr) return;
var numQueuedItems = Atomics_load(HEAPU32, queuePtr + 4 >> 2);
if (numQueuedItems == 0) return;
var queuedOperations = Atomics_load(HEAPU32, queuePtr >> 2);
var queueSize = Atomics_load(HEAPU32, queuePtr + 8 >> 2);
for(var i = 0; i < numQueuedItems; ++i) {
var fetch = Atomics_load(HEAPU32, (queuedOperations >> 2)+i);
function successcb(fetch) {
Atomics.compareExchange(HEAPU32, fetch + {{{ C_STRUCTS.emscripten_fetch_t.__proxyState }}} >> 2, 1, 2);
Atomics.wake(HEAP32, fetch + {{{ C_STRUCTS.emscripten_fetch_t.__proxyState }}} >> 2, 1);
}
function errorcb(fetch) {
Atomics.compareExchange(HEAPU32, fetch + {{{ C_STRUCTS.emscripten_fetch_t.__proxyState }}} >> 2, 1, 2);
Atomics.wake(HEAP32, fetch + {{{ C_STRUCTS.emscripten_fetch_t.__proxyState }}} >> 2, 1);
}
function progresscb(fetch) {
}
try {
emscripten_start_fetch(fetch, successcb, errorcb, progresscb);
} catch(e) {
console.error(e);
}
/*
if (interval != undefined) {
clearInterval(interval);
interval = undefined;
}
*/
}
Atomics_store(HEAPU32, queuePtr + 4 >> 2, 0);
}
interval = 0;
this.onmessage = function(e) {
if (e.data.cmd == 'init') {
queuePtr = e.data.queuePtr;
buffer = e.data.buffer;
STACKTOP = e.data.STACKTOP;
STACK_MAX = e.data.STACK_MAX;
DYNAMICTOP_PTR = e.data.DYNAMICTOP_PTR;
HEAP8 = new Int8Array(buffer);
HEAPU8 = new Uint8Array(buffer);
HEAP16 = new Int16Array(buffer);
HEAPU16 = new Uint16Array(buffer);
HEAP32 = new Int32Array(buffer);
HEAPU32 = new Uint32Array(buffer);
interval = setInterval(processWorkQueue, 100);
}
}