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

Commit 82dd4904 authored by Mathias Agopian's avatar Mathias Agopian Committed by Android (Google) Code Review
Browse files

Merge "rewrite density calculation code so it's understandable"

parents 8a849ddb b5dd9c0f
Loading
Loading
Loading
Loading
+43 −31
Original line number Diff line number Diff line
@@ -162,6 +162,46 @@ void DisplayHardware::init(uint32_t dpy)
    mRefreshRate = fbDev->fps;
    mNextFakeVSync = 0;

    if (mDpiX == 0 || mDpiY == 0) {
        ALOGE("invalid screen resolution from fb HAL (xdpi=%f, ydpi=%f), "
               "defaulting to 160 dpi", mDpiX, mDpiY);
        mDpiX = mDpiY = 160;
    }

    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;
    }



    /* FIXME: this is a temporary HACK until we are able to report the refresh rate
     * properly from the HAL. The WindowManagerService now relies on this value.
@@ -246,38 +286,10 @@ void DisplayHardware::init(uint32_t dpy)
        }
    }

    /* use the xdpi as our density baseline */
    mDensity = mDpiX;

    /* Read density from build-specific ro.sf.lcd_density property
     * except if it is overridden by qemu.sf.lcd_density.
     */
    if (property_get("qemu.sf.lcd_density", property, NULL) <= 0) {
        if (property_get("ro.sf.lcd_density", property, NULL) <= 0) {
            if (mDpiX && mDpiY) {
                ALOGI("Using density info from display: xdpi=%.1f ydpi=%.1f\n",
                      mDpiX, mDpiY);
            } else {
                ALOGW("No display dpi and ro.sf.lcd_density not defined, using 160 dpi by default.");
                mDpiX = mDpiY = mDensity = 160;
            }
        } else {
            /* force density to what the build requested */
            mDensity = atoi(property);
        }
    } else {
        /* for the emulator case, reset the dpi values too */
        mDpiX = mDpiY = mDensity = atoi(property);
    }

    /* set the actual density scale */
    mDensity *= (1.0f / 160.0f);

    /*
     * Create our OpenGL ES context
     */
    

    EGLint contextAttributes[] = {
#ifdef EGL_IMG_context_priority
#ifdef HAS_CONTEXT_PRIORITY
+4 −2
Original line number Diff line number Diff line
@@ -1680,13 +1680,15 @@ void SurfaceFlinger::dumpAllLocked(
            "  transaction-flags         : %08x\n"
            "  refresh-rate              : %f fps\n"
            "  x-dpi                     : %f\n"
            "  y-dpi                     : %f\n",
            "  y-dpi                     : %f\n"
            "  density                   : %f\n",
            mLastSwapBufferTime/1000.0,
            mLastTransactionTime/1000.0,
            mTransactionFlags,
            hw.getRefreshRate(),
            hw.getDpiX(),
            hw.getDpiY());
            hw.getDpiY(),
            hw.getDensity());
    result.append(buffer);

    snprintf(buffer, SIZE, "  eglSwapBuffers time: %f us\n",