Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8b736f13 authored by Mathias Agopian's avatar Mathias Agopian
Browse files

xdpi / ydpi were reported as 0

Bug: 6975723
Change-Id: Ia7fa37ec11e2308804f5034959a37e508d292d31
parent 670d24a8
Loading
Loading
Loading
Loading
+0 −46
Original line number Diff line number Diff line
@@ -79,8 +79,6 @@ DisplayDevice::DisplayDevice(
      mDisplay(EGL_NO_DISPLAY),
      mSurface(EGL_NO_SURFACE),
      mContext(EGL_NO_CONTEXT),
      mDpiX(), mDpiY(),
      mDensity(),
      mDisplayWidth(), mDisplayHeight(), mFormat(),
      mFlags(),
      mPageFlipCount(),
@@ -103,18 +101,6 @@ bool DisplayDevice::isValid() const {
    return mFlinger != NULL;
}

float DisplayDevice::getDpiX() const {
    return mDpiX;
}

float DisplayDevice::getDpiY() const {
    return mDpiY;
}

float DisplayDevice::getDensity() const {
    return mDensity;
}

int DisplayDevice::getWidth() const {
    return mDisplayWidth;
}
@@ -137,38 +123,6 @@ void DisplayDevice::init(EGLConfig config)

    int format;
    window->query(window, NATIVE_WINDOW_FORMAT, &format);
    mDpiX = window->xdpi;
    mDpiY = window->ydpi;

    // TODO: Not sure if display density should handled by SF any longer
    class Density {
        static int getDensityFromProperty(char const* propName) {
            char property[PROPERTY_VALUE_MAX];
            int density = 0;
            if (property_get(propName, property, NULL) > 0) {
                density = atoi(property);
            }
            return density;
        }
    public:
        static int getEmuDensity() {
            return getDensityFromProperty("qemu.sf.lcd_density"); }
        static int getBuildDensity()  {
            return getDensityFromProperty("ro.sf.lcd_density"); }
    };
    // The density of the device is provided by a build property
    mDensity = Density::getBuildDensity() / 160.0f;
    if (mDensity == 0) {
        // the build doesn't provide a density -- this is wrong!
        // use xdpi instead
        ALOGE("ro.sf.lcd_density must be defined as a build property");
        mDensity = mDpiX / 160.0f;
    }
    if (Density::getEmuDensity()) {
        // if "qemu.sf.lcd_density" is specified, it overrides everything
        mDpiX = mDpiY = mDensity = Density::getEmuDensity();
        mDensity /= 160.0f;
    }

    /*
     * Create our display's surface
+0 −6
Original line number Diff line number Diff line
@@ -77,9 +77,6 @@ public:
    // be instantaneous, might involve copying the frame buffer around.
    void flip(const Region& dirty) const;

    float       getDpiX() const;
    float       getDpiY() const;
    float       getDensity() const;
    int         getWidth() const;
    int         getHeight() const;
    PixelFormat getFormat() const;
@@ -144,9 +141,6 @@ private:
    EGLDisplay      mDisplay;
    EGLSurface      mSurface;
    EGLContext      mContext;
    float           mDpiX;
    float           mDpiY;
    float           mDensity;
    int             mDisplayWidth;
    int             mDisplayHeight;
    PixelFormat     mFormat;
+0 −13
Original line number Diff line number Diff line
@@ -175,19 +175,6 @@ void FramebufferSurface::freeBufferLocked(int slotIndex) {
    }
}

float FramebufferSurface::getRefreshRate() const {
    /* FIXME: REFRESH_RATE is a temporary HACK until we are able to report the
     * refresh rate properly from the HAL. The WindowManagerService now relies
     * on this value.
     */
#ifndef REFRESH_RATE
    return fbDev->fps;
#else
    return REFRESH_RATE;
#warning "refresh rate set via makefile to REFRESH_RATE"
#endif
}

status_t FramebufferSurface::setUpdateRectangle(const Rect& r)
{
    return INVALID_OPERATION;
+7 −3
Original line number Diff line number Diff line
@@ -38,9 +38,6 @@ public:

    static sp<FramebufferSurface> create();

    // TODO: this should be coming from HWC
    float getRefreshRate() const;

    bool isUpdateOnDemand() const { return false; }
    status_t setUpdateRectangle(const Rect& updateRect);
    status_t compositionComplete();
@@ -52,6 +49,13 @@ public:
    // BufferQueue.  The new buffer is returned in the 'buffer' argument.
    status_t nextBuffer(sp<GraphicBuffer>* buffer);

    // FIXME: currently there are information we can only get from the
    // FB HAL, and FB HAL can only be instantiated once on some devices.
    // Eventually this functionality will have to move in HWC or somewhere else.
    const framebuffer_device_t* getFbHal() const {
        return fbDev;
    }

private:
    FramebufferSurface();
    virtual ~FramebufferSurface(); // this class cannot be overloaded
+17 −13
Original line number Diff line number Diff line
@@ -179,7 +179,8 @@ struct HWComposer::cb_context {

HWComposer::HWComposer(
        const sp<SurfaceFlinger>& flinger,
        EventHandler& handler)
        EventHandler& handler,
        framebuffer_device_t const* fbDev)
    : mFlinger(flinger),
      mModule(0), mHwc(0), mCapacity(0),
      mNumOVLayers(0), mNumFBLayers(0),
@@ -238,20 +239,15 @@ HWComposer::HWComposer(
        }
    }


    if (fbDev) {
        if (mRefreshPeriod == 0) {
        // for compatibility, we attempt to get the refresh rate from
        // the FB HAL if we couldn't get it from the HWC HAL.
        hw_module_t const* module;
        if (hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module) == 0) {
            framebuffer_device_t* fbDev;
            int err = framebuffer_open(module, &fbDev);
            if (!err && fbDev) {
            mRefreshPeriod = nsecs_t(1e9 / fbDev->fps);
                framebuffer_close(fbDev);
            }
        }
            ALOGW("getting VSYNC period from fb HAL: %lld", mRefreshPeriod);
        }
        mDpiX = fbDev->xdpi;
        mDpiY = fbDev->ydpi;
    }

    if (mRefreshPeriod == 0) {
        mRefreshPeriod = nsecs_t(1e9 / 60.0);
@@ -313,6 +309,14 @@ nsecs_t HWComposer::getRefreshTimestamp() const {
    return now - ((now - mLastHwVSync) %  mRefreshPeriod);
}

float HWComposer::getDpiX() const {
    return mDpiX;
}

float HWComposer::getDpiY() const {
    return mDpiY;
}

void HWComposer::eventControl(int event, int enabled) {
    status_t err = NO_ERROR;
    if (mHwc && mHwc->common.version >= HWC_DEVICE_API_VERSION_0_3) {
Loading