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

Commit 9cd6ac8f authored by niuwenchao's avatar niuwenchao Committed by wenchao niu
Browse files

Fix the problem of slow exit of boot animation



When desc.txt configuration interval is very long, it leads to too long sleep time, which affects the execution frequency of checkExit and leads to untimely exit of boot animation.

For example:
1080 2400 5
p 0 5 part0

Change-Id: I9806a934189642a31ceb72cbf35c3ff07fe6b7d8
Signed-off-by: default avatarniuwenchao <niuwenchao@xiaomi.com>
parent de8dd4aa
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -107,6 +107,7 @@ static const char PROGRESS_PROP_NAME[] = "service.bootanim.progress";
static const char DISPLAYS_PROP_NAME[] = "persist.service.bootanim.displays";
static const char CLOCK_ENABLED_PROP_NAME[] = "persist.sys.bootanim.clock.enabled";
static const int ANIM_ENTRY_NAME_MAX = ANIM_PATH_MAX + 1;
static const int MAX_CHECK_EXIT_INTERVAL_US = 50000;
static constexpr size_t TEXT_POS_LEN_MAX = 16;
static const int DYNAMIC_COLOR_COUNT = 4;
static const char U_TEXTURE[] = "uTexture";
@@ -1680,7 +1681,17 @@ bool BootAnimation::playAnimation(const Animation& animation) {
                checkExit();
            }

            usleep(part.pause * ns2us(frameDuration));
            int pauseDuration = part.pause * ns2us(frameDuration);
            while(pauseDuration > 0 && !exitPending()){
                if (pauseDuration > MAX_CHECK_EXIT_INTERVAL_US) {
                    usleep(MAX_CHECK_EXIT_INTERVAL_US);
                    pauseDuration -= MAX_CHECK_EXIT_INTERVAL_US;
                } else {
                    usleep(pauseDuration);
                    break;
                }
                checkExit();
            }

            if (exitPending() && !part.count && mCurrentInset >= mTargetInset &&
                !part.hasFadingPhase()) {