From c3fc11ec3f7e2b96aeec2f894adc24eed1a23417 Mon Sep 17 00:00:00 2001 From: Diego Wilson Date: Fri, 27 Sep 2013 13:37:19 -0700 Subject: [PATCH] Bug 901978 - Query HWC to check for "R/B swap" and Color layer support. r=ncameron --- widget/gonk/HwcComposer2D.cpp | 17 +++++++++++++++++ widget/gonk/HwcComposer2D.h | 1 + 2 files changed, 18 insertions(+) diff --git a/widget/gonk/HwcComposer2D.cpp b/widget/gonk/HwcComposer2D.cpp index d8cb4cf330c..15aab226f08 100644 --- a/widget/gonk/HwcComposer2D.cpp +++ b/widget/gonk/HwcComposer2D.cpp @@ -61,6 +61,8 @@ HwcComposer2D::HwcComposer2D() : mMaxLayerCount(0) , mList(nullptr) , mHwc(nullptr) + , mColorFill(false) + , mRBSwapSupport(false) { } @@ -84,9 +86,20 @@ HwcComposer2D::Init(hwc_display_t dpy, hwc_surface_t sur) mozilla::Framebuffer::GetSize(&screenSize); mScreenRect = nsIntRect(nsIntPoint(0, 0), screenSize); +#if ANDROID_VERSION >= 18 + int supported = 0; + if (mHwc->query(mHwc, HwcUtils::HWC_COLOR_FILL, &supported) == NO_ERROR) { + mColorFill = supported ? true : false; + } + if (mHwc->query(mHwc, HwcUtils::HWC_FORMAT_RB_SWAP, &supported) == NO_ERROR) { + mRBSwapSupport = supported ? true : false; + } +#else char propValue[PROPERTY_VALUE_MAX]; property_get("ro.display.colorfill", propValue, "0"); mColorFill = (atoi(propValue) == 1) ? true : false; + mRBSwapSupport = true; +#endif mDpy = dpy; mSur = sur; @@ -270,6 +283,10 @@ HwcComposer2D::PrepareLayerList(Layer* aLayer, if (!fillColor) { if (state.FormatRBSwapped()) { + if (!mRBSwapSupport) { + LOGD("No R/B swap support in H/W Composer"); + return false; + } hwcLayer.flags |= HwcUtils::HWC_FORMAT_RB_SWAP; } diff --git a/widget/gonk/HwcComposer2D.h b/widget/gonk/HwcComposer2D.h index e0bc091c7fe..cfab6929a2a 100644 --- a/widget/gonk/HwcComposer2D.h +++ b/widget/gonk/HwcComposer2D.h @@ -75,6 +75,7 @@ private: nsIntRect mScreenRect; int mMaxLayerCount; bool mColorFill; + bool mRBSwapSupport; //Holds all the dynamically allocated RectVectors needed //to render the current frame std::list mVisibleRegions;