diff --git a/gfx/src/gfxTelemetry.cpp b/gfx/src/gfxTelemetry.cpp index 9a62ed8f001f..c680a1a3f110 100644 --- a/gfx/src/gfxTelemetry.cpp +++ b/gfx/src/gfxTelemetry.cpp @@ -44,6 +44,12 @@ const char* FeatureStatusToString(FeatureStatus aStatus) { return "blocked-no-gfx-info"; case FeatureStatus::BlockedOverride: return "blocked-override"; + case FeatureStatus::BlockedReleaseChannelIntel: + return "blocked-release-channel-intel"; + case FeatureStatus::BlockedReleaseChannelAMD: + return "blocked-release-channel-amd"; + case FeatureStatus::BlockedReleaseChannelBattery: + return "blocked-release-channel-battery"; case FeatureStatus::Blacklisted: return "blacklisted"; case FeatureStatus::OptIn: diff --git a/gfx/src/gfxTelemetry.h b/gfx/src/gfxTelemetry.h index f8e78a84a33c..88dccd622332 100644 --- a/gfx/src/gfxTelemetry.h +++ b/gfx/src/gfxTelemetry.h @@ -40,6 +40,9 @@ enum class FeatureStatus { BlockedScreenUnknown, BlockedNoGfxInfo, BlockedOverride, + BlockedReleaseChannelIntel, + BlockedReleaseChannelAMD, + BlockedReleaseChannelBattery, // This feature has been blocked by the graphics blacklist. Blacklisted, diff --git a/gfx/thebes/gfxPlatform.cpp b/gfx/thebes/gfxPlatform.cpp index de7cb43639f4..05104e964e6b 100644 --- a/gfx/thebes/gfxPlatform.cpp +++ b/gfx/thebes/gfxPlatform.cpp @@ -2617,27 +2617,9 @@ static FeatureState& WebRenderHardwareQualificationStatus( FeatureStatus::BlockedDeviceUnknown, "Bad device id", NS_LITERAL_CSTRING("FEATURE_FAILURE_BAD_DEVICE_ID")); } else { -#ifdef NIGHTLY_BUILD - // For AMD/Intel devices, if we have a battery, ignore it if the screen - // is small enough. Note that we always check for a battery with NVIDIA - // because we do not have a limited/curated set of devices to support - // WebRender on. - const int32_t kMaxPixelsBattery = 1920 * 1200; // WUXGA const int32_t screenPixels = aScreenSize.width * aScreenSize.height; - bool disableForBattery = aHasBattery; - if ((adapterVendorID == u"0x8086" || adapterVendorID == u"0x1002") && - screenPixels > 0 && screenPixels <= kMaxPixelsBattery) { - disableForBattery = false; - } -#else - bool disableForBattery = aHasBattery; -#endif - if (disableForBattery) { - featureWebRenderQualified.Disable( - FeatureStatus::BlockedHasBattery, "Has battery", - NS_LITERAL_CSTRING("FEATURE_FAILURE_WR_HAS_BATTERY")); - } else if (adapterVendorID == u"0x10de") { + if (adapterVendorID == u"0x10de") { if (deviceID < 0x6c0) { // 0x6c0 is the lowest Fermi device id. Unfortunately some Tesla // devices that don't support D3D 10.1 have higher deviceIDs. They @@ -2646,7 +2628,6 @@ static FeatureState& WebRenderHardwareQualificationStatus( FeatureStatus::BlockedDeviceTooOld, "Device too old", NS_LITERAL_CSTRING("FEATURE_FAILURE_DEVICE_TOO_OLD")); } -#ifdef EARLY_BETA_OR_EARLIER } else if (adapterVendorID == u"0x1002") { // AMD // AMD deviceIDs are not very well ordered. This // condition is based off the information in gpu-db @@ -2659,13 +2640,17 @@ static FeatureState& WebRenderHardwareQualificationStatus( (deviceID >= 0x9830 && deviceID < 0x9870) || (deviceID >= 0x9900 && deviceID < 0x9a00)) { // we have a desktop CAYMAN, SI, CIK, VI, or GFX9 device +#ifndef EARLY_BETA_OR_EARLIER + featureWebRenderQualified.Disable( + FeatureStatus::BlockedReleaseChannelAMD, + "Release channel and AMD", + NS_LITERAL_CSTRING("FEATURE_FAILURE_RELEASE_CHANNEL_AMD")); +#endif // !EARLY_BETA_OR_EARLIER } else { featureWebRenderQualified.Disable( FeatureStatus::BlockedDeviceTooOld, "Device too old", NS_LITERAL_CSTRING("FEATURE_FAILURE_DEVICE_TOO_OLD")); } -#endif -#ifdef NIGHTLY_BUILD } else if (adapterVendorID == u"0x8086") { // Intel const uint16_t supportedDevices[] = { // skylake gt2+ @@ -2757,13 +2742,8 @@ static FeatureState& WebRenderHardwareQualificationStatus( break; } } - if (!supported) { - featureWebRenderQualified.Disable( - FeatureStatus::BlockedDeviceTooOld, "Device too old", - NS_LITERAL_CSTRING("FEATURE_FAILURE_DEVICE_TOO_OLD")); - } -# ifdef MOZ_WIDGET_GTK - else { + if (supported) { +#ifdef MOZ_WIDGET_GTK // Performance is not great on 4k screens with WebRender + Linux. // Disable it for now if it is too large. const int32_t kMaxPixelsLinux = 3440 * 1440; // UWQHD @@ -2775,15 +2755,50 @@ static FeatureState& WebRenderHardwareQualificationStatus( featureWebRenderQualified.Disable( FeatureStatus::BlockedScreenUnknown, "Screen size unknown", NS_LITERAL_CSTRING("FEATURE_FAILURE_SCREEN_SIZE_UNKNOWN")); + } else { +#endif // MOZ_WIDGET_GTK +#ifndef NIGHTLY_BUILD + featureWebRenderQualified.Disable( + FeatureStatus::BlockedReleaseChannelIntel, + "Release channel and Intel", + NS_LITERAL_CSTRING("FEATURE_FAILURE_RELEASE_CHANNEL_INTEL")); +#endif // !NIGHTLY_BUILD +#ifdef MOZ_WIDGET_GTK } +#endif // MOZ_WIDGET_GTK + } else { + featureWebRenderQualified.Disable( + FeatureStatus::BlockedDeviceTooOld, "Device too old", + NS_LITERAL_CSTRING("FEATURE_FAILURE_DEVICE_TOO_OLD")); } -# endif // MOZ_WIDGET_GTK -#endif // NIGHTLY_BUILD } else { featureWebRenderQualified.Disable( FeatureStatus::BlockedVendorUnsupported, "Unsupported vendor", NS_LITERAL_CSTRING("FEATURE_FAILURE_UNSUPPORTED_VENDOR")); } + + // We leave checking the battery for last because we would like to know + // which users were denied WebRender only because they have a battery. + if (featureWebRenderQualified.IsEnabled() && aHasBattery) { + // For AMD/Intel devices, if we have a battery, ignore it if the + // screen is small enough. Note that we always check for a battery + // with NVIDIA because we do not have a limited/curated set of devices + // to support WebRender on. + const int32_t kMaxPixelsBattery = 1920 * 1200; // WUXGA + if ((adapterVendorID == u"0x8086" || adapterVendorID == u"0x1002") && + screenPixels > 0 && screenPixels <= kMaxPixelsBattery) { +#ifndef NIGHTLY_BUILD + featureWebRenderQualified.Disable( + FeatureStatus::BlockedReleaseChannelBattery, + "Release channel and battery", + NS_LITERAL_CSTRING("FEATURE_FAILURE_RELEASE_CHANNEL_BATTERY")); +#endif // !NIGHTLY_BUILD + } else { + featureWebRenderQualified.Disable( + FeatureStatus::BlockedHasBattery, "Has battery", + NS_LITERAL_CSTRING("FEATURE_FAILURE_WR_HAS_BATTERY")); + } + } } } } else {