名称优化
This commit is contained in:
@@ -47,12 +47,12 @@ Plot_Frame_Pipeline::~Plot_Frame_Pipeline() {
|
||||
cancel_all_update_states();
|
||||
}
|
||||
|
||||
void Plot_Frame_Pipeline::mark_edit_state() {
|
||||
edit_state_version.fetch_add(1, std::memory_order_release);
|
||||
void Plot_Frame_Pipeline::advance_edit_version() {
|
||||
edit_version.fetch_add(1, std::memory_order_release);
|
||||
}
|
||||
|
||||
bool Plot_Frame_Pipeline::has_new_state() const {
|
||||
return buffer_version_newer(edit_state_version.load(std::memory_order_acquire), render_state_version);
|
||||
bool Plot_Frame_Pipeline::has_unrendered_edit() const {
|
||||
return buffer_version_newer(edit_version.load(std::memory_order_acquire), rendered_edit_version);
|
||||
}
|
||||
|
||||
Plot_Frame* Plot_Frame_Pipeline::frame_by_index(std::uint8_t index) {
|
||||
@@ -71,16 +71,16 @@ const Plot_Frame* Plot_Frame_Pipeline::frame_by_role(std::uint8_t role) const {
|
||||
return frame_by_index(frame_control.read_view()[role]);
|
||||
}
|
||||
|
||||
Plot_Frame_Lease Plot_Frame_Pipeline::try_begin_render() {
|
||||
Plot_Frame_Lease Plot_Frame_Pipeline::try_acquire_render_frame() {
|
||||
auto record = frame_control.try_acquire_role(Frame_Rendering);
|
||||
if (record.result != Triple_Buffer_Result::Success) {
|
||||
++attempts.render_role_busy_count;
|
||||
++attempt_counters.render_role_busy_count;
|
||||
return {};
|
||||
}
|
||||
return {frame_by_index(record.lease.index), &frame_control, record.lease};
|
||||
}
|
||||
|
||||
Plot_Frame_Pipeline::Frame_Publish_Result Plot_Frame_Pipeline::try_publish_rendered(std::uint64_t now_ns) {
|
||||
Plot_Frame_Pipeline::Frame_Publish_Result Plot_Frame_Pipeline::try_publish_rendered_frame(std::uint64_t now_ns) {
|
||||
Frame_Publish_Result result;
|
||||
Plot_Frame* rendered = frame_by_role(Frame_Rendering);
|
||||
|
||||
@@ -100,7 +100,7 @@ Plot_Frame_Pipeline::Frame_Publish_Result Plot_Frame_Pipeline::try_publish_rende
|
||||
if (supersede_middle && old_middle->metadata && old_middle->metadata->frame_id) {
|
||||
old_middle->metadata->superseded_time_ns = now_ns;
|
||||
old_middle->metadata->outcome = Frame_Outcome::Superseded;
|
||||
result.superseded_middle = old_middle->metadata;
|
||||
result.superseded_frame_record = old_middle->metadata;
|
||||
supersede_update_states(old_middle->presented_update_states);
|
||||
}
|
||||
|
||||
@@ -110,34 +110,34 @@ Plot_Frame_Pipeline::Frame_Publish_Result Plot_Frame_Pipeline::try_publish_rende
|
||||
});
|
||||
if (swap.result != Triple_Buffer_Result::Success) {
|
||||
rendered->metadata->outcome = Frame_Outcome::Publish_Dropped;
|
||||
result.dropped_frame = rendered->metadata;
|
||||
result.dropped_frame_record = rendered->metadata;
|
||||
supersede_update_states(rendered->presented_update_states);
|
||||
++attempts.publish_dropped_count;
|
||||
++attempt_counters.publish_dropped_count;
|
||||
return result;
|
||||
}
|
||||
|
||||
Frame_Publish_Result update_result = request_paint_update(now_ns);
|
||||
update_result.superseded_middle = result.superseded_middle;
|
||||
update_result.dropped_frame = result.dropped_frame;
|
||||
Frame_Publish_Result update_result = request_present(now_ns);
|
||||
update_result.superseded_frame_record = result.superseded_frame_record;
|
||||
update_result.dropped_frame_record = result.dropped_frame_record;
|
||||
return update_result;
|
||||
}
|
||||
|
||||
Plot_Frame_Pipeline::Frame_Publish_Result Plot_Frame_Pipeline::request_paint_update(std::uint64_t now_ns) {
|
||||
Plot_Frame_Pipeline::Frame_Publish_Result Plot_Frame_Pipeline::request_present(std::uint64_t now_ns) {
|
||||
Frame_Publish_Result result;
|
||||
if (!middle_has_new_frame())
|
||||
if (!middle_frame_ready())
|
||||
return result;
|
||||
Plot_Frame* middle = frame_by_role(Frame_Middle);
|
||||
if (paint_request_pending.load(std::memory_order_acquire)) {
|
||||
middle->metadata->update_request_id = pending_update_request_id.load(std::memory_order_acquire);
|
||||
middle->metadata->update_request_time_ns = pending_update_request_time.load(std::memory_order_acquire);
|
||||
middle->metadata->update_request_id = pending_present_request_id.load(std::memory_order_acquire);
|
||||
middle->metadata->update_request_time_ns = pending_present_request_time_ns.load(std::memory_order_acquire);
|
||||
return result;
|
||||
}
|
||||
result.update_request_id = ++next_update_request_id;
|
||||
result.update_request_id = ++next_present_request_id;
|
||||
result.update_request_time = now_ns;
|
||||
middle->metadata->update_request_id = result.update_request_id;
|
||||
middle->metadata->update_request_time_ns = result.update_request_time;
|
||||
pending_update_request_id.store(result.update_request_id, std::memory_order_release);
|
||||
pending_update_request_time.store(result.update_request_time, std::memory_order_release);
|
||||
pending_present_request_id.store(result.update_request_id, std::memory_order_release);
|
||||
pending_present_request_time_ns.store(result.update_request_time, std::memory_order_release);
|
||||
paint_request_pending.store(true, std::memory_order_release);
|
||||
Size size = middle->image.size();
|
||||
result.dirty_rect = Rect{0, 0, size.width, size.height};
|
||||
@@ -145,11 +145,11 @@ Plot_Frame_Pipeline::Frame_Publish_Result Plot_Frame_Pipeline::request_paint_upd
|
||||
return result;
|
||||
}
|
||||
|
||||
Plot_Frame_Pipeline::Frame_Consume_Result Plot_Frame_Pipeline::try_begin_paint(std::uint64_t now_ns) {
|
||||
Plot_Frame_Pipeline::Frame_Consume_Result Plot_Frame_Pipeline::try_acquire_paint_frame(std::uint64_t now_ns) {
|
||||
Frame_Consume_Result result;
|
||||
bool pending = paint_request_pending.load(std::memory_order_acquire);
|
||||
|
||||
if (middle_has_new_frame()) {
|
||||
if (middle_frame_ready()) {
|
||||
auto swap = frame_control.try_swap_role(Frame_Middle, Frame_Painting, [this](const Triple_Buffer_View& view) {
|
||||
const Plot_Frame* middle = frame_by_index(view[Frame_Middle]);
|
||||
const Plot_Frame* painting = frame_by_index(view[Frame_Painting]);
|
||||
@@ -157,40 +157,40 @@ Plot_Frame_Pipeline::Frame_Consume_Result Plot_Frame_Pipeline::try_begin_paint(s
|
||||
}, [this, &result, now_ns](const Triple_Buffer_View& old_view, const Triple_Buffer_View&) {
|
||||
Plot_Frame* old_painting = frame_by_index(old_view[Frame_Painting]);
|
||||
Plot_Frame* new_painting = frame_by_index(old_view[Frame_Middle]);
|
||||
result.new_frame = true;
|
||||
result.has_new_frame = true;
|
||||
if (old_painting->metadata && old_painting->metadata->frame_id && old_painting->metadata->paint_end_ns) {
|
||||
old_painting->metadata->transition_32_ns = now_ns;
|
||||
old_painting->metadata->wait_32_ns = now_ns > old_painting->metadata->paint_end_ns ? now_ns - old_painting->metadata->paint_end_ns : 0;
|
||||
result.returned_frame = old_painting->metadata;
|
||||
result.returned_frame_record = old_painting->metadata;
|
||||
}
|
||||
new_painting->metadata->transition_23_ns = now_ns;
|
||||
new_painting->metadata->wait_23_ns = now_ns > new_painting->metadata->transition_12_ns ? now_ns - new_painting->metadata->transition_12_ns : 0;
|
||||
});
|
||||
if (swap.result != Triple_Buffer_Result::Success) {
|
||||
result.paint_acquire_dropped = true;
|
||||
++attempts.paint_role_busy_count;
|
||||
result.paint_frame_unavailable = true;
|
||||
++attempt_counters.paint_role_busy_count;
|
||||
}
|
||||
}
|
||||
|
||||
auto record = frame_control.try_acquire_role(Frame_Painting);
|
||||
if (record.result == Triple_Buffer_Result::Success) {
|
||||
result.lease = {frame_by_index(record.lease.index), &frame_control, record.lease};
|
||||
result.update_was_pending = pending && paint_request_pending.exchange(false, std::memory_order_acq_rel);
|
||||
result.present_request_was_pending = pending && paint_request_pending.exchange(false, std::memory_order_acq_rel);
|
||||
}
|
||||
else {
|
||||
result.paint_acquire_dropped = true;
|
||||
++attempts.paint_role_busy_count;
|
||||
result.paint_frame_unavailable = true;
|
||||
++attempt_counters.paint_role_busy_count;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
bool Plot_Frame_Pipeline::middle_has_new_frame() const {
|
||||
bool Plot_Frame_Pipeline::middle_frame_ready() const {
|
||||
const Plot_Frame* middle = frame_by_role(Frame_Middle);
|
||||
const Plot_Frame* painting = frame_by_role(Frame_Painting);
|
||||
return buffer_version_newer(middle->version.load(std::memory_order_acquire), painting->version.load(std::memory_order_acquire));
|
||||
}
|
||||
|
||||
bool Plot_Frame_Pipeline::paint_active() const {
|
||||
bool Plot_Frame_Pipeline::painting_frame_in_use() const {
|
||||
return frame_control.role_busy(Frame_Painting);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user