diff --git a/DEPS b/DEPS index 367608ad14659..49cf016a03f84 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/config.gni b/shell/config.gni index 3f498d2c044f7..1875137080d69 100644 --- a/shell/config.gni +++ b/shell/config.gni @@ -10,6 +10,7 @@ declare_args() { shell_enable_vulkan = false shell_enable_software = true + enable_vulkan_validation_layers = false } declare_args() { diff --git a/shell/platform/android/BUILD.gn b/shell/platform/android/BUILD.gn index 0f3ff3ebb5b9a..df54bf1cf3a86 100644 --- a/shell/platform/android/BUILD.gn +++ b/shell/platform/android/BUILD.gn @@ -478,6 +478,16 @@ action("android_jar") { ":pom_libflutter", ] + if (enable_vulkan_validation_layers) { + deps += [ "//third_party/vulkan_validation_layers" ] + args += [ + "--native_lib", + rebase_path("libVkLayer_khronos_validation.so", + root_build_dir, + root_build_dir), + ] + } + 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 de484f816d2f8..53201d5d94660 100644 --- a/shell/platform/android/io/flutter/embedding/engine/loader/FlutterLoader.java +++ b/shell/platform/android/io/flutter/embedding/engine/loader/FlutterLoader.java @@ -43,6 +43,8 @@ public class FlutterLoader { "io.flutter.embedding.android.EnableImpeller"; private static final String IMPELLER_BACKEND_META_DATA_KEY = "io.flutter.embedding.android.ImpellerBackend"; + 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 @@ -324,6 +326,12 @@ public void ensureInitializationComplete( } String backend = metaData.getString(IMPELLER_BACKEND_META_DATA_KEY, "opengles"); shellArgs.add("--impeller-backend=" + backend); + + Log.d(TAG, "foobar has metadata"); + if (metaData.getBoolean(ENABLE_VULKAN_VALIDATION_META_DATA_KEY, false)) { + Log.d(TAG, "foobar has validation flag"); + shellArgs.add("--enable-vulkan-validation"); + } } final String leakVM = isLeakVM(metaData) ? "true" : "false"; 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..102add1b30daa 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') + elif 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'] = int(26) gn_args['enable_vulkan_validation_layers'] = True # Enable pointer compression on 64-bit mobile targets. iOS is excluded due to