Surface power API

This commit is contained in:
Christof Marti
2026-02-05 12:46:27 +01:00
parent 4b4cae374f
commit 2fd6a33c04
19 changed files with 832 additions and 3 deletions

View File

@@ -115,6 +115,7 @@ import { ExtHostWebviews } from './extHostWebview.js';
import { ExtHostWebviewPanels } from './extHostWebviewPanels.js';
import { ExtHostWebviewViews } from './extHostWebviewView.js';
import { IExtHostWindow } from './extHostWindow.js';
import { IExtHostPower } from './extHostPower.js';
import { IExtHostWorkspace } from './extHostWorkspace.js';
import { ExtHostChatContext } from './extHostChatContext.js';
@@ -149,6 +150,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
const extHostTunnelService = accessor.get(IExtHostTunnelService);
const extHostApiDeprecation = accessor.get(IExtHostApiDeprecationService);
const extHostWindow = accessor.get(IExtHostWindow);
const extHostPower = accessor.get(IExtHostPower);
const extHostUrls = accessor.get(IExtHostUrlsService);
const extHostSecretState = accessor.get(IExtHostSecretState);
const extHostEditorTabs = accessor.get(IExtHostEditorTabs);
@@ -169,6 +171,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
rpcProtocol.set(ExtHostContext.ExtHostStorage, extHostStorage);
rpcProtocol.set(ExtHostContext.ExtHostTunnelService, extHostTunnelService);
rpcProtocol.set(ExtHostContext.ExtHostWindow, extHostWindow);
rpcProtocol.set(ExtHostContext.ExtHostPower, extHostPower);
rpcProtocol.set(ExtHostContext.ExtHostUrls, extHostUrls);
rpcProtocol.set(ExtHostContext.ExtHostSecretState, extHostSecretState);
rpcProtocol.set(ExtHostContext.ExtHostTelemetry, extHostTelemetry);
@@ -480,6 +483,59 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
getDataChannel<T>(channelId: string): vscode.DataChannel<T> {
checkProposedApiEnabled(extension, 'dataChannels');
return extHostDataChannels.createDataChannel(extension, channelId);
},
get power(): typeof vscode.env.power {
checkProposedApiEnabled(extension, 'environmentPower');
return {
get onDidSuspend() {
return _asExtensionEvent(extHostPower.onDidSuspend);
},
get onDidResume() {
return _asExtensionEvent(extHostPower.onDidResume);
},
get onDidChangeOnBatteryPower() {
return _asExtensionEvent(extHostPower.onDidChangeOnBatteryPower);
},
get onDidChangeThermalState() {
return _asExtensionEvent(extHostPower.onDidChangeThermalState);
},
get onDidChangeSpeedLimit() {
return _asExtensionEvent(extHostPower.onDidChangeSpeedLimit);
},
get onWillShutdown() {
return _asExtensionEvent(extHostPower.onWillShutdown);
},
get onDidLockScreen() {
return _asExtensionEvent(extHostPower.onDidLockScreen);
},
get onDidUnlockScreen() {
return _asExtensionEvent(extHostPower.onDidUnlockScreen);
},
getSystemIdleState(idleThresholdSeconds: number) {
return extHostPower.getSystemIdleState(idleThresholdSeconds);
},
getSystemIdleTime() {
return extHostPower.getSystemIdleTime();
},
getCurrentThermalState() {
return extHostPower.getCurrentThermalState();
},
isOnBatteryPower() {
return extHostPower.isOnBatteryPower();
},
async startPowerSaveBlocker(type: vscode.env.power.PowerSaveBlockerType): Promise<vscode.env.power.PowerSaveBlocker> {
const blocker = await extHostPower.startPowerSaveBlocker(type);
return {
id: blocker.id,
get isStarted() {
return blocker.isStarted;
},
dispose() {
blocker.dispose();
}
};
}
};
}
};
if (!initData.environment.extensionTestsLocationURI) {