Skip to content

Commit daa50ed

Browse files
author
Benjamin Pasero
committed
files2 - more use of streams
1 parent bfe321b commit daa50ed

3 files changed

Lines changed: 17 additions & 49 deletions

File tree

src/vs/base/common/buffer.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ export function writeableBufferStream(): VSBufferWriteableStream {
226226
}
227227

228228
export interface VSBufferWriteableStream extends VSBufferReadableStream {
229-
data(chunk: VSBuffer): void;
229+
write(chunk: VSBuffer): void;
230230
error(error: Error): void;
231231
end(result?: VSBuffer | Error): void;
232232
}
@@ -250,7 +250,7 @@ class VSBufferWriteableStreamImpl implements VSBufferWriteableStream {
250250
end: [] as { (): void }[]
251251
};
252252

253-
data(chunk: VSBuffer): void {
253+
write(chunk: VSBuffer): void {
254254
if (this.state.finished) {
255255
return;
256256
}
@@ -291,7 +291,7 @@ class VSBufferWriteableStreamImpl implements VSBufferWriteableStream {
291291
if (result instanceof Error) {
292292
this.error(result);
293293
} else if (result) {
294-
this.data(result);
294+
this.write(result);
295295
}
296296

297297
// flowing: send end event to listeners

src/vs/base/test/common/buffer.test.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ suite('Buffer', () => {
4848
});
4949

5050
await timeout(0);
51-
stream.data(VSBuffer.fromString('Hello'));
51+
stream.write(VSBuffer.fromString('Hello'));
5252
await timeout(0);
5353
stream.end(VSBuffer.fromString('World'));
5454

@@ -78,7 +78,7 @@ suite('Buffer', () => {
7878
});
7979

8080
await timeout(0);
81-
stream.data(VSBuffer.fromString('Hello'));
81+
stream.write(VSBuffer.fromString('Hello'));
8282
await timeout(0);
8383
stream.end(new Error());
8484

@@ -92,7 +92,7 @@ suite('Buffer', () => {
9292
const stream = writeableBufferStream();
9393

9494
await timeout(0);
95-
stream.data(VSBuffer.fromString('Hello'));
95+
stream.write(VSBuffer.fromString('Hello'));
9696
await timeout(0);
9797
stream.end(VSBuffer.fromString('World'));
9898

@@ -121,7 +121,7 @@ suite('Buffer', () => {
121121
const stream = writeableBufferStream();
122122

123123
await timeout(0);
124-
stream.data(VSBuffer.fromString('Hello'));
124+
stream.write(VSBuffer.fromString('Hello'));
125125
await timeout(0);
126126
stream.error(new Error());
127127

@@ -152,7 +152,7 @@ suite('Buffer', () => {
152152
const stream = writeableBufferStream();
153153

154154
await timeout(0);
155-
stream.data(VSBuffer.fromString('Hello'));
155+
stream.write(VSBuffer.fromString('Hello'));
156156
await timeout(0);
157157
stream.end(VSBuffer.fromString('World'));
158158

@@ -186,7 +186,7 @@ suite('Buffer', () => {
186186
});
187187

188188
await timeout(0);
189-
stream.data(VSBuffer.fromString('Hello'));
189+
stream.write(VSBuffer.fromString('Hello'));
190190
await timeout(0);
191191
stream.end(VSBuffer.fromString('World'));
192192

@@ -206,7 +206,7 @@ suite('Buffer', () => {
206206
});
207207

208208
await timeout(0);
209-
stream.data(VSBuffer.fromString('Hello'));
209+
stream.write(VSBuffer.fromString('Hello'));
210210
await timeout(0);
211211
stream.error(new Error());
212212
await timeout(0);

src/vs/workbench/services/files2/common/fileService2.ts

Lines changed: 7 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export class FileService2 extends Disposable implements IFileService {
4444

4545
_serviceBrand: ServiceIdentifier<any>;
4646

47-
private readonly BUFFER_SIZE = 16 * 1024;
47+
private readonly BUFFER_SIZE = 64 * 1024;
4848

4949
constructor(@ILogService private logService: ILogService) {
5050
super();
@@ -471,7 +471,7 @@ export class FileService2 extends Disposable implements IFileService {
471471

472472
// when buffer full, create a new one and emit it through stream
473473
if (posInBuffer === buffer.byteLength) {
474-
stream.data(buffer);
474+
stream.write(buffer);
475475

476476
buffer = VSBuffer.alloc(this.BUFFER_SIZE);
477477

@@ -481,7 +481,7 @@ export class FileService2 extends Disposable implements IFileService {
481481

482482
// wrap up with last buffer
483483
if (posInBuffer > 0) {
484-
stream.data(buffer.slice(0, posInBuffer));
484+
stream.write(buffer.slice(0, posInBuffer));
485485
}
486486
} catch (error) {
487487
throw error;
@@ -985,43 +985,11 @@ export class FileService2 extends Disposable implements IFileService {
985985

986986
private async doPipeBufferedToUnbuffered(sourceProvider: IFileSystemProviderWithOpenReadWriteCloseCapability, source: URI, targetProvider: IFileSystemProviderWithFileReadWriteCapability, target: URI): Promise<void> {
987987

988-
// Open handle
989-
const sourceHandle = await sourceProvider.open(source, { create: false });
990-
991-
try {
992-
const buffers: VSBuffer[] = [];
993-
994-
let buffer = VSBuffer.alloc(this.BUFFER_SIZE);
995-
996-
let posInFile = 0;
997-
let totalBytesRead = 0;
998-
let bytesRead = 0;
999-
let posInBuffer = 0;
1000-
do {
1001-
// read from source (sourceHandle) at current position (pos) into buffer (buffer) at
1002-
// buffer position (posInBuffer) up to the size of the buffer (buffer.byteLength).
1003-
bytesRead = await sourceProvider.read(sourceHandle, posInFile, buffer.buffer, posInBuffer, buffer.byteLength - posInBuffer);
1004-
1005-
posInFile += bytesRead;
1006-
posInBuffer += bytesRead;
1007-
totalBytesRead += bytesRead;
1008-
1009-
// when buffer full, create a new one
1010-
if (posInBuffer === buffer.byteLength) {
1011-
buffers.push(buffer);
1012-
buffer = VSBuffer.alloc(this.BUFFER_SIZE);
1013-
1014-
posInBuffer = 0;
1015-
}
1016-
} while (bytesRead > 0);
988+
// Read buffer via stream buffered
989+
const buffer = await streamToBuffer(this.readFileBuffered(sourceProvider, source, CancellationToken.None));
1017990

1018-
// Write buffer into target at once
1019-
await this.doWriteUnbuffered(targetProvider, target, VSBuffer.concat([...buffers, buffer.slice(0, posInBuffer)], totalBytesRead));
1020-
} catch (error) {
1021-
throw error;
1022-
} finally {
1023-
await sourceProvider.close(sourceHandle);
1024-
}
991+
// Write buffer into target at once
992+
await this.doWriteUnbuffered(targetProvider, target, buffer);
1025993
}
1026994

1027995
protected throwIfFileSystemIsReadonly<T extends IFileSystemProvider>(provider: T): T {

0 commit comments

Comments
 (0)