diff --git a/DEPS b/DEPS index 06e3bbf036f00..9d21bb1e7949a 100644 --- a/DEPS +++ b/DEPS @@ -257,7 +257,7 @@ allowed_hosts = [ ] deps = { - 'src': 'https://github.com/flutter/buildroot.git' + '@' + '859e7ccc38f55f89dac8aea49367b7a4c1656490', + 'src': 'https://github.com/flutter/buildroot.git' + '@' + 'fabb92f0ada787444ad0be22638c80a6d5927a2c', # Fuchsia compatibility # diff --git a/shell/platform/android/BUILD.gn b/shell/platform/android/BUILD.gn index 0f3ff3ebb5b9a..da4811bdcfb0e 100644 --- a/shell/platform/android/BUILD.gn +++ b/shell/platform/android/BUILD.gn @@ -6,9 +6,11 @@ import("//build/config/android/config.gni") import("//build/toolchain/clang.gni") import("//flutter/build/zip_bundle.gni") import("//flutter/common/config.gni") +import("//flutter/impeller/tools/impeller.gni") import("//flutter/shell/config.gni") import("//flutter/shell/gpu/gpu.gni") import("//flutter/shell/version/version.gni") +import("//flutter/vulkan/config.gni") shell_gpu_configuration("android_gpu_configuration") { enable_software = true @@ -478,6 +480,26 @@ action("android_jar") { ":pom_libflutter", ] + if (enable_vulkan_validation_layers) { + assert(impeller_enable_vulkan) + deps += [ "//third_party/vulkan_validation_layers" ] + args += [ + "--native_lib", + rebase_path("libVkLayer_khronos_validation.so", + root_build_dir, + root_build_dir), + ] + if (current_cpu == "arm64") { + args += [ + "--native_lib", + rebase_path("$android_libcpp_root/libs/arm64-v8a/libc++_shared.so", + root_build_dir), + ] + } else { + assert(false, "Validation layers not supported for arch.") + } + } + if (flutter_runtime_mode == "profile") { deps += [ "//flutter/shell/vmservice:vmservice_snapshot" ] args += [ diff --git a/shell/platform/android/io/flutter/embedding/engine/loader/FlutterLoader.java b/shell/platform/android/io/flutter/embedding/engine/loader/FlutterLoader.java index 5461838e7ad85..38334c6452b06 100644 --- a/shell/platform/android/io/flutter/embedding/engine/loader/FlutterLoader.java +++ b/shell/platform/android/io/flutter/embedding/engine/loader/FlutterLoader.java @@ -41,6 +41,8 @@ public class FlutterLoader { "io.flutter.embedding.android.OldGenHeapSize"; private static final String ENABLE_IMPELLER_META_DATA_KEY = "io.flutter.embedding.android.EnableImpeller"; + private static final String ENABLE_VULKAN_VALIDATION_META_DATA_KEY = + "io.flutter.embedding.android.EnableVulkanValidation"; /** * Set whether leave or clean up the VM after the last shell shuts down. It can be set from app's @@ -316,8 +318,13 @@ public void ensureInitializationComplete( shellArgs.add("--prefetched-default-font-manager"); - if (metaData != null && metaData.getBoolean(ENABLE_IMPELLER_META_DATA_KEY, false)) { - shellArgs.add("--enable-impeller"); + if (metaData != null) { + if (metaData.getBoolean(ENABLE_IMPELLER_META_DATA_KEY, false)) { + shellArgs.add("--enable-impeller"); + } + if (metaData.getBoolean(ENABLE_VULKAN_VALIDATION_META_DATA_KEY, false)) { + shellArgs.add("--enable-vulkan-validation"); + } } final String leakVM = isLeakVM(metaData) ? "true" : "false"; diff --git a/shell/platform/fuchsia/flutter/BUILD.gn b/shell/platform/fuchsia/flutter/BUILD.gn index 68af2224ef07b..b9b4202306471 100644 --- a/shell/platform/fuchsia/flutter/BUILD.gn +++ b/shell/platform/fuchsia/flutter/BUILD.gn @@ -6,6 +6,7 @@ assert(is_fuchsia) import("//build/fuchsia/sdk.gni") import("//flutter/common/config.gni") +import("//flutter/shell/config.gni") import("//flutter/shell/gpu/gpu.gni") import("//flutter/testing/testing.gni") import("//flutter/tools/fuchsia/dart.gni") diff --git a/testing/scenario_app/android/gradle.properties b/testing/scenario_app/android/gradle.properties index 06d12a7d35f42..0b5c48ae64de0 100644 --- a/testing/scenario_app/android/gradle.properties +++ b/testing/scenario_app/android/gradle.properties @@ -1,4 +1,4 @@ -org.gradle.jvmargs=-Xmx1536M +org.gradle.jvmargs=-Xmx2048M android.useAndroidX=true android.enableJetifier=true android.builder.sdkDownload=false diff --git a/tools/gn b/tools/gn index d94ba6e56ffc9..07334fbdde93b 100755 --- a/tools/gn +++ b/tools/gn @@ -80,6 +80,8 @@ def to_command_line(gn_args): def merge(key, value): if isinstance(value, bool): return '%s=%s' % (key, 'true' if value else 'false') + if isinstance(value, int): + return '%s=%d' % (key, value) return '%s="%s"' % (key, value) return [merge(x, y) for x, y in gn_args.items()] @@ -548,11 +550,8 @@ def to_gn_args(args): gn_args['use_fstack_protector'] = True if args.enable_vulkan_validation_layers: - if args.target_os != 'fuchsia': - print( - 'Vulkan validation layers are currently only supported on Fuchsia targets.' - ) - sys.exit(1) + if args.target_os == 'android': + gn_args['android_api_level'] = 26 gn_args['enable_vulkan_validation_layers'] = True # Enable pointer compression on 64-bit mobile targets. iOS is excluded due to diff --git a/vulkan/config.gni b/vulkan/config.gni index 08ccbab720647..bbddfb1dfa491 100644 --- a/vulkan/config.gni +++ b/vulkan/config.gni @@ -3,10 +3,6 @@ # found in the LICENSE file. declare_args() { - # Whether to include vulkan validation layers, if available. - # - # Currently these are only supported on Fuchsia, where by default they are - # disabled, to enable them pass `--enable-vulkan-validation-layers` to your - # gn args. + # Whether to include vulkan validation layers. enable_vulkan_validation_layers = false }