mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-28 07:48:37 -04:00
pstats: Fix hovering strip chart labels being excessively slow
Now properly uses the cached data rather than computing it on every mouseover
This commit is contained in:
parent
f02a3156ca
commit
21cae91890
@ -333,20 +333,20 @@ get_label_tooltip(int collector_index) const {
|
||||
double now = _time_width + _start_time;
|
||||
double then = now - pstats_average_time;
|
||||
|
||||
double net_value = 0.0f;
|
||||
double net_time = 0.0f;
|
||||
double net_value = 0.0;
|
||||
double net_time = 0.0;
|
||||
|
||||
// We start with just the portion of frame then_i that actually does fall
|
||||
// within our "then to now" window (usually some portion of it will).
|
||||
const PStatFrameData &frame_data = thread_data->get_frame(then_i);
|
||||
if (frame_data.get_end() > then) {
|
||||
double this_time = (frame_data.get_end() - then);
|
||||
_view.set_to_frame(frame_data);
|
||||
|
||||
const PStatViewLevel *level = _view.get_level(collector_index);
|
||||
if (level != nullptr) {
|
||||
net_value += level->get_net_value() * this_time;
|
||||
net_time += this_time;
|
||||
for (const ColorData &cd : get_frame_data(then_i)) {
|
||||
if (cd._collector_index == collector_index) {
|
||||
net_value += cd._net_value * this_time;
|
||||
net_time += this_time;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Then we get all of each of the remaining frames.
|
||||
@ -354,13 +354,13 @@ get_label_tooltip(int collector_index) const {
|
||||
frame_number <= now_i;
|
||||
frame_number++) {
|
||||
const PStatFrameData &frame_data = thread_data->get_frame(frame_number);
|
||||
double this_time = frame_data.get_net_time();
|
||||
_view.set_to_frame(frame_data);
|
||||
|
||||
const PStatViewLevel *level = _view.get_level(collector_index);
|
||||
if (level != nullptr) {
|
||||
net_value += level->get_net_value() * this_time;
|
||||
net_time += this_time;
|
||||
for (const ColorData &cd : get_frame_data(frame_number)) {
|
||||
if (cd._collector_index == collector_index) {
|
||||
double this_time = frame_data.get_net_time();
|
||||
net_value += cd._net_value * this_time;
|
||||
net_time += this_time;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -543,7 +543,7 @@ scale_frame_data(FrameData &fdata, double factor) {
|
||||
* the chart.
|
||||
*/
|
||||
const PStatStripChart::FrameData &PStatStripChart::
|
||||
get_frame_data(int frame_number) {
|
||||
get_frame_data(int frame_number) const {
|
||||
Data::const_iterator di;
|
||||
di = _data.find(frame_number);
|
||||
if (di != _data.end()) {
|
||||
@ -578,7 +578,7 @@ get_frame_data(int frame_number) {
|
||||
fdata.push_back(cd);
|
||||
}
|
||||
|
||||
inc_label_usage(fdata);
|
||||
((PStatStripChart *)this)->inc_label_usage(fdata);
|
||||
|
||||
return fdata;
|
||||
}
|
||||
@ -649,13 +649,10 @@ compute_average_pixel_data(PStatStripChart::FrameData &result,
|
||||
*/
|
||||
double PStatStripChart::
|
||||
get_net_value(int frame_number) const {
|
||||
const FrameData &frame =
|
||||
((PStatStripChart *)this)->get_frame_data(frame_number);
|
||||
const FrameData &frame = get_frame_data(frame_number);
|
||||
|
||||
double net_value = 0.0;
|
||||
FrameData::const_iterator fi;
|
||||
for (fi = frame.begin(); fi != frame.end(); ++fi) {
|
||||
const ColorData &cd = (*fi);
|
||||
for (const ColorData &cd : frame) {
|
||||
net_value += cd._net_value;
|
||||
}
|
||||
|
||||
@ -671,7 +668,7 @@ get_average_net_value() const {
|
||||
const PStatThreadData *thread_data = _view.get_thread_data();
|
||||
int now_i, then_i;
|
||||
if (!thread_data->get_elapsed_frames(then_i, now_i)) {
|
||||
return 0.0f;
|
||||
return 0.0;
|
||||
}
|
||||
double now = _time_width + _start_time;
|
||||
double then = now - pstats_average_time;
|
||||
@ -698,13 +695,14 @@ get_average_net_value() const {
|
||||
|
||||
const PStatThreadData *thread_data = _view.get_thread_data();
|
||||
|
||||
double net_value = 0.0f;
|
||||
double net_time = 0.0f;
|
||||
double net_value = 0.0;
|
||||
double net_time = 0.0;
|
||||
|
||||
// We start with just the portion of frame then_i that actually does fall
|
||||
// within our "then to now" window (usually some portion of it will).
|
||||
if (thread_data->get_frame(then_i).get_end() > then) {
|
||||
double this_time = (thread_data->get_frame(then_i).get_end() - then);
|
||||
const PStatFrameData &frame_data = thread_data->get_frame(then_i);
|
||||
if (frame_data.get_end() > then) {
|
||||
double this_time = (frame_data.get_end() - then);
|
||||
net_value += get_net_value(then_i) * this_time;
|
||||
net_time += this_time;
|
||||
}
|
||||
|
@ -91,7 +91,7 @@ protected:
|
||||
const FrameData &additional, double weight);
|
||||
static void scale_frame_data(FrameData &fdata, double factor);
|
||||
|
||||
const FrameData &get_frame_data(int frame_number);
|
||||
const FrameData &get_frame_data(int frame_number) const;
|
||||
void compute_average_pixel_data(PStatStripChart::FrameData &result,
|
||||
int &then_i, int &now_i, double now);
|
||||
double get_net_value(int frame_number) const;
|
||||
@ -132,7 +132,7 @@ private:
|
||||
bool _scroll_mode;
|
||||
bool _average_mode;
|
||||
|
||||
Data _data;
|
||||
mutable Data _data;
|
||||
|
||||
int _next_frame;
|
||||
bool _first_data;
|
||||
|
Loading…
x
Reference in New Issue
Block a user