🐛 修复开始 webgl 终端显示错误.
This commit is contained in:
@@ -32,7 +32,6 @@ export interface ExecLogQueryResponse extends TableData, ExecLogQueryExtraRespon
|
|||||||
startTime: number;
|
startTime: number;
|
||||||
finishTime: number;
|
finishTime: number;
|
||||||
hostIdList: Array<number>;
|
hostIdList: Array<number>;
|
||||||
hosts: Array<ExecHostLogQueryResponse>;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import { Terminal } from '@xterm/xterm';
|
|||||||
import { FitAddon } from '@xterm/addon-fit';
|
import { FitAddon } from '@xterm/addon-fit';
|
||||||
import { SearchAddon } from '@xterm/addon-search';
|
import { SearchAddon } from '@xterm/addon-search';
|
||||||
import { WebLinksAddon } from '@xterm/addon-web-links';
|
import { WebLinksAddon } from '@xterm/addon-web-links';
|
||||||
import { WebglAddon } from '@xterm/addon-webgl';
|
import { CanvasAddon } from '@xterm/addon-canvas';
|
||||||
import { Unicode11Addon } from '@xterm/addon-unicode11';
|
import { Unicode11Addon } from '@xterm/addon-unicode11';
|
||||||
|
|
||||||
// 执行日志 appender 实现
|
// 执行日志 appender 实现
|
||||||
@@ -129,20 +129,20 @@ export default class LogAppender implements ILogAppender {
|
|||||||
// 初始化插件
|
// 初始化插件
|
||||||
initAddons(terminal: Terminal): XtermAddons {
|
initAddons(terminal: Terminal): XtermAddons {
|
||||||
const fit = new FitAddon();
|
const fit = new FitAddon();
|
||||||
|
const canvas = new CanvasAddon();
|
||||||
const search = new SearchAddon();
|
const search = new SearchAddon();
|
||||||
const webgl = new WebglAddon();
|
|
||||||
const weblink = new WebLinksAddon();
|
const weblink = new WebLinksAddon();
|
||||||
const unicode = new Unicode11Addon();
|
const unicode = new Unicode11Addon();
|
||||||
terminal.loadAddon(fit);
|
terminal.loadAddon(fit);
|
||||||
|
terminal.loadAddon(canvas);
|
||||||
terminal.loadAddon(search);
|
terminal.loadAddon(search);
|
||||||
terminal.loadAddon(webgl);
|
|
||||||
terminal.loadAddon(weblink);
|
terminal.loadAddon(weblink);
|
||||||
terminal.loadAddon(unicode);
|
terminal.loadAddon(unicode);
|
||||||
terminal.unicode.activeVersion = '11';
|
terminal.unicode.activeVersion = '11';
|
||||||
return {
|
return {
|
||||||
fit,
|
fit,
|
||||||
|
canvas,
|
||||||
search,
|
search,
|
||||||
webgl,
|
|
||||||
weblink,
|
weblink,
|
||||||
unicode
|
unicode
|
||||||
} as XtermAddons;
|
} as XtermAddons;
|
||||||
@@ -177,7 +177,7 @@ export default class LogAppender implements ILogAppender {
|
|||||||
if (this.client?.readyState === WebSocket.OPEN) {
|
if (this.client?.readyState === WebSocket.OPEN) {
|
||||||
this.client?.send('p');
|
this.client?.send('p');
|
||||||
}
|
}
|
||||||
}, 15000);
|
}, 15000) as unknown as number;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 设置当前元素
|
// 设置当前元素
|
||||||
|
|||||||
@@ -33,10 +33,14 @@ export default class SshSession extends BaseSession implements ISshSession {
|
|||||||
|
|
||||||
private readonly addons: XtermAddons;
|
private readonly addons: XtermAddons;
|
||||||
|
|
||||||
|
private readonly canUseWebgl: boolean;
|
||||||
|
|
||||||
constructor(tab: TerminalPanelTabItem,
|
constructor(tab: TerminalPanelTabItem,
|
||||||
channel: ITerminalChannel) {
|
channel: ITerminalChannel,
|
||||||
|
canUseWebgl: boolean) {
|
||||||
super(PanelSessionType.SSH.type, tab);
|
super(PanelSessionType.SSH.type, tab);
|
||||||
this.channel = channel;
|
this.channel = channel;
|
||||||
|
this.canUseWebgl = canUseWebgl;
|
||||||
this.status = TerminalStatus.CONNECTING;
|
this.status = TerminalStatus.CONNECTING;
|
||||||
this.inst = undefined as unknown as Terminal;
|
this.inst = undefined as unknown as Terminal;
|
||||||
this.handler = undefined as unknown as ISshSessionHandler;
|
this.handler = undefined as unknown as ISshSessionHandler;
|
||||||
@@ -173,7 +177,7 @@ export default class SshSession extends BaseSession implements ISshSession {
|
|||||||
if (preference.pluginsSetting.enableWeblinkPlugin) {
|
if (preference.pluginsSetting.enableWeblinkPlugin) {
|
||||||
this.addons.weblink = new WebLinksAddon();
|
this.addons.weblink = new WebLinksAddon();
|
||||||
}
|
}
|
||||||
if (preference.pluginsSetting.enableWebglPlugin) {
|
if (preference.pluginsSetting.enableWebglPlugin && this.canUseWebgl) {
|
||||||
// WebGL 渲染插件
|
// WebGL 渲染插件
|
||||||
this.addons.webgl = new WebglAddon(true);
|
this.addons.webgl = new WebglAddon(true);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -37,8 +37,14 @@ export default class TerminalSessionManager implements ITerminalSessionManager {
|
|||||||
async openSsh(tab: TerminalPanelTabItem, domRef: XtermDomRef) {
|
async openSsh(tab: TerminalPanelTabItem, domRef: XtermDomRef) {
|
||||||
// 初始化客户端
|
// 初始化客户端
|
||||||
await this.initChannel();
|
await this.initChannel();
|
||||||
|
// 获取会话数量
|
||||||
|
const sshSessionLen = Object.values(this.sessions)
|
||||||
|
.filter(s => s?.type === PanelSessionType.SSH.type)
|
||||||
|
.length;
|
||||||
|
// 检查 webgl 数量
|
||||||
|
const canUseWebgl = (sshSessionLen || 0) <= (navigator.hardwareConcurrency || 0) / 2;
|
||||||
// 新建会话
|
// 新建会话
|
||||||
const session = new SshSession(tab, this.channel);
|
const session = new SshSession(tab, this.channel, canUseWebgl);
|
||||||
// 初始化
|
// 初始化
|
||||||
session.init(domRef);
|
session.init(domRef);
|
||||||
// 等待前端渲染完成
|
// 等待前端渲染完成
|
||||||
|
|||||||
Reference in New Issue
Block a user