展示优化
This commit is contained in:
@@ -183,9 +183,11 @@ static void request_performance_update(const std::shared_ptr<Performance_Worker_
|
||||
callback();
|
||||
}
|
||||
}
|
||||
void schedule_performance_metrics_worker(const std::shared_ptr<Performance_Worker_State>& state) {
|
||||
void schedule_performance_metrics_worker(const std::shared_ptr<Performance_Worker_State>& state, bool request_repaint) {
|
||||
if (!state || state->cancelled.load(std::memory_order_acquire))
|
||||
return;
|
||||
if (request_repaint)
|
||||
state->repaint_requested.store(true, std::memory_order_release);
|
||||
state->work_requested.store(true, std::memory_order_release);
|
||||
if (state->worker_active.exchange(true, std::memory_order_acq_rel))
|
||||
return;
|
||||
@@ -332,13 +334,14 @@ void Performance_Overlay::set_enabled(bool enabled) {
|
||||
d()->enabled_value.store(enabled, std::memory_order_release);
|
||||
worker->enabled.store(enabled, std::memory_order_release);
|
||||
if (!enabled) {
|
||||
worker->repaint_requested.store(false, std::memory_order_release);
|
||||
worker->published_snapshot.store({}, std::memory_order_release);
|
||||
request_performance_update(worker);
|
||||
return;
|
||||
}
|
||||
worker->reset_requested.store(true, std::memory_order_release);
|
||||
worker->snapshot_rebuild_requested.store(true, std::memory_order_release);
|
||||
schedule_performance_metrics_worker(worker);
|
||||
schedule_performance_metrics_worker(worker, true);
|
||||
}
|
||||
bool Performance_Overlay::enabled() const {
|
||||
return const_cast<Performance_Overlay*>(this)->d()->enabled_value.load(std::memory_order_acquire);
|
||||
@@ -356,7 +359,7 @@ void Performance_Overlay::set_options(Performance_Overlay_Options options) {
|
||||
}
|
||||
worker->snapshot_rebuild_requested.store(true, std::memory_order_release);
|
||||
if (enabled())
|
||||
schedule_performance_metrics_worker(worker);
|
||||
schedule_performance_metrics_worker(worker, true);
|
||||
}
|
||||
Performance_Overlay_Options Performance_Overlay::options() const {
|
||||
auto worker = const_cast<Performance_Overlay*>(this)->d()->metrics_worker;
|
||||
@@ -417,7 +420,7 @@ void Performance_Overlay::set_viewport(Size viewport, std::uint64_t version) {
|
||||
d()->metrics_worker->viewport_height.store(viewport.height, std::memory_order_release);
|
||||
d()->metrics_worker->viewport_version.store(version, std::memory_order_release);
|
||||
d()->metrics_worker->snapshot_rebuild_requested.store(true, std::memory_order_release);
|
||||
schedule_performance_metrics_worker(d()->metrics_worker);
|
||||
schedule_performance_metrics_worker(d()->metrics_worker, true);
|
||||
}
|
||||
bool Performance_Overlay::handle_wheel(PointF position, double angle_delta_y, double pixel_delta_y) {
|
||||
auto snapshot = display_snapshot();
|
||||
@@ -431,7 +434,7 @@ bool Performance_Overlay::handle_wheel(PointF position, double angle_delta_y, do
|
||||
delta = -(angle_delta_y / 120.0) * 3.0 * std::max(1.0, line_height);
|
||||
if (delta != 0.0) {
|
||||
performance_atomic_add(d()->metrics_worker->pending_wheel_delta_px, delta);
|
||||
schedule_performance_metrics_worker(d()->metrics_worker);
|
||||
schedule_performance_metrics_worker(d()->metrics_worker, true);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -451,13 +454,13 @@ bool Performance_Overlay::handle_pointer_press(PointF position) {
|
||||
d()->metrics_worker->drag_position_y.store(position.y, std::memory_order_release);
|
||||
d()->metrics_worker->drag_end_requested.store(false, std::memory_order_release);
|
||||
d()->metrics_worker->drag_active.store(true, std::memory_order_release);
|
||||
schedule_performance_metrics_worker(d()->metrics_worker);
|
||||
schedule_performance_metrics_worker(d()->metrics_worker, true);
|
||||
return true;
|
||||
}
|
||||
if (snapshot->scroll_track_rect.contains(position)) {
|
||||
int page = position.y < snapshot->scroll_thumb_rect.y ? -1 : 1;
|
||||
d()->metrics_worker->pending_page_delta.fetch_add(page, std::memory_order_acq_rel);
|
||||
schedule_performance_metrics_worker(d()->metrics_worker);
|
||||
schedule_performance_metrics_worker(d()->metrics_worker, true);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -465,7 +468,7 @@ bool Performance_Overlay::handle_pointer_press(PointF position) {
|
||||
bool Performance_Overlay::handle_pointer_move(PointF position) {
|
||||
if (d()->metrics_worker->drag_active.load(std::memory_order_acquire)) {
|
||||
d()->metrics_worker->drag_position_y.store(position.y, std::memory_order_release);
|
||||
schedule_performance_metrics_worker(d()->metrics_worker);
|
||||
schedule_performance_metrics_worker(d()->metrics_worker, true);
|
||||
return true;
|
||||
}
|
||||
auto snapshot = display_snapshot();
|
||||
@@ -493,7 +496,7 @@ bool Performance_Overlay::handle_pointer_release(PointF position) {
|
||||
return false;
|
||||
d()->metrics_worker->drag_position_y.store(position.y, std::memory_order_release);
|
||||
d()->metrics_worker->drag_end_requested.store(true, std::memory_order_release);
|
||||
schedule_performance_metrics_worker(d()->metrics_worker);
|
||||
schedule_performance_metrics_worker(d()->metrics_worker, true);
|
||||
return true;
|
||||
}
|
||||
bool Performance_Overlay::handle_pointer_leave() {
|
||||
|
||||
Reference in New Issue
Block a user