src/vs/platform/files/common/fileService.ts/FileService/onDidChangeFile
class FileService:	private onDidChangeFile(changes: readonly IFileChange[], caseSensitive: boolean): void {

		// Event #1: access to raw events goes out instantly
		{
			this._onDidChangeFilesRaw.fire({ changes });
		}

		// Event #2: immediately send out events for
		// explicitly watched resources by splitting
		// changes up into 2 buckets
		let explicitlyWatchedFileChanges: IFileChange[] | undefined = undefined;
		let implicitlyWatchedFileChanges: IFileChange[] | undefined = undefined;
		{
			for (const change of changes) {
				if (this.watchedResources.has(change.resource)) {
					if (!explicitlyWatchedFileChanges) {
						explicitlyWatchedFileChanges = [];
					}
					explicitlyWatchedFileChanges.push(change);
				} else {
					if (!implicitlyWatchedFileChanges) {
						implicitlyWatchedFileChanges = [];
					}
					implicitlyWatchedFileChanges.push(change);
				}
			}

			if (explicitlyWatchedFileChanges) {
				this._onDidFilesChange.fire(new FileChangesEvent(explicitlyWatchedFileChanges, !caseSensitive));
			}
		}

		// Event #3: implicitly watched resources get
		// throttled due to performance reasons
		if (implicitlyWatchedFileChanges) {
			const worker = caseSensitive ? this.caseSensitiveFileEventsWorker : this.caseInsensitiveFileEventsWorker;
			const worked = worker.work(implicitlyWatchedFileChanges);

			if (!worked && FileService.FILE_EVENTS_THROTTLING.warningscounter++ < 10) {
				this.logService.warn(`[File watcher]: started ignoring events due to too many file change events at once (incoming: ${implicitlyWatchedFileChanges.length}, most recent change: ${implicitlyWatchedFileChanges[0].resource.toString()}). Use 'files.watcherExclude' setting to exclude folders with lots of changing files (e.g. compilation output).`);
			}

			if (worker.pending > 0) {
				this.logService.trace(`[File watcher]: started throttling events due to large amount of file change events at once (pending: ${worker.pending}, most recent change: ${implicitlyWatchedFileChanges[0].resource.toString()}). Use 'files.watcherExclude' setting to exclude folders with lots of changing files (e.g. compilation output).`);
			}
		}
	}