commit
519a40213b
|
@ -21,6 +21,8 @@ export default class Display {
|
|||
this._fbWidth = 0;
|
||||
this._fbHeight = 0;
|
||||
|
||||
this._renderMs = 0;
|
||||
|
||||
this._prevDrawStyle = "";
|
||||
|
||||
Log.Debug(">> Display.constructor");
|
||||
|
@ -91,6 +93,13 @@ export default class Display {
|
|||
return this._fbHeight;
|
||||
}
|
||||
|
||||
get renderMs() {
|
||||
return this._renderMs;
|
||||
}
|
||||
set renderMs(val) {
|
||||
this._renderMs = val;
|
||||
}
|
||||
|
||||
// ===== PUBLIC METHODS =====
|
||||
|
||||
viewportChangePos(deltaX, deltaY) {
|
||||
|
@ -470,6 +479,7 @@ export default class Display {
|
|||
|
||||
_scanRenderQ() {
|
||||
let ready = true;
|
||||
let before = Date.now();
|
||||
while (ready && this._renderQ.length > 0) {
|
||||
const a = this._renderQ[0];
|
||||
switch (a.type) {
|
||||
|
@ -513,5 +523,8 @@ export default class Display {
|
|||
this._flushing = false;
|
||||
this.onflush();
|
||||
}
|
||||
|
||||
let elapsed = Date.now() - before;
|
||||
this._renderMs += elapsed;
|
||||
}
|
||||
}
|
||||
|
|
39
core/rfb.js
39
core/rfb.js
|
@ -142,6 +142,8 @@ export default class RFB extends EventTargetMixin {
|
|||
this._maxVideoResolutionX = 960;
|
||||
this._maxVideoResolutionY = 540;
|
||||
|
||||
this._trackFrameStats = false;
|
||||
|
||||
this._clipboardText = null;
|
||||
this._clipboardServerCapabilitiesActions = {};
|
||||
this._clipboardServerCapabilitiesFormats = {};
|
||||
|
@ -2451,11 +2453,18 @@ export default class RFB extends EventTargetMixin {
|
|||
let first, ret;
|
||||
switch (msgType) {
|
||||
case 0: // FramebufferUpdate
|
||||
let before = performance.now();
|
||||
this._display.renderMs = 0;
|
||||
ret = this._framebufferUpdate();
|
||||
if (ret && !this._enabledContinuousUpdates) {
|
||||
RFB.messages.fbUpdateRequest(this._sock, true, 0, 0,
|
||||
this._fbWidth, this._fbHeight);
|
||||
}
|
||||
let elapsed = performance.now() - before;
|
||||
if (this._trackFrameStats) {
|
||||
RFB.messages.sendFrameStats(this._sock, elapsed, this._display.renderMs);
|
||||
this._trackFrameStats = false;
|
||||
}
|
||||
return ret;
|
||||
|
||||
case 1: // SetColorMapEntries
|
||||
|
@ -2488,6 +2497,10 @@ export default class RFB extends EventTargetMixin {
|
|||
case 178: // KASM bottleneck stats
|
||||
return this._handle_server_stats_msg();
|
||||
|
||||
case 179: // KASM requesting frame stats
|
||||
this._trackFrameStats = true;
|
||||
return true;
|
||||
|
||||
case 248: // ServerFence
|
||||
return this._handleServerFenceMsg();
|
||||
|
||||
|
@ -3236,6 +3249,32 @@ RFB.messages = {
|
|||
sock.flush();
|
||||
},
|
||||
|
||||
sendFrameStats(sock, allMs, renderMs) {
|
||||
const buff = sock._sQ;
|
||||
const offset = sock._sQlen;
|
||||
|
||||
if (buff == null) { return; }
|
||||
|
||||
buff[offset] = 179; // msg-type
|
||||
|
||||
buff[offset + 1] = 0; // padding
|
||||
buff[offset + 2] = 0; // padding
|
||||
buff[offset + 3] = 0; // padding
|
||||
|
||||
buff[offset + 4] = allMs >> 24;
|
||||
buff[offset + 5] = allMs >> 16;
|
||||
buff[offset + 6] = allMs >> 8;
|
||||
buff[offset + 7] = allMs;
|
||||
|
||||
buff[offset + 8] = renderMs >> 24;
|
||||
buff[offset + 9] = renderMs >> 16;
|
||||
buff[offset + 10] = renderMs >> 8;
|
||||
buff[offset + 11] = renderMs;
|
||||
|
||||
sock._sQlen += 12;
|
||||
sock.flush();
|
||||
},
|
||||
|
||||
|
||||
enableContinuousUpdates(sock, enable, x, y, width, height) {
|
||||
const buff = sock._sQ;
|
||||
|
|
Loading…
Reference in New Issue