Switch Display.flush() to use a promise
That is the modern way to handle operations that cannot complete immediately.
This commit is contained in:
@@ -131,12 +131,10 @@ export default class RecordingPlayer {
|
||||
_doPacket() {
|
||||
// Avoid having excessive queue buildup in non-realtime mode
|
||||
if (this._trafficManagement && this._rfb._flushing) {
|
||||
const orig = this._rfb._display.onflush;
|
||||
this._rfb._display.onflush = () => {
|
||||
this._rfb._display.onflush = orig;
|
||||
this._rfb._onFlush();
|
||||
this._doPacket();
|
||||
};
|
||||
this._rfb.flush()
|
||||
.then(() => {
|
||||
this._doPacket();
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -150,13 +148,8 @@ export default class RecordingPlayer {
|
||||
|
||||
_finish() {
|
||||
if (this._rfb._display.pending()) {
|
||||
this._rfb._display.onflush = () => {
|
||||
if (this._rfb._flushing) {
|
||||
this._rfb._onFlush();
|
||||
}
|
||||
this._finish();
|
||||
};
|
||||
this._rfb._display.flush();
|
||||
this._rfb._display.flush()
|
||||
.then(() => { this._finish(); });
|
||||
} else {
|
||||
this._running = false;
|
||||
this._ws.onclose({code: 1000, reason: ""});
|
||||
|
||||
@@ -298,14 +298,11 @@ describe('Display/Canvas Helper', function () {
|
||||
expect(display).to.have.displayed(checkedData);
|
||||
});
|
||||
|
||||
it('should support drawing images via #imageRect', function (done) {
|
||||
it('should support drawing images via #imageRect', async function () {
|
||||
display.imageRect(0, 0, 4, 4, "image/png", makeImagePng(checkedData, 4, 4));
|
||||
display.flip();
|
||||
display.onflush = () => {
|
||||
expect(display).to.have.displayed(checkedData);
|
||||
done();
|
||||
};
|
||||
display.flush();
|
||||
await display.flush();
|
||||
expect(display).to.have.displayed(checkedData);
|
||||
});
|
||||
|
||||
it('should support blit images with true color via #blitImage', function () {
|
||||
@@ -360,12 +357,11 @@ describe('Display/Canvas Helper', function () {
|
||||
expect(img.addEventListener).to.have.been.calledOnce;
|
||||
});
|
||||
|
||||
it('should call callback when queue is flushed', function () {
|
||||
display.onflush = sinon.spy();
|
||||
it('should resolve promise when queue is flushed', async function () {
|
||||
display.fillRect(0, 0, 4, 4, [0, 0xff, 0]);
|
||||
expect(display.onflush).to.not.have.been.called;
|
||||
display.flush();
|
||||
expect(display.onflush).to.have.been.calledOnce;
|
||||
let promise = display.flush();
|
||||
expect(promise).to.be.an.instanceOf(Promise);
|
||||
await promise;
|
||||
});
|
||||
|
||||
it('should draw a blit image on type "blit"', function () {
|
||||
|
||||
@@ -44,7 +44,7 @@ describe('JPEG Decoder', function () {
|
||||
display.resize(4, 4);
|
||||
});
|
||||
|
||||
it('should handle JPEG rects', function (done) {
|
||||
it('should handle JPEG rects', async function () {
|
||||
let data = [
|
||||
// JPEG data
|
||||
0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46,
|
||||
@@ -151,14 +151,11 @@ describe('JPEG Decoder', function () {
|
||||
return diff < 5;
|
||||
}
|
||||
|
||||
display.onflush = () => {
|
||||
expect(display).to.have.displayed(targetData, almost);
|
||||
done();
|
||||
};
|
||||
display.flush();
|
||||
await display.flush();
|
||||
expect(display).to.have.displayed(targetData, almost);
|
||||
});
|
||||
|
||||
it('should handle JPEG rects without Huffman and quantification tables', function (done) {
|
||||
it('should handle JPEG rects without Huffman and quantification tables', async function () {
|
||||
let data1 = [
|
||||
// JPEG data
|
||||
0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46,
|
||||
@@ -289,10 +286,7 @@ describe('JPEG Decoder', function () {
|
||||
return diff < 5;
|
||||
}
|
||||
|
||||
display.onflush = () => {
|
||||
expect(display).to.have.displayed(targetData, almost);
|
||||
done();
|
||||
};
|
||||
display.flush();
|
||||
await display.flush();
|
||||
expect(display).to.have.displayed(targetData, almost);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -295,7 +295,7 @@ describe('Tight Decoder', function () {
|
||||
expect(display).to.have.displayed(targetData);
|
||||
});
|
||||
|
||||
it('should handle JPEG rects', function (done) {
|
||||
it('should handle JPEG rects', async function () {
|
||||
let data = [
|
||||
// Control bytes
|
||||
0x90, 0xd6, 0x05,
|
||||
@@ -410,10 +410,7 @@ describe('Tight Decoder', function () {
|
||||
return diff < 5;
|
||||
}
|
||||
|
||||
display.onflush = () => {
|
||||
expect(display).to.have.displayed(targetData, almost);
|
||||
done();
|
||||
};
|
||||
display.flush();
|
||||
await display.flush();
|
||||
expect(display).to.have.displayed(targetData, almost);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -44,7 +44,7 @@ describe('TightPng Decoder', function () {
|
||||
display.resize(4, 4);
|
||||
});
|
||||
|
||||
it('should handle the TightPng encoding', function (done) {
|
||||
it('should handle the TightPng encoding', async function () {
|
||||
let data = [
|
||||
// Control bytes
|
||||
0xa0, 0xb4, 0x04,
|
||||
@@ -139,10 +139,7 @@ describe('TightPng Decoder', function () {
|
||||
return diff < 30;
|
||||
}
|
||||
|
||||
display.onflush = () => {
|
||||
expect(display).to.have.displayed(targetData, almost);
|
||||
done();
|
||||
};
|
||||
display.flush();
|
||||
await display.flush();
|
||||
expect(display).to.have.displayed(targetData, almost);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user