Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/editor/browser/gpu/bufferDirtyTracker.ts
3294 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
export interface IBufferDirtyTrackerReader {
7
/**
8
* The index of the first dirty index.
9
*/
10
readonly dataOffset: number | undefined;
11
/**
12
* The index of the last dirty index (inclusive).
13
*/
14
readonly dirtySize: number | undefined;
15
/**
16
* Whether the buffer is dirty.
17
*/
18
readonly isDirty: boolean;
19
/**
20
* Clear the dirty state.
21
*/
22
clear(): void;
23
}
24
25
/**
26
* A simple tracker for dirty regions in a buffer.
27
*/
28
export class BufferDirtyTracker implements IBufferDirtyTrackerReader {
29
30
private _startIndex: number | undefined;
31
private _endIndex: number | undefined;
32
33
get dataOffset(): number | undefined {
34
return this._startIndex;
35
}
36
37
get dirtySize(): number | undefined {
38
if (this._startIndex === undefined || this._endIndex === undefined) {
39
return undefined;
40
}
41
return this._endIndex - this._startIndex + 1;
42
}
43
44
get isDirty(): boolean { return this._startIndex !== undefined; }
45
46
/**
47
* Flag the index(es) as modified. Returns the index flagged.
48
* @param index An index to flag.
49
* @param length An optional length to flag. Defaults to 1.
50
*/
51
flag(index: number, length: number = 1): number {
52
this._flag(index);
53
if (length > 1) {
54
this._flag(index + length - 1);
55
}
56
return index;
57
}
58
59
private _flag(index: number) {
60
if (this._startIndex === undefined || index < this._startIndex) {
61
this._startIndex = index;
62
}
63
if (this._endIndex === undefined || index > this._endIndex) {
64
this._endIndex = index;
65
}
66
}
67
68
clear() {
69
this._startIndex = undefined;
70
this._endIndex = undefined;
71
}
72
}
73
74