From 485e9adfce01b9b4e21dae927fb3b7ed3d5fc83d Mon Sep 17 00:00:00 2001 From: jacqueline Date: Fri, 25 Aug 2023 15:58:54 +1000 Subject: [PATCH] Performance tweaks for smoother tunes - Pin the decoder task to APP_CORE to reduce context switches - Increase sample buffer sizes --- src/audio/audio_converter.cpp | 2 +- src/audio/audio_decoder.cpp | 4 ++-- src/audio/i2s_audio_output.cpp | 2 +- src/ui/lvgl_task.cpp | 2 +- src/ui/widget_top_bar.cpp | 14 +++++++------- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/audio/audio_converter.cpp b/src/audio/audio_converter.cpp index c540d821..60d83648 100644 --- a/src/audio/audio_converter.cpp +++ b/src/audio/audio_converter.cpp @@ -24,7 +24,7 @@ static constexpr char kTag[] = "mixer"; static constexpr std::size_t kSourceBufferLength = 8 * 1024; -static constexpr std::size_t kSampleBufferLength = 240 * 2; +static constexpr std::size_t kSampleBufferLength = 240 * 2 * 4; namespace audio { diff --git a/src/audio/audio_decoder.cpp b/src/audio/audio_decoder.cpp index 03f81124..f9f76387 100644 --- a/src/audio/audio_decoder.cpp +++ b/src/audio/audio_decoder.cpp @@ -46,7 +46,7 @@ namespace audio { static const char* kTag = "audio_dec"; -static constexpr std::size_t kCodecBufferLength = 240 * 4; +static constexpr std::size_t kCodecBufferLength = 240 * 4 * 4; Timer::Timer(const codecs::ICodec::OutputFormat& format) : current_seconds_(0), @@ -79,7 +79,7 @@ auto Timer::AddSamples(std::size_t samples) -> void { auto Decoder::Start(std::shared_ptr source, std::shared_ptr sink) -> Decoder* { Decoder* task = new Decoder(source, sink); - tasks::StartPersistent([=]() { task->Main(); }); + tasks::StartPersistent(1, [=]() { task->Main(); }); return task; } diff --git a/src/audio/i2s_audio_output.cpp b/src/audio/i2s_audio_output.cpp index 9e18597a..359cd4c6 100644 --- a/src/audio/i2s_audio_output.cpp +++ b/src/audio/i2s_audio_output.cpp @@ -37,7 +37,7 @@ static constexpr uint16_t kMaxVolume = 0x1ff; static constexpr uint16_t kMinVolume = 0b0; static constexpr uint16_t kMaxVolumeBeforeClipping = 0x185; static constexpr uint16_t kLineLevelVolume = 0x13d; -static constexpr uint16_t kDefaultVolume = 0x128; +static constexpr uint16_t kDefaultVolume = 0x100; static constexpr size_t kDrainBufferSize = 8 * 1024; diff --git a/src/ui/lvgl_task.cpp b/src/ui/lvgl_task.cpp index 7d4024e5..d13ef5aa 100644 --- a/src/ui/lvgl_task.cpp +++ b/src/ui/lvgl_task.cpp @@ -49,7 +49,7 @@ namespace ui { static const char* kTag = "lv_task"; -static const TickType_t kMaxFrameRate = pdMS_TO_TICKS(66); +static const TickType_t kMaxFrameRate = pdMS_TO_TICKS(100); static int sTimerId; static SemaphoreHandle_t sFrameSemaphore; diff --git a/src/ui/widget_top_bar.cpp b/src/ui/widget_top_bar.cpp index bd146c99..2d2e13dc 100644 --- a/src/ui/widget_top_bar.cpp +++ b/src/ui/widget_top_bar.cpp @@ -58,23 +58,23 @@ auto TopBar::Update(const State& state) -> void { lv_label_set_text(playback_, "-"); break; case PlaybackState::kPaused: - lv_label_set_text(playback_, ""); + lv_label_set_text(playback_, LV_SYMBOL_PAUSE); break; case PlaybackState::kPlaying: - lv_label_set_text(playback_, ""); + lv_label_set_text(playback_, LV_SYMBOL_PLAY); break; } if (state.battery_percent >= 95) { - lv_label_set_text(battery_, ""); + lv_label_set_text(battery_, LV_SYMBOL_BATTERY_FULL); } else if (state.battery_percent >= 70) { - lv_label_set_text(battery_, ""); + lv_label_set_text(battery_, LV_SYMBOL_BATTERY_1); } else if (state.battery_percent >= 40) { - lv_label_set_text(battery_, ""); + lv_label_set_text(battery_, LV_SYMBOL_BATTERY_2); } else if (state.battery_percent >= 10) { - lv_label_set_text(battery_, ""); + lv_label_set_text(battery_, LV_SYMBOL_BATTERY_3); } else { - lv_label_set_text(battery_, ""); + lv_label_set_text(battery_, LV_SYMBOL_BATTERY_EMPTY); } }