[perf] reduce desktop build dependencies and binary size

This commit is contained in:
dijunkun
2026-09-25 01:47:20 +08:00
parent 3c5b3f8e38
commit e62d473b64
26 changed files with 249 additions and 147 deletions
@@ -1,5 +1,7 @@
#include "task_queue_lock_free.h"
#include <concurrentqueue.h>
#include <exception>
#include <new>
#include <stdexcept>
@@ -7,8 +9,15 @@
namespace crossdesk {
struct TaskQueueLockFree::QueueStorage {
moodycamel::ConcurrentQueue<TaskItem> tasks;
// All submissions share one producer so different caller threads keep FIFO.
moodycamel::ProducerToken producer{tasks};
};
TaskQueueLockFree::TaskQueueLockFree()
: producer_(task_queue_), worker_([this] { WorkerThread(); }) {}
: queue_(std::make_unique<QueueStorage>()),
worker_([this] { WorkerThread(); }) {}
TaskQueueLockFree::~TaskQueueLockFree() { Stop(); }
@@ -24,7 +33,7 @@ std::future<void> TaskQueueLockFree::PostTask(std::function<void()> task) {
// Count before publishing: the worker may dequeue as soon as enqueue returns.
++pending_tasks_;
if (!task_queue_.enqueue(producer_, std::move(item))) {
if (!queue_->tasks.enqueue(queue_->producer, std::move(item))) {
--pending_tasks_;
throw std::bad_alloc();
}
@@ -48,7 +57,7 @@ void TaskQueueLockFree::Stop() {
void TaskQueueLockFree::WorkerThread() {
while (true) {
TaskItem item;
while (task_queue_.try_dequeue(item)) {
while (queue_->tasks.try_dequeue(item)) {
--pending_tasks_;
std::exception_ptr error;
@@ -12,11 +12,10 @@
#include <cstddef>
#include <functional>
#include <future>
#include <memory>
#include <mutex>
#include <thread>
#include <concurrentqueue.h>
namespace crossdesk {
// A single worker executes tasks in submission order. The concurrent queue
@@ -41,9 +40,8 @@ class TaskQueueLockFree {
void WorkerThread();
moodycamel::ConcurrentQueue<TaskItem> task_queue_;
// All submissions share one producer so different caller threads keep FIFO.
moodycamel::ProducerToken producer_;
struct QueueStorage;
std::unique_ptr<QueueStorage> queue_;
std::atomic<std::size_t> pending_tasks_{0};
std::mutex mutex_;
std::condition_variable wake_;