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

Commit e350724e authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Render boot animation with same size as framebuffer" into rvc-dev am:...

Merge "Render boot animation with same size as framebuffer" into rvc-dev am: cbea0ab5 am: 937a25de am: 35ae2778 am: 3c1b9ad9

Original change: undetermined

Change-Id: I1ae7b19afe2e88fc1a7fd32c41fb870e80685ff8
parents 71572d9b 3c1b9ad9
Loading
Loading
Loading
Loading
+26 −4
Original line number Diff line number Diff line
@@ -372,6 +372,25 @@ EGLConfig BootAnimation::getEglConfig(const EGLDisplay& display) {
    return config;
}

ui::Size BootAnimation::limitSurfaceSize(int width, int height) const {
    ui::Size limited(width, height);
    bool wasLimited = false;
    const float aspectRatio = float(width) / float(height);
    if (mMaxWidth != 0 && width > mMaxWidth) {
        limited.height = mMaxWidth / aspectRatio;
        limited.width = mMaxWidth;
        wasLimited = true;
    }
    if (mMaxHeight != 0 && limited.height > mMaxHeight) {
        limited.height = mMaxHeight;
        limited.width = mMaxHeight * aspectRatio;
        wasLimited = true;
    }
    SLOGV_IF(wasLimited, "Surface size has been limited to [%dx%d] from [%dx%d]",
             limited.width, limited.height, width, height);
    return limited;
}

status_t BootAnimation::readyToRun() {
    mAssets.addDefaultAssets();

@@ -385,8 +404,10 @@ status_t BootAnimation::readyToRun() {
    if (error != NO_ERROR)
        return error;

    const ui::Size& resolution = displayConfig.resolution;

    mMaxWidth = android::base::GetIntProperty("ro.surface_flinger.max_graphics_width", 0);
    mMaxHeight = android::base::GetIntProperty("ro.surface_flinger.max_graphics_height", 0);
    ui::Size resolution = displayConfig.resolution;
    resolution = limitSurfaceSize(resolution.width, resolution.height);
    // create the native surface
    sp<SurfaceControl> control = session()->createSurface(String8("BootAnimation"),
            resolution.getWidth(), resolution.getHeight(), PIXEL_FORMAT_RGB_565);
@@ -482,8 +503,9 @@ void BootAnimation::resizeSurface(int newWidth, int newHeight) {
    eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
    eglDestroySurface(mDisplay, mSurface);

    mWidth = newWidth;
    mHeight = newHeight;
    const auto limitedSize = limitSurfaceSize(newWidth, newHeight);
    mWidth = limitedSize.width;
    mHeight = limitedSize.height;

    SurfaceComposerClient::Transaction t;
    t.setSize(mFlingerSurfaceControl, mWidth, mHeight);
+3 −0
Original line number Diff line number Diff line
@@ -170,6 +170,7 @@ private:
    bool findBootAnimationFileInternal(const std::vector<std::string>& files);
    bool preloadAnimation();
    EGLConfig getEglConfig(const EGLDisplay&);
    ui::Size limitSurfaceSize(int width, int height) const;
    void resizeSurface(int newWidth, int newHeight);

    void checkExit();
@@ -181,6 +182,8 @@ private:
    Texture     mAndroid[2];
    int         mWidth;
    int         mHeight;
    int         mMaxWidth = 0;
    int         mMaxHeight = 0;
    int         mCurrentInset;
    int         mTargetInset;
    bool        mUseNpotTextures = false;