Path: blob/main/src/vs/editor/browser/gpu/bufferDirtyTracker.ts
3294 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*--------------------------------------------------------------------------------------------*/45export interface IBufferDirtyTrackerReader {6/**7* The index of the first dirty index.8*/9readonly dataOffset: number | undefined;10/**11* The index of the last dirty index (inclusive).12*/13readonly dirtySize: number | undefined;14/**15* Whether the buffer is dirty.16*/17readonly isDirty: boolean;18/**19* Clear the dirty state.20*/21clear(): void;22}2324/**25* A simple tracker for dirty regions in a buffer.26*/27export class BufferDirtyTracker implements IBufferDirtyTrackerReader {2829private _startIndex: number | undefined;30private _endIndex: number | undefined;3132get dataOffset(): number | undefined {33return this._startIndex;34}3536get dirtySize(): number | undefined {37if (this._startIndex === undefined || this._endIndex === undefined) {38return undefined;39}40return this._endIndex - this._startIndex + 1;41}4243get isDirty(): boolean { return this._startIndex !== undefined; }4445/**46* Flag the index(es) as modified. Returns the index flagged.47* @param index An index to flag.48* @param length An optional length to flag. Defaults to 1.49*/50flag(index: number, length: number = 1): number {51this._flag(index);52if (length > 1) {53this._flag(index + length - 1);54}55return index;56}5758private _flag(index: number) {59if (this._startIndex === undefined || index < this._startIndex) {60this._startIndex = index;61}62if (this._endIndex === undefined || index > this._endIndex) {63this._endIndex = index;64}65}6667clear() {68this._startIndex = undefined;69this._endIndex = undefined;70}71}727374