Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(509)

Side by Side Diff: pkg/front_end/lib/src/incremental_kernel_generator_impl.dart

Issue 2929363002: Implement GC for FileState(s). (Closed)
Patch Set: Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 import 'dart:async'; 5 import 'dart:async';
6 import 'dart:io'; 6 import 'dart:io';
7 7
8 import 'package:front_end/file_system.dart'; 8 import 'package:front_end/file_system.dart';
9 import 'package:front_end/incremental_kernel_generator.dart'; 9 import 'package:front_end/incremental_kernel_generator.dart';
10 import 'package:front_end/src/base/api_signature.dart'; 10 import 'package:front_end/src/base/api_signature.dart';
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 /// The set of absolute file URIs that were reported through [invalidate] 72 /// The set of absolute file URIs that were reported through [invalidate]
73 /// and not checked for actual changes yet. 73 /// and not checked for actual changes yet.
74 final Set<Uri> _invalidatedFiles = new Set<Uri>(); 74 final Set<Uri> _invalidatedFiles = new Set<Uri>();
75 75
76 IncrementalKernelGeneratorImpl( 76 IncrementalKernelGeneratorImpl(
77 this._options, this._uriTranslator, this._entryPoint, 77 this._options, this._uriTranslator, this._entryPoint,
78 {WatchUsedFilesFn watch}) 78 {WatchUsedFilesFn watch})
79 : _logger = _options.logger, 79 : _logger = _options.logger,
80 _byteStore = _options.byteStore { 80 _byteStore = _options.byteStore {
81 _computeSalt(); 81 _computeSalt();
82
83 Future<Null> onFileAdded(Uri uri) {
84 if (watch != null) {
85 return watch(uri, true);
86 }
87 return new Future.value();
88 }
89
82 _fsState = new FileSystemState( 90 _fsState = new FileSystemState(
83 _options.fileSystem, _uriTranslator, _salt, (uri) => watch(uri, true)); 91 _options.fileSystem, _uriTranslator, _salt, onFileAdded);
84 } 92 }
85 93
86 @override 94 @override
87 Future<DeltaProgram> computeDelta() async { 95 Future<DeltaProgram> computeDelta() async {
88 return await _logger.runAsync('Compute delta', () async { 96 return await _logger.runAsync('Compute delta', () async {
89 await _refreshInvalidatedFiles(); 97 await _refreshInvalidatedFiles();
90 98
91 // Ensure that the graph starting at the entry point is ready. 99 // Ensure that the graph starting at the entry point is ready.
92 FileState entryLibrary = 100 FileState entryLibrary =
93 await _logger.runAsync('Build graph of files', () async { 101 await _logger.runAsync('Build graph of files', () async {
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 _invalidatedFiles.clear(); 305 _invalidatedFiles.clear();
298 306
299 // Refresh the files. 307 // Refresh the files.
300 for (var fileUri in invalidatedFiles) { 308 for (var fileUri in invalidatedFiles) {
301 var file = _fsState.getFileByFileUri(fileUri); 309 var file = _fsState.getFileByFileUri(fileUri);
302 if (file != null) { 310 if (file != null) {
303 _logger.writeln('Refresh $fileUri'); 311 _logger.writeln('Refresh $fileUri');
304 await file.refresh(); 312 await file.refresh();
305 } 313 }
306 } 314 }
315
316 // The file graph might have changed, perform GC.
317 _fsState.gc(_entryPoint);
307 }); 318 });
308 } 319 }
309 320
310 List<int> _writeProgramBytes(Program program, bool filter(Library library)) { 321 List<int> _writeProgramBytes(Program program, bool filter(Library library)) {
311 ByteSink byteSink = new ByteSink(); 322 ByteSink byteSink = new ByteSink();
312 new LimitedBinaryPrinter(byteSink, filter).writeProgramFile(program); 323 new LimitedBinaryPrinter(byteSink, filter).writeProgramFile(program);
313 return byteSink.builder.takeBytes(); 324 return byteSink.builder.takeBytes();
314 } 325 }
315 } 326 }
316 327
317 /// Compilation result for a library cycle. 328 /// Compilation result for a library cycle.
318 class _LibraryCycleResult { 329 class _LibraryCycleResult {
319 final LibraryCycle cycle; 330 final LibraryCycle cycle;
320 331
321 /// The signature of the result. 332 /// The signature of the result.
322 /// 333 ///
323 /// Currently it is based on the full content of the transitive closure of 334 /// Currently it is based on the full content of the transitive closure of
324 /// the [cycle] files and all its dependencies. 335 /// the [cycle] files and all its dependencies.
325 /// TODO(scheglov) Not used yet. 336 /// TODO(scheglov) Not used yet.
326 /// TODO(scheglov) Use API signatures. 337 /// TODO(scheglov) Use API signatures.
327 /// TODO(scheglov) Or use tree shaking and compute signatures of outlines. 338 /// TODO(scheglov) Or use tree shaking and compute signatures of outlines.
328 final String signature; 339 final String signature;
329 340
330 /// Kernel libraries for libraries in the [cycle]. Bodies of dependencies 341 /// Kernel libraries for libraries in the [cycle]. Bodies of dependencies
331 /// are not included, but but references to those dependencies are included. 342 /// are not included, but but references to those dependencies are included.
332 final List<Library> kernelLibraries; 343 final List<Library> kernelLibraries;
333 344
334 _LibraryCycleResult(this.cycle, this.signature, this.kernelLibraries); 345 _LibraryCycleResult(this.cycle, this.signature, this.kernelLibraries);
335 } 346 }
OLDNEW
« no previous file with comments | « pkg/front_end/lib/src/incremental/file_state.dart ('k') | pkg/front_end/test/src/incremental/file_state_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698