Path: blob/main/src/vs/workbench/contrib/accessibilitySignals/browser/accessibilitySignalDebuggerContribution.ts
3296 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { Disposable, IDisposable, toDisposable } from '../../../../base/common/lifecycle.js';6import { autorunWithStore, observableFromEvent } from '../../../../base/common/observable.js';7import { IAccessibilitySignalService, AccessibilitySignal, AccessibilitySignalService } from '../../../../platform/accessibilitySignal/browser/accessibilitySignalService.js';8import { IWorkbenchContribution } from '../../../common/contributions.js';9import { IDebugService, IDebugSession } from '../../debug/common/debug.js';1011export class AccessibilitySignalLineDebuggerContribution12extends Disposable13implements IWorkbenchContribution {1415constructor(16@IDebugService debugService: IDebugService,17@IAccessibilitySignalService private readonly accessibilitySignalService: AccessibilitySignalService,18) {19super();2021const isEnabled = observableFromEvent(this,22accessibilitySignalService.onSoundEnabledChanged(AccessibilitySignal.onDebugBreak),23() => accessibilitySignalService.isSoundEnabled(AccessibilitySignal.onDebugBreak)24);25this._register(autorunWithStore((reader, store) => {26/** @description subscribe to debug sessions */27if (!isEnabled.read(reader)) {28return;29}3031const sessionDisposables = new Map<IDebugSession, IDisposable>();32store.add(toDisposable(() => {33sessionDisposables.forEach(d => d.dispose());34sessionDisposables.clear();35}));3637store.add(38debugService.onDidNewSession((session) =>39sessionDisposables.set(session, this.handleSession(session))40)41);4243store.add(debugService.onDidEndSession(({ session }) => {44sessionDisposables.get(session)?.dispose();45sessionDisposables.delete(session);46}));4748debugService49.getModel()50.getSessions()51.forEach((session) =>52sessionDisposables.set(session, this.handleSession(session))53);54}));55}5657private handleSession(session: IDebugSession): IDisposable {58return session.onDidChangeState(e => {59const stoppedDetails = session.getStoppedDetails();60const BREAKPOINT_STOP_REASON = 'breakpoint';61if (stoppedDetails && stoppedDetails.reason === BREAKPOINT_STOP_REASON) {62this.accessibilitySignalService.playSignal(AccessibilitySignal.onDebugBreak);63}64});65}66}676869