diff options
author | Tao Bao <tbao@google.com> | 2018-05-29 23:16:52 +0200 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2018-05-29 23:16:52 +0200 |
commit | 4fcc200272bfcb257df58a53f2cf6aac2c6dcbbd (patch) | |
tree | 04091e7f8b18e2a71094171af32115aea9555942 /screen_ui.cpp | |
parent | Merge "updater: Add Commmand class to manage BBOTA commands." (diff) | |
parent | Merge "ui: Use std::thread to create input/progress threads." (diff) | |
download | android_bootable_recovery-4fcc200272bfcb257df58a53f2cf6aac2c6dcbbd.tar android_bootable_recovery-4fcc200272bfcb257df58a53f2cf6aac2c6dcbbd.tar.gz android_bootable_recovery-4fcc200272bfcb257df58a53f2cf6aac2c6dcbbd.tar.bz2 android_bootable_recovery-4fcc200272bfcb257df58a53f2cf6aac2c6dcbbd.tar.lz android_bootable_recovery-4fcc200272bfcb257df58a53f2cf6aac2c6dcbbd.tar.xz android_bootable_recovery-4fcc200272bfcb257df58a53f2cf6aac2c6dcbbd.tar.zst android_bootable_recovery-4fcc200272bfcb257df58a53f2cf6aac2c6dcbbd.zip |
Diffstat (limited to 'screen_ui.cpp')
-rw-r--r-- | screen_ui.cpp | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/screen_ui.cpp b/screen_ui.cpp index f1b38781a..0ee0ddcec 100644 --- a/screen_ui.cpp +++ b/screen_ui.cpp @@ -32,8 +32,10 @@ #include <unistd.h> #include <algorithm> +#include <chrono> #include <memory> #include <string> +#include <thread> #include <unordered_map> #include <vector> @@ -172,6 +174,11 @@ ScreenRecoveryUI::ScreenRecoveryUI(bool scrollable_menu) rtl_locale_(false), updateMutex(PTHREAD_MUTEX_INITIALIZER) {} +ScreenRecoveryUI::~ScreenRecoveryUI() { + progress_thread_stopped_ = true; + progress_thread_.join(); +} + GRSurface* ScreenRecoveryUI::GetCurrentFrame() const { if (currentIcon == INSTALLING_UPDATE || currentIcon == ERASING) { return intro_done ? loopFrames[current_frame] : introFrames[current_frame]; @@ -613,15 +620,9 @@ void ScreenRecoveryUI::update_progress_locked() { gr_flip(); } -// Keeps the progress bar updated, even when the process is otherwise busy. -void* ScreenRecoveryUI::ProgressThreadStartRoutine(void* data) { - reinterpret_cast<ScreenRecoveryUI*>(data)->ProgressThreadLoop(); - return nullptr; -} - void ScreenRecoveryUI::ProgressThreadLoop() { double interval = 1.0 / kAnimationFps; - while (true) { + while (!progress_thread_stopped_) { double start = now(); pthread_mutex_lock(&updateMutex); @@ -749,7 +750,8 @@ bool ScreenRecoveryUI::Init(const std::string& locale) { LoadAnimation(); - pthread_create(&progress_thread_, nullptr, ProgressThreadStartRoutine, this); + // Keep the progress bar updated, even when the process is otherwise busy. + progress_thread_ = std::thread(&ScreenRecoveryUI::ProgressThreadLoop, this); return true; } |