HwcComposer2D::HwcComposer2D()
    : mList(nullptr)
    , mMaxLayerCount(0)
    , mColorFill(false)
    , mRBSwapSupport(false)
    , mPrepared(false)
    , mHasHWVsync(false)
    , mLock("mozilla.HwcComposer2D.mLock")
{
    mHal = HwcHALBase::CreateHwcHAL();
    if (!mHal->HasHwc()) {
        LOGD("no hwc support");
        return;
    }

    RegisterHwcEventCallback();

    nsIntSize screenSize;

    GonkDisplay::NativeData data = GetGonkDisplay()->GetNativeData(GonkDisplay::DISPLAY_PRIMARY);
    ANativeWindow *win = data.mNativeWindow.get();
    win->query(win, NATIVE_WINDOW_WIDTH, &screenSize.width);
    win->query(win, NATIVE_WINDOW_HEIGHT, &screenSize.height);
    mScreenRect = gfx::IntRect(gfx::IntPoint(0, 0), screenSize);

    mColorFill = mHal->Query(HwcHALBase::QueryType::COLOR_FILL);
    mRBSwapSupport = mHal->Query(HwcHALBase::QueryType::RB_SWAP);
}
HwcComposer2D::HwcComposer2D()
    : mHwc(nullptr)
    , mList(nullptr)
    , mGLContext(nullptr)
    , mMaxLayerCount(0)
    , mColorFill(false)
    , mRBSwapSupport(false)
#if ANDROID_VERSION >= 17
    , mPrevRetireFence(Fence::NO_FENCE)
    , mPrevDisplayFence(Fence::NO_FENCE)
    , mLastVsyncTime(0)
#endif
    , mPrepared(false)
    , mHasHWVsync(false)
    , mLock("mozilla.HwcComposer2D.mLock")
{
#if ANDROID_VERSION >= 17
    RegisterHwcEventCallback();
#endif
}