Bug 1457007 - Add about:support information on if tiling is used in the content process. r?nical
MozReview-Commit-ID: 1JewsArgmZz
--- a/gfx/thebes/gfxPlatform.cpp
+++ b/gfx/thebes/gfxPlatform.cpp
@@ -1785,17 +1785,17 @@ gfxPlatform::GetLayerDiagnosticTypes()
}
if (gfxPrefs::FlashLayerBorders()) {
type |= mozilla::layers::DiagnosticTypes::FLASH_BORDERS;
}
return type;
}
BackendPrefsData
-gfxPlatform::GetBackendPrefs()
+gfxPlatform::GetBackendPrefs() const
{
BackendPrefsData data;
data.mCanvasBitmask = BackendTypeBit(BackendType::CAIRO);
data.mContentBitmask = BackendTypeBit(BackendType::CAIRO);
#ifdef USE_SKIA
data.mCanvasBitmask |= BackendTypeBit(BackendType::SKIA);
data.mContentBitmask |= BackendTypeBit(BackendType::SKIA);
@@ -2711,24 +2711,50 @@ gfxPlatform::UsesOffMainThreadCompositin
}
return result;
}
bool
gfxPlatform::UsesTiling() const
{
- bool isSkiaPOMTP = XRE_IsContentProcess() &&
- GetDefaultContentBackend() == BackendType::SKIA &&
- gfxVars::UseOMTP() &&
- (gfxPrefs::LayersOMTPPaintWorkers() == -1 ||
+ bool usesSkia = GetDefaultContentBackend() == BackendType::SKIA;
+
+ // We can't just test whether the PaintThread is initialized here because
+ // this function is used when initializing the PaintThread. So instead we
+ // check the conditions that enable OMTP with parallel painting.
+ bool usesPOMTP = XRE_IsContentProcess() &&
+ gfxVars::UseOMTP() &&
+ (gfxPrefs::LayersOMTPPaintWorkers() == -1 ||
gfxPrefs::LayersOMTPPaintWorkers() > 1);
return gfxPrefs::LayersTilesEnabled() ||
- (gfxPrefs::LayersTilesEnabledIfSkiaPOMTP() && isSkiaPOMTP);
+ (gfxPrefs::LayersTilesEnabledIfSkiaPOMTP() &&
+ usesSkia &&
+ usesPOMTP);
+}
+
+bool
+gfxPlatform::ContentUsesTiling() const
+{
+ BackendPrefsData data = GetBackendPrefs();
+ BackendType contentBackend = GetContentBackendPref(data.mContentBitmask);
+ if (contentBackend == BackendType::NONE) {
+ contentBackend = data.mContentDefault;
+ }
+
+ bool contentUsesSkia = contentBackend == BackendType::SKIA;
+ bool contentUsesPOMTP = gfxVars::UseOMTP() &&
+ (gfxPrefs::LayersOMTPPaintWorkers() == -1 ||
+ gfxPrefs::LayersOMTPPaintWorkers() > 1);
+
+ return gfxPrefs::LayersTilesEnabled() ||
+ (gfxPrefs::LayersTilesEnabledIfSkiaPOMTP() &&
+ contentUsesSkia &&
+ contentUsesPOMTP);
}
/***
* The preference "layout.frame_rate" has 3 meanings depending on the value:
*
* -1 = Auto (default), use hardware vsync or software vsync @ 60 hz if hw vsync fails.
* 0 = ASAP mode - used during talos testing.
* X = Software vsync at a rate of X times per second.
--- a/gfx/thebes/gfxPlatform.h
+++ b/gfx/thebes/gfxPlatform.h
@@ -587,19 +587,28 @@ public:
virtual mozilla::gfx::SurfaceFormat Optimal2DFormatForContent(gfxContentType aContent);
virtual gfxImageFormat OptimalFormatForContent(gfxContentType aContent);
virtual gfxImageFormat GetOffscreenFormat()
{ return mozilla::gfx::SurfaceFormat::X8R8G8B8_UINT32; }
+ /**
+ * Returns whether the current process should use tiling for layers.
+ */
virtual bool UsesTiling() const;
/**
+ * Returns whether the content process will use tiling for layers. This is
+ * only used by about:support.
+ */
+ virtual bool ContentUsesTiling() const;
+
+ /**
* Returns a logger if one is available and logging is enabled
*/
static mozilla::LogModule* GetLog(eGfxLog aWhichLog);
int GetScreenDepth() const { return mScreenDepth; }
mozilla::gfx::IntSize GetScreenSize() const { return mScreenSize; }
/**
@@ -752,17 +761,17 @@ protected:
// Returns whether or not layers should be accelerated by default on this platform.
virtual bool AccelerateLayersByDefault();
// Returns a prioritized list of available compositor backends for acceleration.
virtual void GetAcceleratedCompositorBackends(nsTArray<mozilla::layers::LayersBackend>& aBackends);
// Returns preferences of canvas and content backends.
- virtual BackendPrefsData GetBackendPrefs();
+ virtual BackendPrefsData GetBackendPrefs() const;
/**
* Initialise the preferred and fallback canvas backends
* aBackendBitmask specifies the backends which are acceptable to the caller.
* The backend used is determined by aBackendBitmask and the order specified
* by the gfx.canvas.azure.backends pref.
*/
void InitBackendPrefs(BackendPrefsData&& aPrefsData);
--- a/gfx/thebes/gfxPlatformMac.cpp
+++ b/gfx/thebes/gfxPlatformMac.cpp
@@ -97,17 +97,17 @@ gfxPlatformMac::gfxPlatformMac()
}
gfxPlatformMac::~gfxPlatformMac()
{
gfxCoreTextShaper::Shutdown();
}
BackendPrefsData
-gfxPlatformMac::GetBackendPrefs()
+gfxPlatformMac::GetBackendPrefs() const
{
BackendPrefsData data;
data.mCanvasBitmask = BackendTypeBit(BackendType::SKIA);
data.mContentBitmask = BackendTypeBit(BackendType::SKIA);
data.mCanvasDefault = BackendType::SKIA;
data.mContentDefault = BackendType::SKIA;
@@ -117,16 +117,22 @@ gfxPlatformMac::GetBackendPrefs()
bool
gfxPlatformMac::UsesTiling() const
{
// The non-tiling ContentClient requires CrossProcessSemaphore which
// isn't implemented for OSX.
return true;
}
+bool
+gfxPlatformMac::ContentUsesTiling() const
+{
+ return UsesTiling();
+}
+
gfxPlatformFontList*
gfxPlatformMac::CreatePlatformFontList()
{
gfxPlatformFontList* list = new gfxMacPlatformFontList();
if (NS_SUCCEEDED(list->InitFontList())) {
return list;
}
gfxPlatformFontList::Shutdown();
--- a/gfx/thebes/gfxPlatformMac.h
+++ b/gfx/thebes/gfxPlatformMac.h
@@ -22,16 +22,17 @@ public:
gfxPlatformMac();
virtual ~gfxPlatformMac();
static gfxPlatformMac *GetPlatform() {
return (gfxPlatformMac*) gfxPlatform::GetPlatform();
}
bool UsesTiling() const override;
+ bool ContentUsesTiling() const override;
virtual already_AddRefed<gfxASurface>
CreateOffscreenSurface(const IntSize& aSize,
gfxImageFormat aFormat) override;
gfxFontGroup*
CreateFontGroup(const mozilla::FontFamilyList& aFontFamilyList,
const gfxFontStyle *aStyle,
@@ -78,17 +79,17 @@ public:
virtual already_AddRefed<mozilla::gfx::VsyncSource> CreateHardwareVsyncSource() override;
// lower threshold on font anti-aliasing
uint32_t GetAntiAliasingThreshold() { return mFontAntiAliasingThreshold; }
protected:
bool AccelerateLayersByDefault() override;
- BackendPrefsData GetBackendPrefs() override;
+ BackendPrefsData GetBackendPrefs() const override;
bool CheckVariationFontSupport() override;
private:
virtual void GetPlatformCMSOutputProfile(void* &mem, size_t &size) override;
// read in the pref value for the lower threshold on font anti-aliasing
static uint32_t ReadAntiAliasingThreshold();
--- a/gfx/thebes/gfxWindowsPlatform.cpp
+++ b/gfx/thebes/gfxWindowsPlatform.cpp
@@ -434,17 +434,17 @@ gfxWindowsPlatform::HandleDeviceReset()
InitializeConfig();
InitializeDevices();
UpdateANGLEConfig();
return true;
}
BackendPrefsData
-gfxWindowsPlatform::GetBackendPrefs()
+gfxWindowsPlatform::GetBackendPrefs() const
{
BackendPrefsData data;
data.mCanvasBitmask = BackendTypeBit(BackendType::CAIRO) |
BackendTypeBit(BackendType::SKIA);
data.mContentBitmask = BackendTypeBit(BackendType::CAIRO) |
BackendTypeBit(BackendType::SKIA);
data.mCanvasDefault = BackendType::SKIA;
--- a/gfx/thebes/gfxWindowsPlatform.h
+++ b/gfx/thebes/gfxWindowsPlatform.h
@@ -228,17 +228,17 @@ protected:
}
void GetAcceleratedCompositorBackends(nsTArray<mozilla::layers::LayersBackend>& aBackends) override;
virtual void GetPlatformCMSOutputProfile(void* &mem, size_t &size) override;
void ImportGPUDeviceData(const mozilla::gfx::GPUDeviceData& aData) override;
void ImportContentDeviceData(const mozilla::gfx::ContentDeviceData& aData) override;
void BuildContentDeviceData(mozilla::gfx::ContentDeviceData* aOut) override;
- BackendPrefsData GetBackendPrefs() override;
+ BackendPrefsData GetBackendPrefs() const override;
bool CheckVariationFontSupport() override;
protected:
RenderMode mRenderMode;
private:
void Init();
--- a/toolkit/content/aboutSupport.js
+++ b/toolkit/content/aboutSupport.js
@@ -445,16 +445,17 @@ var snapshotFormatters = {
addRowFromKey("features", "webgl2WSIInfo");
addRowFromKey("features", "webgl2Renderer");
addRowFromKey("features", "webgl2Version");
addRowFromKey("features", "webgl2DriverExtensions");
addRowFromKey("features", "webgl2Extensions");
addRowFromKey("features", "supportsHardwareH264", "hardwareH264");
addRowFromKey("features", "direct2DEnabled", "#Direct2D");
addRowFromKey("features", "usesTiling");
+ addRowFromKey("features", "contentUsesTiling");
addRowFromKey("features", "offMainThreadPaintEnabled");
addRowFromKey("features", "offMainThreadPaintWorkerCount");
if ("directWriteEnabled" in data) {
let message = data.directWriteEnabled;
if ("directWriteVersion" in data)
message += " (" + data.directWriteVersion + ")";
addRow("features", "#DirectWrite", message);
--- a/toolkit/locales/en-US/chrome/global/aboutSupport.properties
+++ b/toolkit/locales/en-US/chrome/global/aboutSupport.properties
@@ -96,16 +96,17 @@ unknownFailure = Blocklisted; failure co
d3d11layersCrashGuard = D3D11 Compositor
d3d11videoCrashGuard = D3D11 Video Decoder
d3d9videoCrashGuard = D3D9 Video Decoder
glcontextCrashGuard = OpenGL
resetOnNextRestart = Reset on Next Restart
gpuProcessKillButton = Terminate GPU Process
gpuDeviceResetButton = Trigger Device Reset
usesTiling = Uses Tiling
+contentUsesTiling = Uses Tiling (Content)
offMainThreadPaintEnabled = Off Main Thread Painting Enabled
offMainThreadPaintWorkerCount = Off Main Thread Painting Worker Count
audioBackend = Audio Backend
maxAudioChannels = Max Channels
channelLayout = Preferred Channel Layout
sampleRate = Preferred Sample Rate
--- a/toolkit/modules/Troubleshoot.jsm
+++ b/toolkit/modules/Troubleshoot.jsm
@@ -419,16 +419,17 @@ var dataProviders = {
adapterDriverDate2: "driverDate2",
isGPU2Active: null,
D2DEnabled: "direct2DEnabled",
DWriteEnabled: "directWriteEnabled",
DWriteVersion: "directWriteVersion",
cleartypeParameters: "clearTypeParameters",
UsesTiling: "usesTiling",
+ ContentUsesTiling: "contentUsesTiling",
OffMainThreadPaintEnabled: "offMainThreadPaintEnabled",
OffMainThreadPaintWorkerCount: "offMainThreadPaintWorkerCount",
};
for (let prop in gfxInfoProps) {
try {
data[gfxInfoProps[prop] || prop] = gfxInfo[prop];
} catch (e) {}
--- a/widget/GfxInfoBase.cpp
+++ b/widget/GfxInfoBase.cpp
@@ -1476,16 +1476,23 @@ GfxInfoBase::GetWebRenderEnabled(bool* a
NS_IMETHODIMP
GfxInfoBase::GetUsesTiling(bool* aUsesTiling)
{
*aUsesTiling = gfxPlatform::GetPlatform()->UsesTiling();
return NS_OK;
}
NS_IMETHODIMP
+GfxInfoBase::GetContentUsesTiling(bool* aUsesTiling)
+{
+ *aUsesTiling = gfxPlatform::GetPlatform()->ContentUsesTiling();
+ return NS_OK;
+}
+
+NS_IMETHODIMP
GfxInfoBase::GetOffMainThreadPaintEnabled(bool* aOffMainThreadPaintEnabled)
{
*aOffMainThreadPaintEnabled = gfxConfig::IsEnabled(Feature::OMTP);
return NS_OK;
}
NS_IMETHODIMP
GfxInfoBase::GetOffMainThreadPaintWorkerCount(int32_t* aOffMainThreadPaintWorkerCount)
--- a/widget/GfxInfoBase.h
+++ b/widget/GfxInfoBase.h
@@ -57,16 +57,17 @@ public:
NS_IMETHOD GetFeatures(JSContext*, JS::MutableHandle<JS::Value>) override;
NS_IMETHOD GetFeatureLog(JSContext*, JS::MutableHandle<JS::Value>) override;
NS_IMETHOD GetActiveCrashGuards(JSContext*, JS::MutableHandle<JS::Value>) override;
NS_IMETHOD GetContentBackend(nsAString & aContentBackend) override;
NS_IMETHOD GetUsingGPUProcess(bool *aOutValue) override;
NS_IMETHOD GetWebRenderEnabled(bool* aWebRenderEnabled) override;
NS_IMETHOD GetIsHeadless(bool* aIsHeadless) override;
NS_IMETHOD GetUsesTiling(bool* aUsesTiling) override;
+ NS_IMETHOD GetContentUsesTiling(bool* aUsesTiling) override;
NS_IMETHOD GetOffMainThreadPaintEnabled(bool* aOffMainThreadPaintEnabled) override;
NS_IMETHOD GetOffMainThreadPaintWorkerCount(int32_t* aOffMainThreadPaintWorkerCount) override;
// Initialization function. If you override this, you must call this class's
// version of Init first.
// We need Init to be called separately from the constructor so we can
// register as an observer after all derived classes have been constructed
// and we know we have a non-zero refcount.
--- a/widget/nsIGfxInfo.idl
+++ b/widget/nsIGfxInfo.idl
@@ -21,16 +21,17 @@ interface nsIGfxInfo : nsISupports
/*
* These are valid across all platforms.
*/
readonly attribute DOMString ContentBackend;
readonly attribute boolean WebRenderEnabled;
readonly attribute boolean isHeadless;
readonly attribute boolean UsesTiling;
+ readonly attribute boolean ContentUsesTiling;
readonly attribute boolean OffMainThreadPaintEnabled;
readonly attribute long OffMainThreadPaintWorkerCount;
// XXX: Switch to a list of devices, rather than explicitly numbering them.
/**
* The name of the display adapter.
*/