| // Copyright 2014 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'dart:async'; |
| |
| import 'package:file/file.dart'; |
| |
| import 'base/file_system.dart'; |
| import 'base/logger.dart'; |
| import 'build_info.dart'; |
| import 'convert.dart'; |
| import 'device.dart'; |
| import 'globals.dart' as globals; |
| |
| Future<String?> sharedSkSlWriter(Device device, Map<String, Object?>? data, { |
| File? outputFile, |
| Logger? logger, |
| }) async { |
| logger ??= globals.logger; |
| if (data == null || data.isEmpty) { |
| logger.printStatus( |
| 'No data was received. To ensure SkSL data can be generated use a ' |
| 'physical device then:\n' |
| ' 1. Pass "--cache-sksl" as an argument to flutter run.\n' |
| ' 2. Interact with the application to force shaders to be compiled.\n' |
| ); |
| return null; |
| } |
| if (outputFile == null) { |
| outputFile = globals.fsUtils.getUniqueFile( |
| globals.fs.currentDirectory, |
| 'flutter', |
| 'sksl.json', |
| ); |
| } else if (!outputFile.parent.existsSync()) { |
| outputFile.parent.createSync(recursive: true); |
| } |
| // Convert android sub-platforms to single target platform. |
| TargetPlatform targetPlatform = await device.targetPlatform; |
| switch (targetPlatform) { |
| case TargetPlatform.android_arm: |
| case TargetPlatform.android_arm64: |
| case TargetPlatform.android_x64: |
| case TargetPlatform.android_x86: |
| targetPlatform = TargetPlatform.android; |
| case TargetPlatform.android: |
| case TargetPlatform.darwin: |
| case TargetPlatform.ios: |
| case TargetPlatform.fuchsia_arm64: |
| case TargetPlatform.fuchsia_x64: |
| case TargetPlatform.linux_arm64: |
| case TargetPlatform.linux_x64: |
| case TargetPlatform.tester: |
| case TargetPlatform.web_javascript: |
| case TargetPlatform.windows_x64: |
| break; |
| } |
| final Map<String, Object> manifest = <String, Object>{ |
| 'platform': getNameForTargetPlatform(targetPlatform), |
| 'name': device.name, |
| 'engineRevision': globals.flutterVersion.engineRevision, |
| 'data': data, |
| }; |
| outputFile.writeAsStringSync(json.encode(manifest)); |
| logger.printStatus('Wrote SkSL data to ${outputFile.path}.'); |
| return outputFile.path; |
| } |