Bug 776802; Give better info about Azure. r=Bas

This commit is contained in:
Nicholas Cameron 2012-07-31 18:30:10 +12:00
parent 00dd95f3d6
commit 9f4ddcf0fb
7 changed files with 37 additions and 27 deletions

View File

@ -552,8 +552,7 @@ namespace dom {
bool
AzureCanvasEnabled()
{
BackendType dontCare;
return gfxPlatform::GetPlatform()->SupportsAzureCanvas(dontCare);
return gfxPlatform::GetPlatform()->SupportsAzureCanvas();
}
}

View File

@ -44,7 +44,7 @@ function IsAzureEnabled() {
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var backend = Components.classes["@mozilla.org/gfx/info;1"].getService(Components.interfaces.nsIGfxInfo).getInfo().AzureBackend;
var backend = Components.classes["@mozilla.org/gfx/info;1"].getService(Components.interfaces.nsIGfxInfo).getInfo().AzureCanvasBackend;
enabled = (backend != "none");
} catch (e) { }
@ -56,7 +56,7 @@ function IsAzureSkia() {
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var backend = Components.classes["@mozilla.org/gfx/info;1"].getService(Components.interfaces.nsIGfxInfo).getInfo().AzureBackend;
var backend = Components.classes["@mozilla.org/gfx/info;1"].getService(Components.interfaces.nsIGfxInfo).getInfo().AzureCanvasBackend;
enabled = (backend == "skia");
} catch (e) { }
@ -68,7 +68,7 @@ function IsAzureCairo() {
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var backend = Components.classes["@mozilla.org/gfx/info;1"].getService(Components.interfaces.nsIGfxInfo).getInfo().AzureBackend;
var backend = Components.classes["@mozilla.org/gfx/info;1"].getService(Components.interfaces.nsIGfxInfo).getInfo().AzureCanvasBackend;
enabled = (backend == "cairo");
} catch (e) { }

View File

@ -484,11 +484,10 @@ TemporaryRef<DrawTarget>
LayerManagerD3D10::CreateDrawTarget(const IntSize &aSize,
SurfaceFormat aFormat)
{
BackendType backend;
if ((aFormat != FORMAT_B8G8R8A8 &&
aFormat != FORMAT_B8G8R8X8) ||
!gfxPlatform::GetPlatform()->SupportsAzureCanvas(backend) ||
backend != BACKEND_DIRECT2D) {
!gfxPlatform::GetPlatform()->SupportsAzureCanvas() ||
gfxPlatform::GetPlatform()->GetPreferredCanvasBackend() != BACKEND_DIRECT2D) {
return LayerManager::CreateDrawTarget(aSize, aFormat);
}

View File

@ -213,7 +213,7 @@ static const char *gPrefLangNames[] = {
};
gfxPlatform::gfxPlatform()
: mAzureCanvasBackendCollector(this, &gfxPlatform::GetAzureCanvasBackendInfo)
: mAzureCanvasBackendCollector(this, &gfxPlatform::GetAzureBackendInfo)
{
mUseHarfBuzzScripts = UNINITIALIZED_VALUE;
mAllowDownloadableFonts = UNINITIALIZED_VALUE;
@ -675,8 +675,7 @@ gfxPlatform::GetThebesSurfaceForDrawTarget(DrawTarget *aTarget)
RefPtr<DrawTarget>
gfxPlatform::CreateDrawTargetForBackend(BackendType aBackend, const IntSize& aSize, SurfaceFormat aFormat)
{
BackendType backend;
if (!SupportsAzureCanvas(backend)) {
if (!SupportsAzureCanvas()) {
return NULL;
}
@ -704,12 +703,11 @@ gfxPlatform::CreateDrawTargetForBackend(BackendType aBackend, const IntSize& aSi
RefPtr<DrawTarget>
gfxPlatform::CreateOffscreenDrawTarget(const IntSize& aSize, SurfaceFormat aFormat)
{
BackendType backend;
if (!SupportsAzureCanvas(backend)) {
if (!SupportsAzureCanvas()) {
return NULL;
}
RefPtr<DrawTarget> target = CreateDrawTargetForBackend(backend, aSize, aFormat);
RefPtr<DrawTarget> target = CreateDrawTargetForBackend(mPreferredCanvasBackend, aSize, aFormat);
if (target ||
mFallbackCanvasBackend == BACKEND_NONE) {
return target;
@ -722,19 +720,17 @@ gfxPlatform::CreateOffscreenDrawTarget(const IntSize& aSize, SurfaceFormat aForm
RefPtr<DrawTarget>
gfxPlatform::CreateDrawTargetForData(unsigned char* aData, const IntSize& aSize, int32_t aStride, SurfaceFormat aFormat)
{
BackendType backend;
if (!SupportsAzureCanvas(backend)) {
if (!SupportsAzureCanvas()) {
return NULL;
}
return Factory::CreateDrawTargetForData(backend, aData, aSize, aStride, aFormat);
return Factory::CreateDrawTargetForData(mPreferredCanvasBackend, aData, aSize, aStride, aFormat);
}
bool
gfxPlatform::SupportsAzureCanvas(BackendType& aBackend)
gfxPlatform::SupportsAzureCanvas()
{
NS_ASSERTION(mFallbackCanvasBackend == BACKEND_NONE || mPreferredCanvasBackend != BACKEND_NONE,
"fallback backend with no preferred backend");
aBackend = mPreferredCanvasBackend;
return mPreferredCanvasBackend != BACKEND_NONE;
}

View File

@ -197,12 +197,16 @@ public:
CreateDrawTargetForData(unsigned char* aData, const mozilla::gfx::IntSize& aSize,
int32_t aStride, mozilla::gfx::SurfaceFormat aFormat);
// aBackend will be set to the preferred backend for Azure canvas
bool SupportsAzureCanvas(mozilla::gfx::BackendType& aBackend);
bool SupportsAzureCanvas();
// aObj will contain the preferred backend for Azure canvas
void GetAzureCanvasBackendInfo(mozilla::widget::InfoObject &aObj) {
aObj.DefineProperty("AzureBackend", GetBackendName(mPreferredCanvasBackend));
void GetAzureBackendInfo(mozilla::widget::InfoObject &aObj) {
aObj.DefineProperty("AzureCanvasBackend", GetBackendName(mPreferredCanvasBackend));
aObj.DefineProperty("AzureFallbackCanvasBackend", GetBackendName(mFallbackCanvasBackend));
aObj.DefineProperty("AzureContentBackend", GetBackendName(GetContentBackend()));
}
mozilla::gfx::BackendType GetPreferredCanvasBackend() {
return mPreferredCanvasBackend;
}
/*
@ -478,7 +482,12 @@ protected:
* which is a component of aBackendBitmask, a bitmask of backend types
*/
static mozilla::gfx::BackendType GetCanvasBackendPref(PRUint32 aBackendBitmask);
static mozilla::gfx::BackendType BackendTypeForName(const nsCString& aName);
static mozilla::gfx::BackendType BackendTypeForName(const nsCString& aName);
virtual mozilla::gfx::BackendType GetContentBackend()
{
return mozilla::gfx::BACKEND_NONE;
}
PRInt8 mAllowDownloadableFonts;
PRInt8 mDownloadableFontsSanitize;

View File

@ -242,6 +242,13 @@ public:
static bool IsRunningInWindows8Metro();
protected:
virtual mozilla::gfx::BackendType GetContentBackend()
{
return UseAzureContentDrawing() && mRenderMode == RENDER_DIRECT2D ?
mozilla::gfx::BACKEND_DIRECT2D :
mozilla::gfx::BACKEND_NONE;
}
RenderMode mRenderMode;
PRInt8 mUseClearTypeForDownloadableFonts;

View File

@ -486,8 +486,8 @@ function BuildConditionSandbox(aURL) {
} catch (e) {
sandbox.d2d = false;
}
sandbox.azureQuartz = gfxInfo.getInfo().AzureBackend == "quartz";
sandbox.azureSkia = gfxInfo.getInfo().AzureBackend == "skia";
sandbox.azureQuartz = gfxInfo.getInfo().AzureCanvasBackend == "quartz";
sandbox.azureSkia = gfxInfo.getInfo().AzureCanvasBackend == "skia";
sandbox.layersGPUAccelerated =
gWindowUtils.layerManagerType != "Basic";