- Deleted clipboard-related files (clipboard.cc, clipboard.h, clipboard.mm) to streamline the codebase. - Added a performance dashboard in the EditorManager to monitor performance metrics and improve user experience. - Integrated performance monitoring capabilities across various editors, allowing for detailed timing of critical operations. - Updated the graphics system with batch processing for texture updates, significantly improving rendering performance. - Introduced a memory pool allocator for efficient memory management during graphics operations.
163 lines
4.6 KiB
C++
163 lines
4.6 KiB
C++
#ifndef YAZE_APP_GFX_PERFORMANCE_DASHBOARD_H
|
|
#define YAZE_APP_GFX_PERFORMANCE_DASHBOARD_H
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
#include <memory>
|
|
#include <chrono>
|
|
|
|
#include "app/gfx/performance_profiler.h"
|
|
#include "app/gfx/memory_pool.h"
|
|
#include "app/gfx/atlas_renderer.h"
|
|
|
|
namespace yaze {
|
|
namespace gfx {
|
|
|
|
/**
|
|
* @brief Performance summary for external consumption
|
|
*/
|
|
struct PerformanceSummary {
|
|
double average_frame_time_ms;
|
|
double memory_usage_mb;
|
|
double cache_hit_ratio;
|
|
int optimization_score; // 0-100
|
|
std::string status_message;
|
|
std::vector<std::string> recommendations;
|
|
|
|
PerformanceSummary() : average_frame_time_ms(0.0), memory_usage_mb(0.0),
|
|
cache_hit_ratio(0.0), optimization_score(0) {}
|
|
};
|
|
|
|
/**
|
|
* @brief Comprehensive performance monitoring dashboard for YAZE graphics system
|
|
*
|
|
* The PerformanceDashboard provides real-time monitoring and analysis of graphics
|
|
* performance in the YAZE ROM hacking editor. It displays key metrics, optimization
|
|
* status, and provides recommendations for performance improvements.
|
|
*
|
|
* Key Features:
|
|
* - Real-time performance metrics display
|
|
* - Optimization status monitoring
|
|
* - Memory usage tracking
|
|
* - Frame rate analysis
|
|
* - Performance regression detection
|
|
* - Optimization recommendations
|
|
*
|
|
* Performance Metrics:
|
|
* - Operation timing statistics
|
|
* - Memory allocation patterns
|
|
* - Cache hit/miss ratios
|
|
* - Texture update efficiency
|
|
* - Batch operation effectiveness
|
|
*
|
|
* ROM Hacking Specific:
|
|
* - Graphics editing performance analysis
|
|
* - Palette operation efficiency
|
|
* - Tile rendering performance
|
|
* - Graphics sheet loading times
|
|
*/
|
|
class PerformanceDashboard {
|
|
public:
|
|
static PerformanceDashboard& Get();
|
|
|
|
/**
|
|
* @brief Initialize the performance dashboard
|
|
*/
|
|
void Initialize();
|
|
|
|
/**
|
|
* @brief Update dashboard with current performance data
|
|
*/
|
|
void Update();
|
|
|
|
/**
|
|
* @brief Render the performance dashboard UI
|
|
*/
|
|
void Render();
|
|
|
|
/**
|
|
* @brief Show/hide the dashboard
|
|
*/
|
|
void SetVisible(bool visible) { visible_ = visible; }
|
|
bool IsVisible() const { return visible_; }
|
|
|
|
/**
|
|
* @brief Get current performance summary
|
|
*/
|
|
PerformanceSummary GetSummary() const;
|
|
|
|
/**
|
|
* @brief Export performance report
|
|
*/
|
|
std::string ExportReport() const;
|
|
|
|
private:
|
|
PerformanceDashboard() = default;
|
|
~PerformanceDashboard() = default;
|
|
|
|
struct PerformanceMetrics {
|
|
double frame_time_ms;
|
|
double palette_lookup_time_us;
|
|
double texture_update_time_us;
|
|
double batch_operation_time_us;
|
|
double memory_usage_mb;
|
|
double cache_hit_ratio;
|
|
int draw_calls_per_frame;
|
|
int texture_updates_per_frame;
|
|
|
|
PerformanceMetrics() : frame_time_ms(0.0), palette_lookup_time_us(0.0),
|
|
texture_update_time_us(0.0), batch_operation_time_us(0.0),
|
|
memory_usage_mb(0.0), cache_hit_ratio(0.0),
|
|
draw_calls_per_frame(0), texture_updates_per_frame(0) {}
|
|
};
|
|
|
|
struct OptimizationStatus {
|
|
bool palette_lookup_optimized;
|
|
bool dirty_region_tracking_enabled;
|
|
bool resource_pooling_active;
|
|
bool batch_operations_enabled;
|
|
bool atlas_rendering_enabled;
|
|
bool memory_pool_active;
|
|
|
|
OptimizationStatus() : palette_lookup_optimized(false), dirty_region_tracking_enabled(false),
|
|
resource_pooling_active(false), batch_operations_enabled(false),
|
|
atlas_rendering_enabled(false), memory_pool_active(false) {}
|
|
};
|
|
|
|
bool visible_;
|
|
PerformanceMetrics current_metrics_;
|
|
PerformanceMetrics previous_metrics_;
|
|
OptimizationStatus optimization_status_;
|
|
|
|
std::chrono::high_resolution_clock::time_point last_update_time_;
|
|
std::vector<double> frame_time_history_;
|
|
std::vector<double> memory_usage_history_;
|
|
|
|
static constexpr size_t kHistorySize = 100;
|
|
static constexpr double kUpdateIntervalMs = 100.0; // Update every 100ms
|
|
|
|
// UI rendering methods
|
|
void RenderMetricsPanel();
|
|
void RenderOptimizationStatus();
|
|
void RenderMemoryUsage();
|
|
void RenderFrameRateGraph();
|
|
void RenderRecommendations();
|
|
|
|
// Data collection methods
|
|
void CollectMetrics();
|
|
void UpdateOptimizationStatus();
|
|
void AnalyzePerformance();
|
|
|
|
// Helper methods
|
|
double CalculateAverage(const std::vector<double>& values) const;
|
|
double CalculatePercentile(const std::vector<double>& values, double percentile) const;
|
|
std::string FormatTime(double time_us) const;
|
|
std::string FormatMemory(size_t bytes) const;
|
|
std::string GetOptimizationRecommendation() const;
|
|
};
|
|
|
|
} // namespace gfx
|
|
} // namespace yaze
|
|
|
|
#endif // YAZE_APP_GFX_PERFORMANCE_DASHBOARD_H
|