00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef PSTATSTRIPCHART_H
00016 #define PSTATSTRIPCHART_H
00017
00018 #include "pandatoolbase.h"
00019
00020 #include "pStatGraph.h"
00021 #include "pStatMonitor.h"
00022 #include "pStatClientData.h"
00023
00024 #include "luse.h"
00025 #include "vector_int.h"
00026
00027 #include "pmap.h"
00028
00029 class PStatView;
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 class PStatStripChart : public PStatGraph {
00043 public:
00044 PStatStripChart(PStatMonitor *monitor, PStatView &view,
00045 int thread_index, int collector_index, int xsize, int ysize);
00046 virtual ~PStatStripChart();
00047
00048 void new_data(int frame_number);
00049 void update();
00050 bool first_data() const;
00051
00052 INLINE PStatView &get_view() const;
00053 INLINE int get_collector_index() const;
00054 void set_collector_index(int collector_index);
00055
00056 INLINE void set_horizontal_scale(double time_width);
00057 INLINE double get_horizontal_scale() const;
00058 INLINE void set_vertical_scale(double value_height);
00059 void set_default_vertical_scale();
00060 void set_auto_vertical_scale();
00061 INLINE double get_vertical_scale() const;
00062
00063 INLINE void set_scroll_mode(bool scroll_mode);
00064 INLINE bool get_scroll_mode() const;
00065
00066 INLINE void set_average_mode(bool average_mode);
00067 INLINE bool get_average_mode() const;
00068
00069 int get_collector_under_pixel(int xpoint, int ypoint);
00070 INLINE int timestamp_to_pixel(double time) const;
00071 INLINE double pixel_to_timestamp(int x) const;
00072 INLINE int height_to_pixel(double value) const;
00073 INLINE double pixel_to_height(int y) const;
00074
00075 string get_title_text();
00076 bool is_title_unknown() const;
00077
00078 protected:
00079 class ColorData {
00080 public:
00081 unsigned short _collector_index;
00082 unsigned short _i;
00083 double _net_value;
00084 };
00085 typedef pvector<ColorData> FrameData;
00086 typedef pmap<int, FrameData> Data;
00087
00088 static void accumulate_frame_data(FrameData &fdata,
00089 const FrameData &additional, double weight);
00090 static void scale_frame_data(FrameData &fdata, double factor);
00091
00092 const FrameData &get_frame_data(int frame_number);
00093 void compute_average_pixel_data(PStatStripChart::FrameData &result,
00094 int &then_i, int &now_i, double now);
00095 double get_net_value(int frame_number) const;
00096 double get_average_net_value() const;
00097
00098 void changed_size(int xsize, int ysize);
00099 void force_redraw();
00100 void force_reset();
00101 virtual void update_labels();
00102 virtual void normal_guide_bars();
00103
00104 virtual void clear_region();
00105 virtual void copy_region(int start_x, int end_x, int dest_x);
00106 virtual void begin_draw(int from_x, int to_x);
00107 virtual void draw_slice(int x, int w, const FrameData &fdata);
00108 virtual void draw_empty(int x, int w);
00109 virtual void draw_cursor(int x);
00110 virtual void end_draw(int from_x, int to_x);
00111 virtual void idle();
00112
00113 INLINE bool is_label_used(int collector_index) const;
00114
00115 private:
00116 void draw_frames(int first_frame, int last_frame);
00117 void draw_pixels(int first_pixel, int last_pixel);
00118
00119 void clear_label_usage();
00120 void dec_label_usage(const FrameData &fdata);
00121 void inc_label_usage(const FrameData &fdata);
00122
00123 protected:
00124 int _thread_index;
00125
00126 private:
00127 PStatView &_view;
00128 int _collector_index;
00129 bool _scroll_mode;
00130 bool _average_mode;
00131
00132 Data _data;
00133
00134 int _next_frame;
00135 bool _first_data;
00136 int _cursor_pixel;
00137
00138 int _level_index;
00139
00140 double _time_width;
00141 double _start_time;
00142 double _value_height;
00143 bool _title_unknown;
00144
00145 typedef vector_int LabelUsage;
00146 LabelUsage _label_usage;
00147 };
00148
00149 #include "pStatStripChart.I"
00150
00151 #endif