author | David Anderson <danderson@mozilla.com> |
Thu, 08 Oct 2015 12:21:59 -0700 | |
changeset 266978 | b37d2cb075ada571185ef3d355261f22fc6592a2 |
parent 266977 | f627ad014e6c30a0a3fd0f00210107ae78e7ab1d |
child 266979 | 8ca3465da60607ebbfa2902f4031cf93aca71cbb |
push id | 29504 |
push user | cbook@mozilla.com |
push date | Fri, 09 Oct 2015 09:43:23 +0000 |
treeherder | mozilla-central@d01dd42e654b [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | jrmuizel |
bugs | 1212659 |
milestone | 44.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
gfx/thebes/gfxPlatform.cpp | file | annotate | diff | comparison | revisions | |
gfx/thebes/gfxWindowsPlatform.cpp | file | annotate | diff | comparison | revisions |
--- a/gfx/thebes/gfxPlatform.cpp +++ b/gfx/thebes/gfxPlatform.cpp @@ -2152,40 +2152,50 @@ gfxPlatform::UseProgressivePaint() } /*static*/ bool gfxPlatform::PerfWarnings() { return gfxPrefs::PerfWarnings(); } -void -gfxPlatform::GetAcceleratedCompositorBackends(nsTArray<LayersBackend>& aBackends) +static inline bool +AllowOpenGL(bool* aWhitelisted) { - // Being whitelisted is not enough to accelerate, but not being whitelisted is - // enough not to: - bool whitelisted = false; - nsCOMPtr<nsIGfxInfo> gfxInfo = do_GetService("@mozilla.org/gfx/info;1"); if (gfxInfo) { // bug 655578: on X11 at least, we must always call GetData (even if we don't need that information) // as that's what causes GfxInfo initialization which kills the zombie 'glxtest' process. // initially we relied on the fact that GetFeatureStatus calls GetData for us, but bug 681026 showed // that assumption to be unsafe. gfxInfo->GetData(); int32_t status; if (NS_SUCCEEDED(gfxInfo->GetFeatureStatus(nsIGfxInfo::FEATURE_OPENGL_LAYERS, &status))) { if (status == nsIGfxInfo::FEATURE_STATUS_OK) { - aBackends.AppendElement(LayersBackend::LAYERS_OPENGL); - whitelisted = true; + *aWhitelisted = true; + return true; } } } + return gfxPrefs::LayersAccelerationForceEnabled(); +} + +void +gfxPlatform::GetAcceleratedCompositorBackends(nsTArray<LayersBackend>& aBackends) +{ + // Being whitelisted is not enough to accelerate, but not being whitelisted is + // enough not to: + bool whitelisted = false; + + if (AllowOpenGL(&whitelisted)) { + aBackends.AppendElement(LayersBackend::LAYERS_OPENGL); + } + if (!whitelisted) { static int tell_me_once = 0; if (!tell_me_once) { NS_WARNING("OpenGL-accelerated layers are not supported on this system"); tell_me_once = 1; } #ifdef MOZ_WIDGET_ANDROID NS_RUNTIMEABORT("OpenGL-accelerated layers are a hard requirement on this platform. "
--- a/gfx/thebes/gfxWindowsPlatform.cpp +++ b/gfx/thebes/gfxWindowsPlatform.cpp @@ -1962,16 +1962,20 @@ gfxWindowsPlatform::CheckD3D11Support(bo *aCanUseHardware = !GetParentDevicePrefs().useD3D11WARP(); return FeatureStatus::Available; } if (gfxPrefs::LayersD3D11ForceWARP()) { *aCanUseHardware = false; return FeatureStatus::Available; } + if (gfxPrefs::LayersAccelerationForceEnabled()) { + *aCanUseHardware = true; + return FeatureStatus::Available; + } if (nsCOMPtr<nsIGfxInfo> gfxInfo = services::GetGfxInfo()) { int32_t status; if (NS_SUCCEEDED(gfxInfo->GetFeatureStatus(nsIGfxInfo::FEATURE_DIRECT3D_11_LAYERS, &status))) { if (status != nsIGfxInfo::FEATURE_STATUS_OK) { if (CanUseWARP()) { *aCanUseHardware = false; return FeatureStatus::Available;