Skip to content

Commit 558af41

Browse files
author
Avaer Kazmer
committed
Hack
1 parent f715173 commit 558af41

File tree

5 files changed

+50
-11
lines changed

5 files changed

+50
-11
lines changed

src/Graphics.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,9 @@ const _makeState = () => {
121121
HTMLCanvasElement.prototype.getContext = (oldGetContext => function getContext(type, init = {}) {
122122
const match = type.match(/^(?:experimental-)?(webgl2?)$/);
123123
if (match) {
124+
console.log('call ensure proxy context 1', !!GlobalContext.proxyContext);
124125
window[symbols.ensureProxyContext]();
126+
console.log('call ensure proxy context 2', !!GlobalContext.proxyContext);
125127

126128
const canvas = this;
127129
const gl = match[1] === 'webgl2' ? new WebGL2RenderingContext(canvas) : new WebGLRenderingContext(canvas);

src/Window.js

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -442,10 +442,14 @@ const _fetchText = src => fetch(src)
442442
}
443443
_tickLocalRafs();
444444
};
445-
const _renderChild = (window, layered) => window.runAsync({
446-
method: 'tickAnimationFrame',
447-
layered: layered && vrPresentState.layers.some(layer => layer.contentWindow === window),
448-
});
445+
const _renderChild = (window, layered) => {
446+
if (window.loaded) {
447+
window.runAsync({
448+
method: 'tickAnimationFrame',
449+
layered: layered && vrPresentState.layers.some(layer => layer.contentWindow === window),
450+
});
451+
}
452+
};
449453
const _render = layered => {
450454
for (let i = 0; i < windows.length; i++) {
451455
_renderChild(windows[i], layered);
@@ -458,17 +462,26 @@ const _fetchText = src => fetch(src)
458462
};
459463

460464
const _ensureProxyContext = () => {
465+
console.log('ensure proxy context 1', !!GlobalContext.proxyContext);
461466
if (!GlobalContext.proxyContext) {
467+
console.log('ensure proxy context 2');
462468
vrPresentState.responseAccepts.push(({result}) => {
469+
console.log('ensure proxy context 3', !!result);
463470
GlobalContext.proxyContext = result;
471+
console.log('ensure proxy context 4');
464472
});
465473

474+
console.log('ensure proxy context 5');
475+
466476
self._postMessageUp({
467477
method: 'request',
468478
type: 'makeProxyContext',
469479
keypath: [],
470480
});
481+
482+
console.log('ensure proxy context 6');
471483
}
484+
console.log('ensure proxy context 7');
472485
};
473486
const _makeMrDisplays = () => {
474487
const _onrequestpresent = async () => {

src/WindowBase.js

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,6 @@ const _oninitmessage = async e => {
124124
method: 'load',
125125
});
126126

127-
messagePort.addEventListener('message', _onmessageHandle);
128-
messagePort.start();
129127
/* console.log('flush messages', messageQueue.length);
130128
for (let i = 0; i < messageQueue.length; i++) {
131129
self.dispatchEvent(messageQueue[i]);
@@ -143,7 +141,9 @@ const _oninitmessage = async e => {
143141
self._postMessageUp = function _postMessageUp(data, transfer) {
144142
messagePort.postMessageSync(data, transfer);
145143
};
146-
const _onmessageHandle = e => {
144+
console.log('top passed handle message', messagePort.handleMessage);
145+
const {queue} = messagePort.handleMessage;
146+
messagePort.handleMessage = e => {
147147
const {data: m} = e;
148148

149149
switch (m.method) {
@@ -263,6 +263,15 @@ const _oninitmessage = async e => {
263263
default: throw new Error(`invalid method: ${JSON.stringify(m.method)}`);
264264
}
265265
};
266+
messagePort.handleMessage.lol = 'zol';
267+
messagePort.addEventListener('message', messagePort.handleMessage);
268+
messagePort.start();
269+
270+
console.log('child window flush queue', queue.length);
271+
for (let i = 0; i < queue.length; i++) {
272+
messagePort.handleMessage(queue[i]);
273+
}
274+
queue.length = 0;
266275

267276
// run init module
268277

src/WindowVm.js

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,10 @@ class WorkerVm extends EventTarget {
7171
messagePort: messageChannel.port2,
7272
},
7373
}));
74+
75+
if (!messageChannel.port2.handleMessage || !messageChannel.port2.handleMessage.lol) {
76+
console.warn('message handler not added!!!!!!!!!!!!!!!!!', messageChannel.port2.handleMessage, messageChannel.port2.handleMessage && messageChannel.port2.handleMessage.lol);
77+
}
7478

7579
accept();
7680
}, {
@@ -88,15 +92,16 @@ class WorkerVm extends EventTarget {
8892

8993
const messageChannel = new MessageChannel2();
9094
messageChannel.port2.postMessageSync = (data, transfers) => {
91-
messageChannel.port1.dispatchEvent(new MessageEvent('message', {data}));
95+
messageChannel.port1.handleMessage(new MessageEvent('message', {data}));
9296
};
9397
messageChannel.port1.postMessageSync = (data, transfers) => {
94-
messageChannel.port2.dispatchEvent(new MessageEvent('message', {data}));
98+
messageChannel.port2.handleMessage(new MessageEvent('message', {data}));
9599
};
96-
messageChannel.port1.addEventListener('message', e => {
100+
messageChannel.port1.handleMessage = e => {
97101
const {data: m} = e;
98102
switch (m.method) {
99103
case 'request': {
104+
console.log('handle request up', m);
100105
this.dispatchEvent(new CustomEvent('request', {
101106
detail: m,
102107
}));
@@ -147,9 +152,16 @@ class WorkerVm extends EventTarget {
147152
break;
148153
}
149154
}
150-
});
155+
};
156+
messageChannel.port1.addEventListener('message', messageChannel.port1.handleMessage);
151157
messageChannel.port1.start();
152158

159+
const queue = [];
160+
messageChannel.port2.handleMessage = e => {
161+
queue.push(e);
162+
};
163+
messageChannel.port2.handleMessage.queue = queue;
164+
153165
iframe._postMessageDown = function _postMessageDown(data, transfer) {
154166
messageChannel.port1.postMessageSync(data, transfer);
155167
};

src/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,8 +357,11 @@ const _handleRequestImmediate = req => {
357357

358358
switch (type) {
359359
case 'makeProxyContext': {
360+
console.log('make proxy context 1');
360361
const ctx = win.install();
362+
console.log('make proxy context 2', !!ctx);
361363
_respond(null, ctx);
364+
console.log('make proxy context 3', !!ctx);
362365
break;
363366
}
364367
case 'requestPresent': {

0 commit comments

Comments
 (0)