修复展示数据
This commit is contained in:
@@ -31,7 +31,12 @@ public:
|
||||
void update(Value value, std::size_t retain_latest_count);
|
||||
void clear();
|
||||
std::size_t retain_latest(std::size_t count);
|
||||
struct Snapshot {
|
||||
Container values;
|
||||
Real_Time_Data_Update_State update_state;
|
||||
};
|
||||
Container snapshot() const;
|
||||
Snapshot snapshot_with_update_state() const;
|
||||
std::size_t size() const;
|
||||
std::uint64_t revision() const;
|
||||
Real_Time_Data_Retention retention() const noexcept override;
|
||||
@@ -49,6 +54,7 @@ private:
|
||||
void reserve_update_times(std::size_t capacity);
|
||||
void publish_render_state() override;
|
||||
const Container& render_state_value() const noexcept;
|
||||
const Real_Time_Data_Update_State& render_update_state_value() const noexcept;
|
||||
mutable Mutex mutex_;
|
||||
std::recursive_mutex mutation_mutex_;
|
||||
Observer observer_;
|
||||
@@ -61,7 +67,7 @@ private:
|
||||
std::size_t update_times_size_{};
|
||||
std::size_t update_times_capacity_{};
|
||||
std::uint64_t revision_{};
|
||||
std::uint64_t render_revision_{};
|
||||
Real_Time_Data_Update_State render_update_state_{};
|
||||
std::uint64_t total_update_count_{};
|
||||
std::uint64_t last_update_time_ns_{};
|
||||
};
|
||||
|
||||
@@ -101,6 +101,15 @@ auto History_Real_Time_Data<Value_Type, Container, Mutex, Observer>::snapshot()
|
||||
return *cache_state_;
|
||||
}
|
||||
template <class Value_Type, class Container, Mutex_Type Mutex, class Observer>
|
||||
auto History_Real_Time_Data<Value_Type, Container, Mutex, Observer>::snapshot_with_update_state() const -> Snapshot {
|
||||
std::lock_guard < Mutex > lock(mutex_);
|
||||
const Real_Time_Data_Update_State update_state{
|
||||
this, Real_Time_Data_Retention::history, revision_, last_update_time_ns_,
|
||||
total_update_count_, cache_state_->size()
|
||||
};
|
||||
return {*cache_state_, update_state};
|
||||
}
|
||||
template <class Value_Type, class Container, Mutex_Type Mutex, class Observer>
|
||||
std::size_t History_Real_Time_Data<Value_Type, Container, Mutex, Observer>::size() const {
|
||||
std::lock_guard < Mutex > lock(mutex_);
|
||||
return cache_state_->size();
|
||||
@@ -144,12 +153,20 @@ std::size_t History_Real_Time_Data<Value_Type, Container, Mutex, Observer>::disc
|
||||
template <class Value_Type, class Container, Mutex_Type Mutex, class Observer>
|
||||
void History_Real_Time_Data<Value_Type, Container, Mutex, Observer>::publish_render_state() {
|
||||
std::lock_guard < Mutex > lock(mutex_);
|
||||
if (render_revision_ == revision_) return;
|
||||
if (render_update_state_.revision == revision_) return;
|
||||
*scratch_state_ = *cache_state_;
|
||||
std::swap(render_state_, scratch_state_);
|
||||
render_revision_ = revision_;
|
||||
render_update_state_ = {
|
||||
this, Real_Time_Data_Retention::history, revision_, last_update_time_ns_,
|
||||
total_update_count_, render_state_->size()
|
||||
};
|
||||
}
|
||||
template <class Value_Type, class Container, Mutex_Type Mutex, class Observer>
|
||||
auto History_Real_Time_Data<Value_Type, Container, Mutex, Observer>::render_state_value() const noexcept -> const Container& {
|
||||
return *render_state_;
|
||||
}
|
||||
template <class Value_Type, class Container, Mutex_Type Mutex, class Observer>
|
||||
auto History_Real_Time_Data<Value_Type, Container, Mutex, Observer>::render_update_state_value() const noexcept
|
||||
-> const Real_Time_Data_Update_State& {
|
||||
return render_update_state_;
|
||||
}
|
||||
|
||||
@@ -7,6 +7,10 @@ public:
|
||||
[[nodiscard]] const auto& get(const Source& source) const noexcept {
|
||||
return source.render_state_value();
|
||||
}
|
||||
template <class Source>
|
||||
[[nodiscard]] const auto& update_state(const Source& source) const noexcept {
|
||||
return source.render_update_state_value();
|
||||
}
|
||||
private:
|
||||
friend class Renderable_Base;
|
||||
friend class Frame_Render_Snapshot;
|
||||
|
||||
Reference in New Issue
Block a user