mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-21 09:08:53 +01:00
fix kernel cache and add unit test for kernel reg.
This commit is contained in:
@@ -73,8 +73,8 @@ class ExtHostWebviewCommWrapper extends Disposable {
|
||||
}
|
||||
|
||||
export class ExtHostNotebookKernelProviderAdapter extends Disposable {
|
||||
private _kernelToFriendlyId = new Map<vscode.NotebookKernel, string>();
|
||||
private _friendlyIdToKernel = new Map<string, vscode.NotebookKernel>();
|
||||
private _kernelToFriendlyId = new ResourceMap<Map<vscode.NotebookKernel, string>>();
|
||||
private _friendlyIdToKernel = new ResourceMap<Map<string, vscode.NotebookKernel>>();
|
||||
constructor(
|
||||
private readonly _proxy: MainThreadNotebookShape,
|
||||
private readonly _handle: number,
|
||||
@@ -98,16 +98,16 @@ export class ExtHostNotebookKernelProviderAdapter extends Disposable {
|
||||
let kernel_unique_pool = 0;
|
||||
const kernelFriendlyIdCache = new Set<string>();
|
||||
|
||||
const kernelToFriendlyId = this._kernelToFriendlyId.get(document.uri);
|
||||
|
||||
const transformedData: INotebookKernelInfoDto2[] = data.map(kernel => {
|
||||
let friendlyId = this._kernelToFriendlyId.get(kernel);
|
||||
let friendlyId = kernelToFriendlyId?.get(kernel);
|
||||
if (friendlyId === undefined) {
|
||||
if (kernel.id && kernelFriendlyIdCache.has(kernel.id)) {
|
||||
friendlyId = `${this._extension.identifier.value}_${kernel.id}_${kernel_unique_pool++}`;
|
||||
} else {
|
||||
friendlyId = `${this._extension.identifier.value}_${kernel.id || UUID.generateUuid()}`;
|
||||
}
|
||||
|
||||
this._kernelToFriendlyId.set(kernel, friendlyId);
|
||||
}
|
||||
|
||||
newMap.set(kernel, friendlyId);
|
||||
@@ -127,22 +127,22 @@ export class ExtHostNotebookKernelProviderAdapter extends Disposable {
|
||||
};
|
||||
});
|
||||
|
||||
this._kernelToFriendlyId = newMap;
|
||||
|
||||
this._friendlyIdToKernel.clear();
|
||||
this._kernelToFriendlyId.forEach((value, key) => {
|
||||
this._friendlyIdToKernel.set(value, key);
|
||||
this._kernelToFriendlyId.set(document.uri, newMap);
|
||||
const friendlyIdToKernel = new Map<string, vscode.NotebookKernel>();
|
||||
newMap.forEach((value, key) => {
|
||||
friendlyIdToKernel.set(value, key);
|
||||
});
|
||||
|
||||
this._friendlyIdToKernel.set(document.uri, friendlyIdToKernel);
|
||||
return transformedData;
|
||||
}
|
||||
|
||||
getKernelByFriendlyId(kernelId: string) {
|
||||
return this._friendlyIdToKernel.get(kernelId);
|
||||
getKernelByFriendlyId(uri: URI, kernelId: string) {
|
||||
return this._friendlyIdToKernel.get(uri)?.get(kernelId);
|
||||
}
|
||||
|
||||
async resolveNotebook(kernelId: string, document: ExtHostNotebookDocument, webview: vscode.NotebookCommunication, token: CancellationToken) {
|
||||
const kernel = this._friendlyIdToKernel.get(kernelId);
|
||||
const kernel = this._friendlyIdToKernel.get(document.uri)?.get(kernelId);
|
||||
|
||||
if (kernel && this._provider.resolveKernel) {
|
||||
return this._provider.resolveKernel(kernel, document.notebookDocument, webview, token);
|
||||
@@ -150,7 +150,7 @@ export class ExtHostNotebookKernelProviderAdapter extends Disposable {
|
||||
}
|
||||
|
||||
async executeNotebook(kernelId: string, document: ExtHostNotebookDocument, cell: ExtHostCell | undefined) {
|
||||
const kernel = this._friendlyIdToKernel.get(kernelId);
|
||||
const kernel = this._friendlyIdToKernel.get(document.uri)?.get(kernelId);
|
||||
|
||||
if (!kernel) {
|
||||
return;
|
||||
@@ -164,7 +164,7 @@ export class ExtHostNotebookKernelProviderAdapter extends Disposable {
|
||||
}
|
||||
|
||||
async cancelNotebook(kernelId: string, document: ExtHostNotebookDocument, cell: ExtHostCell | undefined) {
|
||||
const kernel = this._friendlyIdToKernel.get(kernelId);
|
||||
const kernel = this._friendlyIdToKernel.get(document.uri)?.get(kernelId);
|
||||
|
||||
if (!kernel) {
|
||||
return;
|
||||
@@ -536,7 +536,7 @@ export class ExtHostNotebookController implements ExtHostNotebookShape {
|
||||
$acceptNotebookActiveKernelChange(event: { uri: UriComponents, providerHandle: number | undefined, kernelFriendlyId: string | undefined; }) {
|
||||
if (event.providerHandle !== undefined) {
|
||||
this._withAdapter(event.providerHandle, event.uri, async (adapter, document) => {
|
||||
const kernel = event.kernelFriendlyId ? adapter.getKernelByFriendlyId(event.kernelFriendlyId) : undefined;
|
||||
const kernel = event.kernelFriendlyId ? adapter.getKernelByFriendlyId(URI.revive(event.uri), event.kernelFriendlyId) : undefined;
|
||||
this._editors.forEach(editor => {
|
||||
if (editor.editor.notebookData === document) {
|
||||
editor.editor._acceptKernel(kernel);
|
||||
|
||||
Reference in New Issue
Block a user