☠☠ backed out by df82a3088812 ☠ ☠ | |
author | David Anderson <danderson@mozilla.com> |
Wed, 27 Apr 2016 22:54:25 -0700 | |
changeset 295166 | d17f98a9918a4a5e69566abf73702d8adf59151d |
parent 295165 | 21c8a7ea2b93d6f61b0ad57fc9603c41b926a444 |
child 295167 | f8f3ae8c5cefa67f2ce509eac3da32dc23289ebd |
push id | 75834 |
push user | danderson@mozilla.com |
push date | Thu, 28 Apr 2016 05:58:25 +0000 |
treeherder | mozilla-inbound@f749ee384012 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | milan |
bugs | 1254899 |
milestone | 49.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
|
--- a/gfx/ipc/GraphicsMessages.ipdlh +++ b/gfx/ipc/GraphicsMessages.ipdlh @@ -7,17 +7,17 @@ using struct DxgiAdapterDesc from "mozilla/D3DMessageUtils.h"; namespace mozilla { namespace gfx { struct DeviceInitData { - bool useAcceleration; + bool useHwCompositing; // Windows only. bool useD3D11; bool useD3D11WARP; bool useD3D11ImageBridge; bool d3d11TextureSharingWorks; bool useD2D1; DxgiAdapterDesc adapter;
--- a/gfx/thebes/gfxPlatform.cpp +++ b/gfx/thebes/gfxPlatform.cpp @@ -165,16 +165,20 @@ static qcms_profile *gCMSsRGBProfile = n static qcms_transform *gCMSRGBTransform = nullptr; static qcms_transform *gCMSInverseRGBTransform = nullptr; static qcms_transform *gCMSRGBATransform = nullptr; static bool gCMSInitialized = false; static eCMSMode gCMSMode = eCMSMode_Off; +// Device init data should only be used on child processes, so we protect it +// behind a getter here. +static DeviceInitData sDeviceInitDataDoNotUseDirectly; + static void ShutdownCMS(); #include "mozilla/gfx/2D.h" #include "mozilla/gfx/SourceSurfaceCairo.h" using namespace mozilla::gfx; /* Class to listen for pref changes so that chrome code can dynamically force sRGB as an output profile. See Bug #452125. */ @@ -2231,16 +2235,23 @@ gfxPlatform::GetScaledFontForFontWithCai nativeFont.mType = NativeFontType::CAIRO_FONT_FACE; nativeFont.mFont = aFont->GetCairoScaledFont(); return Factory::CreateScaledFontForNativeFont(nativeFont, aFont->GetAdjustedSize()); } return nullptr; } +/* static */ DeviceInitData& +gfxPlatform::GetParentDevicePrefs() +{ + MOZ_ASSERT(XRE_IsContentProcess()); + return sDeviceInitDataDoNotUseDirectly; +} + /* static */ bool gfxPlatform::UsesOffMainThreadCompositing() { static bool firstTime = true; static bool result = false; if (firstTime) { MOZ_ASSERT(sLayersAccelerationPrefsInitialized); @@ -2437,31 +2448,31 @@ gfxPlatform::NotifyCompositorCreated(Lay } })); } void gfxPlatform::GetDeviceInitData(mozilla::gfx::DeviceInitData* aOut) { MOZ_ASSERT(XRE_IsParentProcess()); - aOut->useAcceleration() = gfxConfig::IsEnabled(Feature::HW_COMPOSITING); + aOut->useHwCompositing() = gfxConfig::IsEnabled(Feature::HW_COMPOSITING); } void gfxPlatform::UpdateDeviceInitData() { if (XRE_IsParentProcess()) { // The parent process figures out device initialization on its own. return; } mozilla::gfx::DeviceInitData data; mozilla::dom::ContentChild::GetSingleton()->SendGetGraphicsDeviceInitData(&data); - SetDeviceInitData(data); + sDeviceInitDataDoNotUseDirectly = data; } bool gfxPlatform::SupportsApzDragInput() const { return gfxPrefs::APZDragEnabled(); }
--- a/gfx/thebes/gfxPlatform.h +++ b/gfx/thebes/gfxPlatform.h @@ -689,22 +689,16 @@ protected: void UpdateDeviceInitData(); /** * Increase the global device counter after a device has been removed/reset. */ void BumpDeviceCounter(); /** - * Called when new device preferences are available. - */ - virtual void SetDeviceInitData(mozilla::gfx::DeviceInitData& aData) - {} - - /** * returns the first backend named in the pref gfx.canvas.azure.backends * which is a component of aBackendBitmask, a bitmask of backend types */ static mozilla::gfx::BackendType GetCanvasBackendPref(uint32_t aBackendBitmask); /** * returns the first backend named in the pref gfx.content.azure.backend * which is a component of aBackendBitmask, a bitmask of backend types @@ -722,16 +716,18 @@ protected: /** * Decode the backend enumberation from a string. */ static mozilla::gfx::BackendType BackendTypeForName(const nsCString& aName); static already_AddRefed<mozilla::gfx::ScaledFont> GetScaledFontForFontWithCairoSkia(mozilla::gfx::DrawTarget* aTarget, gfxFont* aFont); + static mozilla::gfx::DeviceInitData& GetParentDevicePrefs(); + int8_t mAllowDownloadableFonts; int8_t mGraphiteShapingEnabled; int8_t mOpenTypeSVGEnabled; int8_t mBidiNumeralOption; // whether to always search font cmaps globally // when doing system font fallback
--- a/gfx/thebes/gfxWindowsPlatform.cpp +++ b/gfx/thebes/gfxWindowsPlatform.cpp @@ -353,26 +353,16 @@ public: return MOZ_COLLECT_REPORT("d3d9-shared-texture", KIND_OTHER, UNITS_BYTES, gfxWindowsPlatform::sD3D9SharedTextureUsed, "Memory used for D3D9 shared textures"); } }; NS_IMPL_ISUPPORTS(D3D9SharedTextureReporter, nsIMemoryReporter) -// Device init data should only be used on child processes, so we protect it -// behind a getter here. -static DeviceInitData sDeviceInitDataDoNotUseDirectly; -static inline DeviceInitData& -GetParentDevicePrefs() -{ - MOZ_ASSERT(XRE_IsContentProcess()); - return sDeviceInitDataDoNotUseDirectly; -} - gfxWindowsPlatform::gfxWindowsPlatform() : mRenderMode(RENDER_GDI) , mDeviceLock("gfxWindowsPlatform.mDeviceLock") , mIsWARP(false) , mHasDeviceReset(false) , mHasFakeDeviceReset(false) , mCompositorD3D11TextureSharingWorks(false) , mAcceleration(FeatureStatus::Unused) @@ -1922,18 +1912,18 @@ bool DoesD3D11TextureSharingWork(ID3D11D return DoesD3D11TextureSharingWorkInternal(device, DXGI_FORMAT_B8G8R8A8_UNORM, D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE); } bool DoesD3D11AlphaTextureSharingWork(ID3D11Device *device) { return DoesD3D11TextureSharingWorkInternal(device, DXGI_FORMAT_R8_UNORM, D3D11_BIND_SHADER_RESOURCE); } -static inline bool -CanUseWARP() +bool +gfxWindowsPlatform::CanUseWARP() { if (gfxPrefs::LayersD3D11ForceWARP()) { return true; } // The child process can only use WARP if the parent process is also using // WARP. if (XRE_IsContentProcess()) { @@ -2261,23 +2251,16 @@ gfxWindowsPlatform::AttemptD3D11ImageBri if (XRE_IsContentProcess()) { ContentAdapterIsParentAdapter(mD3D11ImageBridgeDevice); } return FeatureStatus::Available; } void -gfxWindowsPlatform::SetDeviceInitData(mozilla::gfx::DeviceInitData& aData) -{ - MOZ_ASSERT(XRE_IsContentProcess()); - sDeviceInitDataDoNotUseDirectly = aData; -} - -void gfxWindowsPlatform::InitializeDevices() { // If acceleration is disabled, we refuse to initialize anything. mAcceleration = CheckAccelerationSupport(); if (IsFeatureStatusFailure(mAcceleration)) { return; } @@ -2320,17 +2303,17 @@ gfxWindowsPlatform::InitializeDevices() FeatureStatus gfxWindowsPlatform::CheckAccelerationSupport() { // Don't retry acceleration if it failed earlier. if (IsFeatureStatusFailure(mAcceleration)) { return mAcceleration; } if (XRE_IsContentProcess()) { - return GetParentDevicePrefs().useAcceleration() + return GetParentDevicePrefs().useHwCompositing() ? FeatureStatus::Available : FeatureStatus::Blocked; } return gfxConfig::GetValue(Feature::HW_COMPOSITING); } bool gfxWindowsPlatform::CanUseD3D11ImageBridge()
--- a/gfx/thebes/gfxWindowsPlatform.h +++ b/gfx/thebes/gfxWindowsPlatform.h @@ -265,17 +265,16 @@ public: bool SupportsPluginDirectDXGIDrawing(); protected: bool AccelerateLayersByDefault() override { return true; } void GetAcceleratedCompositorBackends(nsTArray<mozilla::layers::LayersBackend>& aBackends) override; virtual void GetPlatformCMSOutputProfile(void* &mem, size_t &size) override; - void SetDeviceInitData(mozilla::gfx::DeviceInitData& aData) override; protected: RenderMode mRenderMode; int8_t mUseClearTypeForDownloadableFonts; int8_t mUseClearTypeAlways; private: @@ -308,16 +307,17 @@ private: bool AttemptD3D11ImageBridgeDeviceCreationHelper( IDXGIAdapter1* aAdapter, HRESULT& aResOut); mozilla::gfx::FeatureStatus AttemptD3D11ImageBridgeDeviceCreation(); mozilla::gfx::FeatureStatus AttemptD3D11ContentDeviceCreation(); bool AttemptD3D11ContentDeviceCreationHelper( IDXGIAdapter1* aAdapter, HRESULT& aResOut); + bool CanUseWARP(); bool CanUseD3D11ImageBridge(); bool ContentAdapterIsParentAdapter(ID3D11Device* device); void DisableD3D11AfterCrash(); void ResetD3D11Devices(); IDXGIAdapter1 *GetDXGIAdapter(); bool IsDeviceReset(HRESULT hr, DeviceResetReason* aReason);