in lib/src/common_server_impl.dart [243:289]
Future<proto.CompileDDCResponse> _compileDDC(String source) async {
try {
final sourceHash = _hashSource(source);
final memCacheKey = '%%COMPILE_DDC:v0:source:$sourceHash';
final result = await _checkCache(memCacheKey);
if (result != null) {
log.info('CACHE: Cache hit for compileDDC');
final resultObj = json.decode(result) as Map<String, dynamic>;
return proto.CompileDDCResponse()
..result = resultObj['compiledJS'] as String
..modulesBaseUrl = resultObj['modulesBaseUrl'] as String;
}
log.info('CACHE: MISS for compileDDC');
final watch = Stopwatch()..start();
final results = await _compiler.compileDDC(source);
if (results.hasOutput) {
final lineCount = source.split('\n').length;
final outputSize = (results.compiledJS?.length ?? 0 / 1024).ceil();
final ms = watch.elapsedMilliseconds;
log.info('PERF: Compiled $lineCount lines of Dart into '
'${outputSize}kb of JavaScript in ${ms}ms using DDC.');
final cachedResult = const JsonEncoder().convert(<String, String>{
'compiledJS': results.compiledJS ?? '',
'modulesBaseUrl': results.modulesBaseUrl ?? '',
});
// Don't block on cache set.
unawaited(_setCache(memCacheKey, cachedResult));
return proto.CompileDDCResponse()
..result = results.compiledJS ?? ''
..modulesBaseUrl = results.modulesBaseUrl ?? '';
} else {
final problems = results.problems;
final errors = problems.map(_printCompileProblem).join('\n');
throw BadRequest(errors);
}
} catch (e, st) {
if (e is! BadRequest) {
log.severe('Error during compile (DDC) on "$source"', e, st);
}
rethrow;
}
}