summaryrefslogtreecommitdiffstats
path: root/screen_ui.cpp
diff options
context:
space:
mode:
authorTao Bao <tbao@google.com>2018-05-29 23:20:24 +0200
committerandroid-build-merger <android-build-merger@google.com>2018-05-29 23:20:24 +0200
commit1b55de658e650cd9f29dbd0f040b923ccd129645 (patch)
tree9e1cd4e38380de9d4def93bea3a35e8b6301d6d6 /screen_ui.cpp
parentMerge "updater: Add Commmand class to manage BBOTA commands." am: a488bd992f (diff)
parentMerge "ui: Use std::thread to create input/progress threads." (diff)
downloadandroid_bootable_recovery-1b55de658e650cd9f29dbd0f040b923ccd129645.tar
android_bootable_recovery-1b55de658e650cd9f29dbd0f040b923ccd129645.tar.gz
android_bootable_recovery-1b55de658e650cd9f29dbd0f040b923ccd129645.tar.bz2
android_bootable_recovery-1b55de658e650cd9f29dbd0f040b923ccd129645.tar.lz
android_bootable_recovery-1b55de658e650cd9f29dbd0f040b923ccd129645.tar.xz
android_bootable_recovery-1b55de658e650cd9f29dbd0f040b923ccd129645.tar.zst
android_bootable_recovery-1b55de658e650cd9f29dbd0f040b923ccd129645.zip
Diffstat (limited to 'screen_ui.cpp')
-rw-r--r--screen_ui.cpp18
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;
}