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

Commit ad8b5a6c authored by Damien Bargiacchi's avatar Damien Bargiacchi
Browse files

Remove duplicate thread loop

Fixes animation running at 2x speed

Change-Id: Ieec353097b6eee1cf40530e6f4f1e69927d2bc98
parent 43d18602
Loading
Loading
Loading
Loading
+4 −52
Original line number Diff line number Diff line
@@ -184,55 +184,10 @@ void WearRecoveryUI::draw_screen_locked()
    }
}

// Keeps the progress bar updated, even when the process is otherwise busy.
void* WearRecoveryUI::progress_thread(void *cookie) {
    self->progress_loop();
    return NULL;
}

void WearRecoveryUI::progress_loop() {
    double interval = 1.0 / animation_fps;
    for (;;) {
        double start = now();
        pthread_mutex_lock(&updateMutex);
        bool redraw = false;

        if ((currentIcon == INSTALLING_UPDATE || currentIcon == ERASING)
                                                            && !show_text) {
            if (!intro_done) {
                if (current_frame >= intro_frames - 1) {
                    intro_done = true;
                    current_frame = 0;
                } else {
                    current_frame++;
                }
            } else {
                current_frame = (current_frame + 1) % loop_frames;
            }
            redraw = true;
        }

        // move the progress bar forward on timed intervals, if configured
        int duration = progressScopeDuration;
        if (progressBarType == DETERMINATE && duration > 0) {
            double elapsed = now() - progressScopeTime;
            float p = 1.0 * elapsed / duration;
            if (p > 1.0) p = 1.0;
            if (p > progress) {
                progress = p;
                redraw = true;
            }
        }

        if (redraw) update_screen_locked();

        pthread_mutex_unlock(&updateMutex);
        double end = now();
        // minimum of 20ms delay between frames
        double delay = interval - (end-start);
        if (delay < 0.02) delay = 0.02;
        usleep((long)(delay * 1000000));
    }
// TODO merge drawing routines with screen_ui
void WearRecoveryUI::update_progress_locked() {
    draw_screen_locked();
    gr_flip();
}

void WearRecoveryUI::InitTextParams() {
@@ -253,9 +208,6 @@ void WearRecoveryUI::Init() {
    backgroundIcon[ERASING] = backgroundIcon[INSTALLING_UPDATE];
    LoadBitmap("icon_error", &backgroundIcon[ERROR]);
    backgroundIcon[NO_COMMAND] = backgroundIcon[ERROR];

    pthread_create(&progress_t, NULL, progress_thread, NULL);

}

void WearRecoveryUI::SetStage(int current, int max)
+2 −2
Original line number Diff line number Diff line
@@ -54,6 +54,8 @@ class WearRecoveryUI : public ScreenRecoveryUI {

    void InitTextParams() override;

    void update_progress_locked() override;

    void PrintV(const char*, bool, va_list) override;

  private:
@@ -74,8 +76,6 @@ class WearRecoveryUI : public ScreenRecoveryUI {
    void draw_screen_locked() override;
    void draw_progress_locked();

    static void* progress_thread(void* cookie);
    void progress_loop();
    void PutChar(char);
    void ClearText();
};