Skip to content

Commit

Permalink
Use Metal on iOS by default. (flutter#17431)
Browse files Browse the repository at this point in the history
Fixes flutter#18208. All Metal for iOS related work items described in https://github.com/orgs/flutter/projects/5 have been completed.
  • Loading branch information
chinmaygarde committed Apr 1, 2020
1 parent 03c4c5b commit f7c6c6d
Showing 1 changed file with 2 additions and 29 deletions.
31 changes: 2 additions & 29 deletions shell/platform/darwin/ios/rendering_api_selection.mm
Original file line number Diff line number Diff line change
Expand Up @@ -15,40 +15,17 @@

namespace flutter {

bool ShouldUseSoftwareRenderer() {
return [[[NSProcessInfo processInfo] arguments] containsObject:@"--force-software"];
}

#if FLUTTER_SHELL_ENABLE_METAL
bool ShouldUseMetalRenderer() {
// If there is a command line argument that says Metal should not be used, that takes precedence
// over everything else. This allows disabling Metal on a per run basis to check for regressions
// on an application that has otherwise opted into Metal on an iOS version that supports it.
if ([[[NSProcessInfo processInfo] arguments] containsObject:@"--disable-metal"]) {
return false;
}

// If the application wants to use metal on a per run basis with disregard for version checks or
// plist based opt ins, respect that opinion. This allows selectively testing features on older
// version of iOS than those explicitly stated as being supported.
if ([[[NSProcessInfo processInfo] arguments] containsObject:@"--force-metal"]) {
return true;
}

// Flutter supports Metal on all devices with Apple A7 SoC or above that have been update to or
// Flutter supports Metal on all devices with Apple A7 SoC or above that have been updated to or
// past iOS 10.0. The processor was selected as it is the first version at which Metal was
// supported. The iOS version floor was selected due to the availability of features used by Skia.
bool ios_version_supports_metal = false;
if (@available(iOS 10.0, *)) {
auto device = MTLCreateSystemDefaultDevice();
ios_version_supports_metal = [device supportsFeatureSet:MTLFeatureSet_iOS_GPUFamily1_v3];
}

// The application must opt-in by default to use Metal without command line flags.
bool application_opts_into_metal =
[[[NSBundle mainBundle] objectForInfoDictionaryKey:@"io.flutter.metal_preview"] boolValue];

return ios_version_supports_metal && application_opts_into_metal;
return ios_version_supports_metal;
}
#endif // FLUTTER_SHELL_ENABLE_METAL

Expand All @@ -58,10 +35,6 @@ IOSRenderingAPI GetRenderingAPIForProcess() {
#endif // TARGET_IPHONE_SIMULATOR

#if FLUTTER_SHELL_ENABLE_METAL
static bool should_use_software = ShouldUseSoftwareRenderer();
if (should_use_software) {
return IOSRenderingAPI::kSoftware;
}
static bool should_use_metal = ShouldUseMetalRenderer();
if (should_use_metal) {
return IOSRenderingAPI::kMetal;
Expand Down

0 comments on commit f7c6c6d

Please sign in to comment.