process explorer - adopt custom hover (#248295)

This commit is contained in:
Benjamin Pasero
2025-05-07 12:44:06 +02:00
committed by GitHub
parent b2860b1398
commit ca8d986340
2 changed files with 46 additions and 6 deletions
@@ -27,6 +27,9 @@ import { RenderIndentGuides } from '../../../../base/browser/ui/tree/abstractTre
import { isWindows } from '../../../../base/common/platform.js';
import { IProcessMainService } from '../../../../platform/process/common/process.js';
import { Delayer } from '../../../../base/common/async.js';
import { IHoverService } from '../../../../platform/hover/browser/hover.js';
import { IManagedHover } from '../../../../base/browser/ui/hover/hover.js';
import { getDefaultHoverDelegate } from '../../../../base/browser/ui/hover/hoverDelegateFactory.js';
const DEBUG_FLAGS_PATTERN = /\s--inspect(?:-brk|port)?=(?<port>\d+)?/;
const DEBUG_PORT_PATTERN = /\s--inspect-port=(?<port>\d+)/;
@@ -153,6 +156,7 @@ interface IProcessItemTemplateData extends IProcessRowTemplateData {
readonly cpu: HTMLElement;
readonly memory: HTMLElement;
readonly pid: HTMLElement;
readonly hover?: ProcessItemHover;
}
class ProcessHeaderTreeRenderer implements ITreeRenderer<IProcessInformation, void, IProcessItemTemplateData> {
@@ -213,14 +217,48 @@ class ErrorRenderer implements ITreeRenderer<IRemoteDiagnosticError, void, IProc
}
}
class ProcessItemHover extends Disposable {
private hover: IManagedHover;
private content = '';
constructor(
container: HTMLElement,
@IHoverService hoverService: IHoverService
) {
super();
this.hover = this._register(hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), container, this.content));
}
update(content: string): void {
if (this.content !== content) {
this.content = content;
this.hover.update(content);
}
}
}
class ProcessRenderer implements ITreeRenderer<ProcessItem, void, IProcessItemTemplateData> {
readonly templateId: string = 'process';
constructor(private totalMem: number, private model: ProcessExplorerModel) { }
constructor(
private totalMem: number,
private model: ProcessExplorerModel,
@IHoverService private readonly hoverService: IHoverService
) { }
renderTemplate(container: HTMLElement): IProcessItemTemplateData {
return createRow(container);
const row = createRow(container);
return {
name: row.name,
cpu: row.cpu,
memory: row.memory,
pid: row.pid,
hover: new ProcessItemHover(row.name, this.hoverService)
};
}
renderElement(node: ITreeNode<ProcessItem, void>, index: number, templateData: IProcessItemTemplateData, height: number | undefined): void {
@@ -229,18 +267,18 @@ class ProcessRenderer implements ITreeRenderer<ProcessItem, void, IProcessItemTe
const pid = element.pid.toFixed(0);
templateData.name.textContent = this.model.getName(element.pid, element.name);
templateData.name.title = element.cmd;
templateData.cpu.textContent = element.load.toFixed(0);
templateData.pid.textContent = pid;
templateData.pid.parentElement!.id = `pid-${pid}`;
templateData.hover?.update(element.cmd);
const memory = isWindows ? element.mem : (this.totalMem * (element.mem / 100));
templateData.memory.textContent = (memory / ByteSize.MB).toFixed(0);
}
disposeTemplate(templateData: IProcessItemTemplateData): void {
// Nothing to do
templateData.hover?.dispose();
}
}
@@ -324,7 +362,7 @@ export class ProcessExplorerControl extends Disposable {
container.id = 'process-explorer';
const renderers = [
new ProcessRenderer(totalmem, this.model),
this.instantiationService.createInstance(ProcessRenderer, totalmem, this.model),
new ProcessHeaderTreeRenderer(),
new MachineRenderer(),
new ErrorRenderer()
@@ -33,6 +33,8 @@ export class ProcessExplorerEditorInput extends EditorInput {
override get typeId(): string { return ProcessExplorerEditorInput.ID; }
override get editorId(): string | undefined { return ProcessExplorerEditorInput.ID; }
override get capabilities(): EditorInputCapabilities { return EditorInputCapabilities.Readonly | EditorInputCapabilities.Singleton; }
readonly resource = ProcessExplorerEditorInput.RESOURCE;