大重构改完
This commit is contained in:
@@ -4,13 +4,13 @@
|
||||
#include "../event/Event.h"
|
||||
|
||||
#include <renderive/renderable/base/Renderable_Base.hpp>
|
||||
#include <renderive/renderable/base/Renderable_Task_Observer.hpp>
|
||||
#include <renderive/base/statistics/Rolling_Statistics.hpp>
|
||||
|
||||
#include <atomic>
|
||||
#include <concepts>
|
||||
#include <functional>
|
||||
#include <mutex>
|
||||
#include <string>
|
||||
#include <type_traits>
|
||||
|
||||
namespace renderive {
|
||||
|
||||
@@ -29,10 +29,7 @@ public:
|
||||
enum class Renderable_Observer_Event {
|
||||
None,
|
||||
Cache_Updated,
|
||||
Published,
|
||||
Render_Started,
|
||||
Render_Completed,
|
||||
Render_Failed
|
||||
Published
|
||||
};
|
||||
|
||||
struct Renderable_Observation {
|
||||
@@ -40,31 +37,6 @@ struct Renderable_Observation {
|
||||
std::uint64_t event_time_ns{};
|
||||
std::uint64_t cache_update_count{};
|
||||
std::uint64_t publish_count{};
|
||||
std::uint64_t successful_render_count{};
|
||||
std::uint64_t failed_render_count{};
|
||||
std::uint64_t last_render_sequence{};
|
||||
std::uint64_t last_render_duration_ns{};
|
||||
std::uint64_t total_render_duration_ns{};
|
||||
std::uint64_t maximum_render_duration_ns{};
|
||||
std::size_t render_duration_sample_count{};
|
||||
std::uint64_t render_duration_average_ns{};
|
||||
std::uint64_t render_duration_deviation_ns{};
|
||||
std::uint64_t render_duration_p50_ns{};
|
||||
std::uint64_t render_duration_p95_ns{};
|
||||
std::uint64_t render_duration_p99_ns{};
|
||||
std::uint64_t task_execution_count{};
|
||||
std::uint64_t failed_task_count{};
|
||||
std::uint64_t last_task_duration_ns{};
|
||||
std::uint64_t total_task_duration_ns{};
|
||||
std::uint64_t maximum_task_duration_ns{};
|
||||
std::size_t task_duration_sample_count{};
|
||||
std::uint64_t task_duration_average_ns{};
|
||||
std::uint64_t task_duration_deviation_ns{};
|
||||
std::uint64_t task_duration_p50_ns{};
|
||||
std::uint64_t task_duration_p95_ns{};
|
||||
std::uint64_t task_duration_p99_ns{};
|
||||
std::size_t last_task_count{};
|
||||
std::size_t peak_parallelism{};
|
||||
};
|
||||
|
||||
class LIB_DECL Renderable_Observer final {
|
||||
@@ -73,25 +45,12 @@ public:
|
||||
void observe_state(Renderable_Observer_Event event, std::uint64_t time_ns,
|
||||
std::uint64_t cache_update_count,
|
||||
std::uint64_t publish_count) noexcept;
|
||||
void observe_task(const Renderable_Task_Observation& observation) noexcept;
|
||||
void reset_performance() noexcept;
|
||||
|
||||
private:
|
||||
mutable std::mutex mutex_;
|
||||
Renderable_Observation observation_;
|
||||
std::uint64_t active_render_sequence_{};
|
||||
std::uint64_t active_render_started_ns_{};
|
||||
std::size_t active_task_count_{};
|
||||
std::size_t completed_task_count_{};
|
||||
std::size_t running_task_count_{};
|
||||
std::size_t active_peak_parallelism_{};
|
||||
bool active_render_failed_{};
|
||||
Rolling_Statistics render_duration_statistics_{256};
|
||||
Rolling_Statistics task_duration_statistics_{1024};
|
||||
};
|
||||
|
||||
class LIB_DECL Renderable : public ::Renderable_Base,
|
||||
public ::Renderable_Task_Observer {
|
||||
class LIB_DECL Renderable : public ::Renderable_Base {
|
||||
public:
|
||||
explicit Renderable(Plot_Core& plot, bool cache_enabled = true);
|
||||
~Renderable() override;
|
||||
@@ -106,26 +65,32 @@ public:
|
||||
void set_visible(bool visible);
|
||||
[[nodiscard]] Renderable_Observation observation() const noexcept;
|
||||
|
||||
void render(const ::Scene_Render_Context& context) final;
|
||||
void observe_task(const Renderable_Task_Observation& observation) noexcept final;
|
||||
|
||||
protected:
|
||||
using Prepare_Task_Function =
|
||||
std::function<void(const Render_State_View&, const Scene_Render_Context&)>;
|
||||
using Paint_Task_Function =
|
||||
std::function<void(detail::Painter&, const Render_State_View&,
|
||||
const Scene_Render_Context&)>;
|
||||
std::function<void(detail::Painter&, const Scene_Render_Context&)>;
|
||||
|
||||
virtual void paint(detail::Painter& painter, const Render_State_View& state) = 0;
|
||||
virtual void build_paint_task_graph(Renderable_Task_Graph& graph);
|
||||
Renderable_Task_Graph::Task add_paint_task(Renderable_Task_Graph& graph,
|
||||
std::string name,
|
||||
Paint_Task_Function function);
|
||||
virtual void prepare_frame(const Render_State_View& state,
|
||||
const Scene_Render_Context& context) = 0;
|
||||
virtual void paint(detail::Painter& painter,
|
||||
const Scene_Render_Context& context) = 0;
|
||||
virtual void build_prepare_graph(Renderable_Graph_Builder& builder) override;
|
||||
virtual void build_paint_graph(Renderable_Graph_Builder& builder) override;
|
||||
Renderable_Graph_Builder::Task add_prepare_task(Renderable_Graph_Builder& builder,
|
||||
std::string logical_key,
|
||||
std::string name,
|
||||
Prepare_Task_Function function);
|
||||
Renderable_Graph_Builder::Task add_paint_task(Renderable_Graph_Builder& builder,
|
||||
std::string logical_key,
|
||||
std::string name,
|
||||
Paint_Task_Function function);
|
||||
void changed() noexcept;
|
||||
void task_graph_changed() noexcept;
|
||||
void paint_changed() noexcept;
|
||||
void render_graph_changed() noexcept;
|
||||
[[nodiscard]] Size viewport_size() const noexcept;
|
||||
|
||||
private:
|
||||
void build_task_graph(Renderable_Task_Graph& graph) final;
|
||||
void reset_task_observation() noexcept final;
|
||||
void observe_state(Renderable_Observer_Event event, std::uint64_t time_ns,
|
||||
std::uint64_t cache_update_count,
|
||||
std::uint64_t publish_count) noexcept;
|
||||
@@ -156,8 +121,6 @@ public:
|
||||
observation.cache_update_count,
|
||||
observation.publish_count
|
||||
);
|
||||
if (cache_updated)
|
||||
renderable_->changed();
|
||||
}
|
||||
|
||||
private:
|
||||
@@ -166,4 +129,14 @@ private:
|
||||
|
||||
} // namespace detail
|
||||
|
||||
namespace detail {
|
||||
|
||||
template <class Value>
|
||||
inline constexpr bool Paint_Only_Property_Value =
|
||||
std::same_as<std::remove_cvref_t<Value>, Color> ||
|
||||
std::same_as<std::remove_cvref_t<Value>, Pen> ||
|
||||
std::same_as<std::remove_cvref_t<Value>, Brush>;
|
||||
|
||||
} // namespace detail
|
||||
|
||||
} // namespace renderive
|
||||
|
||||
Reference in New Issue
Block a user