Back out 2175db811fad (bug 734081) due to Android reftest failures.

This commit is contained in:
Ryan VanderMeulen
2012-03-08 18:41:28 -05:00
parent 76431dbbcd
commit acf11eb53e
3 changed files with 48 additions and 36 deletions

View File

@@ -42,9 +42,6 @@
#include "mozilla/Preferences.h" #include "mozilla/Preferences.h"
#include "mozilla/Util.h" #include "mozilla/Util.h"
#include "nsIScreen.h"
#include "nsIScreenManager.h"
#if defined(XP_UNIX) #if defined(XP_UNIX)
#ifdef MOZ_WIDGET_GTK2 #ifdef MOZ_WIDGET_GTK2
@@ -2193,6 +2190,13 @@ static const EGLint kEGLConfigAttribsRGBA32[] = {
LOCAL_EGL_NONE LOCAL_EGL_NONE
}; };
// This struct is used only by CreateConfig below, but ISO C++98 forbids
// instantiating a template dependent on a locally-defined type. Boo-urns!
struct EGLAttribs {
gfxASurface::gfxImageFormat mFormat;
const EGLint* mAttribs;
};
// Return true if a suitable EGLConfig was found and pass it out // Return true if a suitable EGLConfig was found and pass it out
// through aConfig. Return false otherwise. // through aConfig. Return false otherwise.
// //
@@ -2201,41 +2205,47 @@ static const EGLint kEGLConfigAttribsRGBA32[] = {
static bool static bool
CreateConfig(EGLConfig* aConfig) CreateConfig(EGLConfig* aConfig)
{ {
nsCOMPtr<nsIScreenManager> screenMgr = do_GetService("@mozilla.org/gfx/screenmanager;1"); EGLAttribs attribsToTry[] = {
nsCOMPtr<nsIScreen> screen; #ifdef MOZ_GFX_OPTIMIZE_MOBILE
screenMgr->GetPrimaryScreen(getter_AddRefs(screen)); // Prefer r5g6b5 for potential savings in memory bandwidth.
PRInt32 depth = 24; // This needs to be reevaluated for newer devices.
screen->GetColorDepth(&depth); { gfxASurface::ImageFormatRGB16_565, kEGLConfigAttribsRGB16 },
#endif
{ gfxASurface::ImageFormatARGB32, kEGLConfigAttribsRGBA32 },
};
EGLConfig configs[64]; EGLConfig configs[64];
gfxASurface::gfxImageFormat format; for (unsigned i = 0; i < ArrayLength(attribsToTry); ++i) {
const EGLint* attribs = depth == 16 ? kEGLConfigAttribsRGB16 : const EGLAttribs& attribs = attribsToTry[i];
kEGLConfigAttribsRGBA32; EGLint ncfg = ArrayLength(configs);
EGLint ncfg = ArrayLength(configs);
if (!sEGLLibrary.fChooseConfig(EGL_DISPLAY(), attribs, if (!sEGLLibrary.fChooseConfig(EGL_DISPLAY(), attribs.mAttribs,
configs, ncfg, &ncfg) || configs, ncfg, &ncfg) ||
ncfg < 1) { ncfg < 1)
return false;
}
for (int j = 0; j < ncfg; ++j) {
EGLConfig config = configs[j];
EGLint r, g, b, a;
if (sEGLLibrary.fGetConfigAttrib(EGL_DISPLAY(), config,
LOCAL_EGL_RED_SIZE, &r) &&
sEGLLibrary.fGetConfigAttrib(EGL_DISPLAY(), config,
LOCAL_EGL_GREEN_SIZE, &g) &&
sEGLLibrary.fGetConfigAttrib(EGL_DISPLAY(), config,
LOCAL_EGL_BLUE_SIZE, &b) &&
sEGLLibrary.fGetConfigAttrib(EGL_DISPLAY(), config,
LOCAL_EGL_ALPHA_SIZE, &a) &&
((depth == 16 && r == 5 && g == 6 && b == 5) ||
(depth == 24 && r == 8 && g == 8 && b == 8 && a == 8)))
{ {
*aConfig = config; continue;
return true; }
for (int j = 0; j < ncfg; ++j) {
EGLConfig config = configs[j];
EGLint r, g, b, a;
if (sEGLLibrary.fGetConfigAttrib(EGL_DISPLAY(), config,
LOCAL_EGL_RED_SIZE, &r) &&
sEGLLibrary.fGetConfigAttrib(EGL_DISPLAY(), config,
LOCAL_EGL_GREEN_SIZE, &g) &&
sEGLLibrary.fGetConfigAttrib(EGL_DISPLAY(), config,
LOCAL_EGL_BLUE_SIZE, &b) &&
sEGLLibrary.fGetConfigAttrib(EGL_DISPLAY(), config,
LOCAL_EGL_ALPHA_SIZE, &a) &&
((gfxASurface::ImageFormatRGB16_565 == attribs.mFormat &&
r == 5 && g == 6 && b == 5) ||
(gfxASurface::ImageFormatARGB32 == attribs.mFormat &&
r == 8 && g == 8 && b == 8 && a == 8)))
{
*aConfig = config;
return true;
}
} }
} }
return false; return false;

View File

@@ -78,7 +78,7 @@ nsScreenAndroid::GetPixelDepth(PRInt32 *aPixelDepth)
{ {
// XXX do we need to lie here about 16bpp? Or // XXX do we need to lie here about 16bpp? Or
// should we actually check and return the right thing? // should we actually check and return the right thing?
*aPixelDepth = 16; *aPixelDepth = 24;
return NS_OK; return NS_OK;
} }

View File

@@ -510,7 +510,9 @@ nsScreenGonk::GetAvailRect(PRInt32 *outLeft, PRInt32 *outTop,
NS_IMETHODIMP NS_IMETHODIMP
nsScreenGonk::GetPixelDepth(PRInt32 *aPixelDepth) nsScreenGonk::GetPixelDepth(PRInt32 *aPixelDepth)
{ {
*aPixelDepth = gNativeWindow->getDevice()->format == GGL_PIXEL_FORMAT_RGB_565 ? 16 : 24; // XXX do we need to lie here about 16bpp? Or
// should we actually check and return the right thing?
*aPixelDepth = 24;
return NS_OK; return NS_OK;
} }