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

Side by Side Diff: utils/kernel-service/kernel-service.dart

Issue 2925953002: Add integration test: hot reload + incremental compiler (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) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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 /// This is an interface to the Dart Kernel parser and Kernel binary generator. 5 /// This is an interface to the Dart Kernel parser and Kernel binary generator.
6 /// 6 ///
7 /// It is used by the kernel-isolate to load Dart source code and generate 7 /// It is used by the kernel-isolate to load Dart source code and generate
8 /// Kernel binary format. 8 /// Kernel binary format.
9 /// 9 ///
10 /// This is either invoked as the root script of the Kernel isolate when used 10 /// This is either invoked as the root script of the Kernel isolate when used
(...skipping 11 matching lines...) Expand all
22 22
23 import 'dart:async'; 23 import 'dart:async';
24 import 'dart:io' hide FileSystemEntity; 24 import 'dart:io' hide FileSystemEntity;
25 import 'dart:isolate'; 25 import 'dart:isolate';
26 26
27 import 'package:front_end/file_system.dart'; 27 import 'package:front_end/file_system.dart';
28 import 'package:front_end/memory_file_system.dart'; 28 import 'package:front_end/memory_file_system.dart';
29 import 'package:front_end/physical_file_system.dart'; 29 import 'package:front_end/physical_file_system.dart';
30 import 'package:front_end/src/fasta/vm.dart' 30 import 'package:front_end/src/fasta/vm.dart'
31 show CompilationResult, Status, parseScriptInFileSystem; 31 show CompilationResult, Status, parseScriptInFileSystem;
32 import 'package:front_end/src/testing/hybrid_file_system.dart';
32 33
33 const bool verbose = const bool.fromEnvironment('DFE_VERBOSE'); 34 const bool verbose = const bool.fromEnvironment('DFE_VERBOSE');
34 35
35 const bool strongMode = const bool.fromEnvironment('DFE_STRONG_MODE'); 36 const bool strongMode = const bool.fromEnvironment('DFE_STRONG_MODE');
36 37
37 Future<CompilationResult> _processLoadRequestImpl( 38 Future<CompilationResult> _processLoadRequestImpl(
38 String inputFilePathOrUri, FileSystem fileSystem) { 39 String inputFilePathOrUri, FileSystem fileSystem) {
39 Uri scriptUri = Uri.parse(inputFilePathOrUri); 40 Uri scriptUri = Uri.parse(inputFilePathOrUri);
40 41
41 // Because we serve both Loader and bootstrapping requests we need to 42 // Because we serve both Loader and bootstrapping requests we need to
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 FileSystem _buildFileSystem(List namedSources) { 108 FileSystem _buildFileSystem(List namedSources) {
108 MemoryFileSystem fileSystem = new MemoryFileSystem(Uri.parse('file:///')); 109 MemoryFileSystem fileSystem = new MemoryFileSystem(Uri.parse('file:///'));
109 for (int i = 0; i < namedSources.length ~/ 2; i++) { 110 for (int i = 0; i < namedSources.length ~/ 2; i++) {
110 fileSystem 111 fileSystem
111 .entityForUri(Uri.parse(namedSources[i * 2])) 112 .entityForUri(Uri.parse(namedSources[i * 2]))
112 .writeAsBytesSync(namedSources[i * 2 + 1]); 113 .writeAsBytesSync(namedSources[i * 2 + 1]);
113 } 114 }
114 return new HybridFileSystem(fileSystem); 115 return new HybridFileSystem(fileSystem);
115 } 116 }
116 117
117 /// A file system that mixes files from memory and a physical file system. All
118 /// memory entities take priotity over file system entities.
119 class HybridFileSystem implements FileSystem {
120 final MemoryFileSystem memory;
121 final PhysicalFileSystem physical = PhysicalFileSystem.instance;
122
123 HybridFileSystem(this.memory);
124
125 @override
126 FileSystemEntity entityForUri(Uri uri) => new HybridFileSystemEntity(
127 memory.entityForUri(uri), physical.entityForUri(uri));
128 }
129
130 /// Entity that delegates to an underlying memory or phisical file system
131 /// entity.
132 class HybridFileSystemEntity implements FileSystemEntity {
133 final FileSystemEntity memory;
134 final FileSystemEntity physical;
135
136 HybridFileSystemEntity(this.memory, this.physical);
137
138 FileSystemEntity _delegate;
139 Future<FileSystemEntity> get delegate async {
140 return _delegate ??= (await memory.exists()) ? memory : physical;
141 }
142
143 @override
144 Uri get uri => memory.uri;
145
146 @override
147 Future<bool> exists() async => (await delegate).exists();
148
149 @override
150 Future<DateTime> lastModified() async => (await delegate).lastModified();
151
152 @override
153 Future<List<int>> readAsBytes() async => (await delegate).readAsBytes();
154
155 @override
156 Future<String> readAsString() async => (await delegate).readAsString();
157 }
158
159 train(String scriptUri) { 118 train(String scriptUri) {
160 // TODO(28532): Enable on Windows. 119 // TODO(28532): Enable on Windows.
161 if (Platform.isWindows) return; 120 if (Platform.isWindows) return;
162 121
163 var tag = 1; 122 var tag = 1;
164 var responsePort = new RawReceivePort(); 123 var responsePort = new RawReceivePort();
165 responsePort.handler = (response) { 124 responsePort.handler = (response) {
166 if (response[0] == tag) { 125 if (response[0] == tag) {
167 // Success. 126 // Success.
168 responsePort.close(); 127 responsePort.close();
(...skipping 11 matching lines...) Expand all
180 main([args]) { 139 main([args]) {
181 if (args?.length == 2 && args[0] == '--train') { 140 if (args?.length == 2 && args[0] == '--train') {
182 // This entry point is used when creating an app snapshot. The argument 141 // This entry point is used when creating an app snapshot. The argument
183 // provides a script to compile to warm-up generated code. 142 // provides a script to compile to warm-up generated code.
184 train(args[1]); 143 train(args[1]);
185 } else { 144 } else {
186 // Entry point for the Kernel isolate. 145 // Entry point for the Kernel isolate.
187 return new RawReceivePort()..handler = _processLoadRequest; 146 return new RawReceivePort()..handler = _processLoadRequest;
188 } 147 }
189 } 148 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698