mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-02 18:03:56 -04:00
remove unused labels from graph
This commit is contained in:
parent
0740440edc
commit
3e430c58e1
@ -288,12 +288,11 @@ void PStatPianoRoll::
|
|||||||
compute_page(const PStatFrameData &frame_data) {
|
compute_page(const PStatFrameData &frame_data) {
|
||||||
_start_time = frame_data.get_start();
|
_start_time = frame_data.get_start();
|
||||||
|
|
||||||
PageData::iterator pi;
|
// Clear out the page data and copy it to previous, so we can fill
|
||||||
for (pi = _page_data.begin(); pi != _page_data.end(); ++pi) {
|
// it up again and then check to see if we changed the set of bars
|
||||||
(*pi).second.clear();
|
// this frame.
|
||||||
}
|
PageData previous;
|
||||||
|
_page_data.swap(previous);
|
||||||
size_t num_bars = _page_data.size();
|
|
||||||
|
|
||||||
int num_events = frame_data.get_num_events();
|
int num_events = frame_data.get_num_events();
|
||||||
for (int i = 0; i < num_events; i++) {
|
for (int i = 0; i < num_events; i++) {
|
||||||
@ -302,12 +301,27 @@ compute_page(const PStatFrameData &frame_data) {
|
|||||||
_page_data[collector_index].add_data_point(time);
|
_page_data[collector_index].add_data_point(time);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_page_data.size() != num_bars) {
|
// Now check to see if the set of bars has changed.
|
||||||
// If we added some new bars this time, we'll have to update our
|
bool changed_bars = (_page_data.size() != previous.size());
|
||||||
// list.
|
|
||||||
|
if (!changed_bars) {
|
||||||
|
PageData::const_iterator ai, bi;
|
||||||
|
ai = _page_data.begin();
|
||||||
|
bi = previous.begin();
|
||||||
|
while (ai != _page_data.end() && !changed_bars) {
|
||||||
|
changed_bars = ((*ai).first == (*bi).first);
|
||||||
|
++ai;
|
||||||
|
++bi;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (changed_bars) {
|
||||||
|
// If we added or removed some new bars this time, we'll have to
|
||||||
|
// update our list.
|
||||||
const PStatClientData *client_data = _monitor->get_client_data();
|
const PStatClientData *client_data = _monitor->get_client_data();
|
||||||
|
|
||||||
_labels.clear();
|
_labels.clear();
|
||||||
|
PageData::const_iterator pi;
|
||||||
for (pi = _page_data.begin(); pi != _page_data.end(); ++pi) {
|
for (pi = _page_data.begin(); pi != _page_data.end(); ++pi) {
|
||||||
int collector_index = (*pi).first;
|
int collector_index = (*pi).first;
|
||||||
if (client_data->has_collector(collector_index)) {
|
if (client_data->has_collector(collector_index)) {
|
||||||
@ -323,6 +337,7 @@ compute_page(const PStatFrameData &frame_data) {
|
|||||||
|
|
||||||
// Finally, make sure all of the bars are closed.
|
// Finally, make sure all of the bars are closed.
|
||||||
float time = frame_data.get_end();
|
float time = frame_data.get_end();
|
||||||
|
PageData::iterator pi;
|
||||||
for (pi = _page_data.begin(); pi != _page_data.end(); ++pi) {
|
for (pi = _page_data.begin(); pi != _page_data.end(); ++pi) {
|
||||||
(*pi).second.finish(time);
|
(*pi).second.finish(time);
|
||||||
}
|
}
|
||||||
|
@ -197,3 +197,18 @@ INLINE float PStatStripChart::
|
|||||||
pixel_to_height(int x) const {
|
pixel_to_height(int x) const {
|
||||||
return _value_height * (float)(get_ysize() - x) / (float)get_ysize();
|
return _value_height * (float)(get_ysize() - x) / (float)get_ysize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: PStatStripChart::is_label_used
|
||||||
|
// Access: Protected
|
||||||
|
// Description: Returns true if the indicated collector appears
|
||||||
|
// anywhere on the chart at the current time, false
|
||||||
|
// otherwise.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
INLINE bool PStatStripChart::
|
||||||
|
is_label_used(int collector_index) const {
|
||||||
|
if (collector_index < (int)_label_usage.size()) {
|
||||||
|
return _label_usage[collector_index] > 0;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
@ -117,6 +117,7 @@ update() {
|
|||||||
di = _data.begin();
|
di = _data.begin();
|
||||||
while (di != _data.end() &&
|
while (di != _data.end() &&
|
||||||
thread_data->get_frame((*di).first).get_start() < oldest_time) {
|
thread_data->get_frame((*di).first).get_start() < oldest_time) {
|
||||||
|
dec_label_usage((*di).second);
|
||||||
_data.erase(di);
|
_data.erase(di);
|
||||||
di = _data.begin();
|
di = _data.begin();
|
||||||
}
|
}
|
||||||
@ -153,6 +154,7 @@ set_collector_index(int collector_index) {
|
|||||||
_collector_index = collector_index;
|
_collector_index = collector_index;
|
||||||
_title_unknown = true;
|
_title_unknown = true;
|
||||||
_data.clear();
|
_data.clear();
|
||||||
|
clear_label_usage();
|
||||||
force_redraw();
|
force_redraw();
|
||||||
update_labels();
|
update_labels();
|
||||||
}
|
}
|
||||||
@ -449,7 +451,7 @@ get_frame_data(int frame_number) {
|
|||||||
const PStatThreadData *thread_data = _view.get_thread_data();
|
const PStatThreadData *thread_data = _view.get_thread_data();
|
||||||
_view.set_to_frame(thread_data->get_frame(frame_number));
|
_view.set_to_frame(thread_data->get_frame(frame_number));
|
||||||
|
|
||||||
FrameData &data = _data[frame_number];
|
FrameData &fdata = _data[frame_number];
|
||||||
|
|
||||||
const PStatViewLevel *level = _view.get_level(_collector_index);
|
const PStatViewLevel *level = _view.get_level(_collector_index);
|
||||||
int num_children = level->get_num_children();
|
int num_children = level->get_num_children();
|
||||||
@ -460,7 +462,7 @@ get_frame_data(int frame_number) {
|
|||||||
cd._i = (unsigned short)i;
|
cd._i = (unsigned short)i;
|
||||||
cd._net_value = child->get_net_value();
|
cd._net_value = child->get_net_value();
|
||||||
if (cd._net_value != 0.0) {
|
if (cd._net_value != 0.0) {
|
||||||
data.push_back(cd);
|
fdata.push_back(cd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -471,10 +473,12 @@ get_frame_data(int frame_number) {
|
|||||||
cd._i = (unsigned short)num_children;
|
cd._i = (unsigned short)num_children;
|
||||||
cd._net_value = level->get_value_alone();
|
cd._net_value = level->get_value_alone();
|
||||||
if (cd._net_value != 0.0) {
|
if (cd._net_value != 0.0) {
|
||||||
data.push_back(cd);
|
fdata.push_back(cd);
|
||||||
}
|
}
|
||||||
|
|
||||||
return data;
|
inc_label_usage(fdata);
|
||||||
|
|
||||||
|
return fdata;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
@ -802,15 +806,17 @@ update_labels() {
|
|||||||
int num_children = level->get_num_children();
|
int num_children = level->get_num_children();
|
||||||
for (int i = 0; i < num_children; i++) {
|
for (int i = 0; i < num_children; i++) {
|
||||||
const PStatViewLevel *child = level->get_child(i);
|
const PStatViewLevel *child = level->get_child(i);
|
||||||
int collector = child->get_collector();
|
int collector_index = child->get_collector();
|
||||||
_labels.push_back(collector);
|
if (is_label_used(collector_index)) {
|
||||||
|
_labels.push_back(collector_index);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SortCollectorLabels2 sort_labels(get_monitor()->get_client_data());
|
SortCollectorLabels2 sort_labels(get_monitor()->get_client_data());
|
||||||
sort(_labels.begin(), _labels.end(), sort_labels);
|
sort(_labels.begin(), _labels.end(), sort_labels);
|
||||||
|
|
||||||
int collector = level->get_collector();
|
int collector_index = level->get_collector();
|
||||||
_labels.push_back(collector);
|
_labels.push_back(collector_index);
|
||||||
|
|
||||||
_labels_changed = true;
|
_labels_changed = true;
|
||||||
_level_index = _view.get_level_index();
|
_level_index = _view.get_level_index();
|
||||||
@ -959,3 +965,67 @@ draw_pixels(int first_pixel, int last_pixel) {
|
|||||||
|
|
||||||
end_draw(first_pixel, last_pixel);
|
end_draw(first_pixel, last_pixel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: PStatStripChart::clear_label_usage
|
||||||
|
// Access: Private
|
||||||
|
// Description: Erases all elements from the label usage data.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void PStatStripChart::
|
||||||
|
clear_label_usage() {
|
||||||
|
_label_usage.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: PStatStripChart::dec_label_usage
|
||||||
|
// Access: Private
|
||||||
|
// Description: Erases the indicated frame data from the current
|
||||||
|
// label usage. This indicates that the given FrameData
|
||||||
|
// has fallen off the end of the chart. This must have
|
||||||
|
// been proceeded by an earlier call to
|
||||||
|
// inc_label_usage() for the same FrameData
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void PStatStripChart::
|
||||||
|
dec_label_usage(const FrameData &fdata) {
|
||||||
|
FrameData::const_iterator fi;
|
||||||
|
for (fi = fdata.begin(); fi != fdata.end(); ++fi) {
|
||||||
|
const ColorData &cd = (*fi);
|
||||||
|
nassertv(cd._collector_index < (int)_label_usage.size());
|
||||||
|
nassertv(_label_usage[cd._collector_index] > 0);
|
||||||
|
_label_usage[cd._collector_index]--;
|
||||||
|
if (_label_usage[cd._collector_index] == 0) {
|
||||||
|
// If a label drops out of usage, it's time to regenerate
|
||||||
|
// labels.
|
||||||
|
_level_index = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: PStatStripChart::inc_label_usage
|
||||||
|
// Access: Private
|
||||||
|
// Description: Records the labels named in the indicated FrameData
|
||||||
|
// in the table of current labels in use. This should
|
||||||
|
// be called when the given FrameData has been added to
|
||||||
|
// the chart; it will increment the reference count for
|
||||||
|
// each collector named in the FrameData. The reference
|
||||||
|
// count will eventually be decremented when
|
||||||
|
// dec_label_usage() is called later.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void PStatStripChart::
|
||||||
|
inc_label_usage(const FrameData &fdata) {
|
||||||
|
FrameData::const_iterator fi;
|
||||||
|
for (fi = fdata.begin(); fi != fdata.end(); ++fi) {
|
||||||
|
const ColorData &cd = (*fi);
|
||||||
|
while (cd._collector_index >= (int)_label_usage.size()) {
|
||||||
|
_label_usage.push_back(0);
|
||||||
|
}
|
||||||
|
nassertv(_label_usage[cd._collector_index] >= 0);
|
||||||
|
_label_usage[cd._collector_index]++;
|
||||||
|
if (_label_usage[cd._collector_index] == 1) {
|
||||||
|
// If a label appears for the first time, it's time to
|
||||||
|
// regenerate labels.
|
||||||
|
_level_index = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -114,10 +114,16 @@ protected:
|
|||||||
virtual void end_draw(int from_x, int to_x);
|
virtual void end_draw(int from_x, int to_x);
|
||||||
virtual void idle();
|
virtual void idle();
|
||||||
|
|
||||||
|
INLINE bool is_label_used(int collector_index) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void draw_frames(int first_frame, int last_frame);
|
void draw_frames(int first_frame, int last_frame);
|
||||||
void draw_pixels(int first_pixel, int last_pixel);
|
void draw_pixels(int first_pixel, int last_pixel);
|
||||||
|
|
||||||
|
void clear_label_usage();
|
||||||
|
void dec_label_usage(const FrameData &fdata);
|
||||||
|
void inc_label_usage(const FrameData &fdata);
|
||||||
|
|
||||||
PStatView &_view;
|
PStatView &_view;
|
||||||
int _collector_index;
|
int _collector_index;
|
||||||
bool _scroll_mode;
|
bool _scroll_mode;
|
||||||
@ -135,6 +141,9 @@ private:
|
|||||||
float _start_time;
|
float _start_time;
|
||||||
float _value_height;
|
float _value_height;
|
||||||
bool _title_unknown;
|
bool _title_unknown;
|
||||||
|
|
||||||
|
typedef vector_int LabelUsage;
|
||||||
|
LabelUsage _label_usage;
|
||||||
};
|
};
|
||||||
|
|
||||||
#include "pStatStripChart.I"
|
#include "pStatStripChart.I"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user