diff --git a/pandatool/src/gtk-stats/gtkStatsChartMenu.cxx b/pandatool/src/gtk-stats/gtkStatsChartMenu.cxx index c9fac65d89..8b695626ac 100755 --- a/pandatool/src/gtk-stats/gtkStatsChartMenu.cxx +++ b/pandatool/src/gtk-stats/gtkStatsChartMenu.cxx @@ -119,7 +119,7 @@ do_update() { for (int tc = 0; tc < num_toplevel_collectors; tc++) { int collector = client_data->get_toplevel_collector(tc); if (client_data->has_collector(collector) && - client_data->get_collector_has_level(collector)) { + client_data->get_collector_has_level(collector, _thread_index)) { // We put a separator between the above frame collector and the // first level collector. diff --git a/pandatool/src/gtk-stats/gtkStatsGraph.cxx b/pandatool/src/gtk-stats/gtkStatsGraph.cxx index 36917672f2..c9e9f50ba1 100755 --- a/pandatool/src/gtk-stats/gtkStatsGraph.cxx +++ b/pandatool/src/gtk-stats/gtkStatsGraph.cxx @@ -42,9 +42,8 @@ const GdkColor GtkStatsGraph::rgb_user_guide_bar = { // Description: //////////////////////////////////////////////////////////////////// GtkStatsGraph:: -GtkStatsGraph(GtkStatsMonitor *monitor, int thread_index) : - _monitor(monitor), - _thread_index(thread_index) +GtkStatsGraph(GtkStatsMonitor *monitor) : + _monitor(monitor) { _parent_window = NULL; _window = NULL; @@ -146,17 +145,6 @@ GtkStatsGraph:: gtk_widget_destroy(_window); } -//////////////////////////////////////////////////////////////////// -// Function: GtkStatsGraph::get_thread_index -// Access: Public -// Description: Returns the thread index associated with this -// particular graph. -//////////////////////////////////////////////////////////////////// -int GtkStatsGraph:: -get_thread_index() const { - return _thread_index; -} - //////////////////////////////////////////////////////////////////// // Function: GtkStatsGraph::new_collector // Access: Public, Virtual diff --git a/pandatool/src/gtk-stats/gtkStatsGraph.h b/pandatool/src/gtk-stats/gtkStatsGraph.h index 444bc74a0c..0e9f99a8c4 100755 --- a/pandatool/src/gtk-stats/gtkStatsGraph.h +++ b/pandatool/src/gtk-stats/gtkStatsGraph.h @@ -45,11 +45,9 @@ public: }; public: - GtkStatsGraph(GtkStatsMonitor *monitor, int thread_index); + GtkStatsGraph(GtkStatsMonitor *monitor); virtual ~GtkStatsGraph(); - int get_thread_index() const; - virtual void new_collector(int collector_index); virtual void new_data(int thread_index, int frame_number); virtual void force_redraw(); @@ -81,7 +79,6 @@ protected: Brushes _brushes; GtkStatsMonitor *_monitor; - int _thread_index; GtkWidget *_parent_window; GtkWidget *_window; GtkWidget *_graph_window; diff --git a/pandatool/src/gtk-stats/gtkStatsPianoRoll.cxx b/pandatool/src/gtk-stats/gtkStatsPianoRoll.cxx index 4e78477c0b..1dcfa66d60 100644 --- a/pandatool/src/gtk-stats/gtkStatsPianoRoll.cxx +++ b/pandatool/src/gtk-stats/gtkStatsPianoRoll.cxx @@ -34,7 +34,7 @@ GtkStatsPianoRoll(GtkStatsMonitor *monitor, int thread_index) : PStatPianoRoll(monitor, thread_index, default_piano_roll_width, default_piano_roll_height), - GtkStatsGraph(monitor, thread_index) + GtkStatsGraph(monitor) { // Let's show the units on the guide bar labels. There's room. set_guide_bar_units(get_guide_bar_units() | GBU_show_units); @@ -52,6 +52,12 @@ GtkStatsPianoRoll(GtkStatsMonitor *monitor, int thread_index) : gtk_widget_set_size_request(_graph_window, default_piano_roll_width, default_piano_roll_height); + const PStatClientData *client_data = + GtkStatsGraph::_monitor->get_client_data(); + string thread_name = client_data->get_thread_name(_thread_index); + string window_title = thread_name + " thread piano roll"; + gtk_window_set_title(GTK_WINDOW(_window), window_title.c_str()); + gtk_widget_show_all(_window); gtk_widget_show(_window); @@ -137,7 +143,7 @@ set_time_units(int unit_mask) { void GtkStatsPianoRoll:: clicked_label(int collector_index) { if (collector_index >= 0) { - GtkStatsGraph::_monitor->open_strip_chart(GtkStatsGraph::_thread_index, collector_index, false); + GtkStatsGraph::_monitor->open_strip_chart(_thread_index, collector_index, false); } } @@ -418,7 +424,7 @@ update_labels() { _label_stack.clear_labels(); for (int i = 0; i < get_num_labels(); i++) { _label_stack.add_label(GtkStatsGraph::_monitor, this, - GtkStatsGraph::_thread_index, + _thread_index, get_label_collector(i), true); } _labels_changed = false; diff --git a/pandatool/src/gtk-stats/gtkStatsStripChart.cxx b/pandatool/src/gtk-stats/gtkStatsStripChart.cxx index 90d574511c..bff2cd35a1 100644 --- a/pandatool/src/gtk-stats/gtkStatsStripChart.cxx +++ b/pandatool/src/gtk-stats/gtkStatsStripChart.cxx @@ -34,10 +34,11 @@ GtkStatsStripChart(GtkStatsMonitor *monitor, int thread_index, int collector_index, bool show_level) : PStatStripChart(monitor, show_level ? monitor->get_level_view(collector_index, thread_index) : monitor->get_view(thread_index), + thread_index, collector_index, default_strip_chart_width, default_strip_chart_height), - GtkStatsGraph(monitor, thread_index) + GtkStatsGraph(monitor) { _brush_origin = 0; diff --git a/pandatool/src/pstatserver/pStatClientData.cxx b/pandatool/src/pstatserver/pStatClientData.cxx index ea0d82cafd..48e8f3855b 100644 --- a/pandatool/src/pstatserver/pStatClientData.cxx +++ b/pandatool/src/pstatserver/pStatClientData.cxx @@ -161,21 +161,21 @@ get_collector_fullname(int index) const { // otherwise. //////////////////////////////////////////////////////////////////// bool PStatClientData:: -set_collector_has_level(int index, bool flag) { +set_collector_has_level(int index, int thread_index, bool flag) { bool any_changed = false; slot_collector(index); nassertr(index >= 0 && index < (int)_collectors.size(), false); - if (_collectors[index]._is_level != flag) { + if (_collectors[index]._is_level.get_bit(thread_index) != flag) { any_changed = true; - _collectors[index]._is_level = flag; + _collectors[index]._is_level.set_bit_to(thread_index, flag); // Turning this on for a given collector also implicitly turns all // of its ancestors. if (flag) { PStatCollectorDef *def = _collectors[index]._def; if (def->_parent_index != 0) { - set_collector_has_level(def->_parent_index, flag); + set_collector_has_level(def->_parent_index, thread_index, flag); } } } @@ -192,9 +192,9 @@ set_collector_has_level(int index, bool flag) { // Levels menu). //////////////////////////////////////////////////////////////////// bool PStatClientData:: -get_collector_has_level(int index) const { +get_collector_has_level(int index, int thread_index) const { return (index >= 0 && index < (int)_collectors.size() && - _collectors[index]._is_level); + _collectors[index]._is_level.get_bit(thread_index)); } //////////////////////////////////////////////////////////////////// @@ -327,8 +327,12 @@ add_collector(PStatCollectorDef *def) { // If we already had the _is_level flag set, it should be // immediately applied to all ancestors. - if (_collectors[def->_index]._is_level) { - set_collector_has_level(def->_parent_index, true); + const BitArray &is_level = _collectors[def->_index]._is_level; + int max_threads = is_level.get_num_bits(); + for (int thread_index = 0; thread_index < max_threads; ++thread_index) { + if (is_level.get_bit(thread_index)) { + set_collector_has_level(def->_parent_index, thread_index, true); + } } } @@ -391,7 +395,6 @@ slot_collector(int collector_index) { while ((int)_collectors.size() <= collector_index) { Collector collector; collector._def = (PStatCollectorDef *)NULL; - collector._is_level = false; _collectors.push_back(collector); } } diff --git a/pandatool/src/pstatserver/pStatClientData.h b/pandatool/src/pstatserver/pStatClientData.h index f9e0e04cef..d1b1f10fa3 100644 --- a/pandatool/src/pstatserver/pStatClientData.h +++ b/pandatool/src/pstatserver/pStatClientData.h @@ -26,6 +26,7 @@ #include "pStatClientVersion.h" #include "referenceCount.h" #include "pointerTo.h" +#include "bitArray.h" #include "pvector.h" #include "vector_int.h" @@ -51,8 +52,8 @@ public: const PStatCollectorDef &get_collector_def(int index) const; string get_collector_name(int index) const; string get_collector_fullname(int index) const; - bool set_collector_has_level(int index, bool flag); - bool get_collector_has_level(int index) const; + bool set_collector_has_level(int index, int thread_index, bool flag); + bool get_collector_has_level(int index, int thread_index) const; int get_num_toplevel_collectors() const; int get_toplevel_collector(int index) const; @@ -81,7 +82,7 @@ private: class Collector { public: PStatCollectorDef *_def; - bool _is_level; + BitArray _is_level; }; typedef pvector Collectors; diff --git a/pandatool/src/pstatserver/pStatPianoRoll.h b/pandatool/src/pstatserver/pStatPianoRoll.h index d713c630cb..217ec632fd 100644 --- a/pandatool/src/pstatserver/pStatPianoRoll.h +++ b/pandatool/src/pstatserver/pStatPianoRoll.h @@ -75,8 +75,10 @@ protected: private: void compute_page(const PStatFrameData &frame_data); +protected: int _thread_index; +private: float _time_width; float _start_time; diff --git a/pandatool/src/pstatserver/pStatReader.cxx b/pandatool/src/pstatserver/pStatReader.cxx index 217d6f655a..fe496cf187 100644 --- a/pandatool/src/pstatserver/pStatReader.cxx +++ b/pandatool/src/pstatserver/pStatReader.cxx @@ -314,10 +314,10 @@ dequeue_frame_data() { int num_levels = data._frame_data->get_num_levels(); for (int i = 0; i < num_levels; i++) { int collector_index = data._frame_data->get_level_collector(i); - if (!_client_data->get_collector_has_level(collector_index)) { + if (!_client_data->get_collector_has_level(collector_index, data._thread_index)) { // This collector is now reporting level data, and it wasn't // before. - _client_data->set_collector_has_level(collector_index, true); + _client_data->set_collector_has_level(collector_index, data._thread_index, true); _monitor->new_collector(collector_index); } } diff --git a/pandatool/src/pstatserver/pStatStripChart.cxx b/pandatool/src/pstatserver/pStatStripChart.cxx index f735618937..ebd74dd7e3 100644 --- a/pandatool/src/pstatserver/pStatStripChart.cxx +++ b/pandatool/src/pstatserver/pStatStripChart.cxx @@ -34,8 +34,9 @@ //////////////////////////////////////////////////////////////////// PStatStripChart:: PStatStripChart(PStatMonitor *monitor, PStatView &view, - int collector_index, int xsize, int ysize) : + int thread_index, int collector_index, int xsize, int ysize) : PStatGraph(monitor, xsize, ysize), + _thread_index(thread_index), _view(view), _collector_index(collector_index) { @@ -280,7 +281,6 @@ get_title_text() { string text; _title_unknown = false; - int _thread_index = 0; const PStatClientData *client_data = _monitor->get_client_data(); if (client_data->has_collector(_collector_index)) { @@ -299,7 +299,7 @@ get_title_text() { if (_thread_index != 0) { if (client_data->has_thread(_thread_index)) { - text += "(" + client_data->get_thread_name(_thread_index) + " thread)"; + text += " (" + client_data->get_thread_name(_thread_index) + " thread)"; } else { _title_unknown = true; } diff --git a/pandatool/src/pstatserver/pStatStripChart.h b/pandatool/src/pstatserver/pStatStripChart.h index 7e02a05ae9..327379341e 100644 --- a/pandatool/src/pstatserver/pStatStripChart.h +++ b/pandatool/src/pstatserver/pStatStripChart.h @@ -46,7 +46,7 @@ class PStatView; class PStatStripChart : public PStatGraph { public: PStatStripChart(PStatMonitor *monitor, PStatView &view, - int collector_index, int xsize, int ysize); + int thread_index, int collector_index, int xsize, int ysize); virtual ~PStatStripChart(); void new_data(int frame_number); @@ -124,6 +124,10 @@ private: void dec_label_usage(const FrameData &fdata); void inc_label_usage(const FrameData &fdata); +protected: + int _thread_index; + +private: PStatView &_view; int _collector_index; bool _scroll_mode; diff --git a/pandatool/src/text-stats/textMonitor.cxx b/pandatool/src/text-stats/textMonitor.cxx index b8fa661499..374c32d9c8 100644 --- a/pandatool/src/text-stats/textMonitor.cxx +++ b/pandatool/src/text-stats/textMonitor.cxx @@ -113,7 +113,7 @@ new_data(int thread_index, int frame_number) { for (int tc = 0; tc < num_toplevel_collectors; tc++) { int collector = client_data->get_toplevel_collector(tc); if (client_data->has_collector(collector) && - client_data->get_collector_has_level(collector)) { + client_data->get_collector_has_level(collector, thread_index)) { PStatView &level_view = get_level_view(collector, thread_index); level_view.set_to_frame(frame_number); diff --git a/pandatool/src/win-stats/winStatsChartMenu.cxx b/pandatool/src/win-stats/winStatsChartMenu.cxx index 7cfd50965a..c9c6d98f49 100755 --- a/pandatool/src/win-stats/winStatsChartMenu.cxx +++ b/pandatool/src/win-stats/winStatsChartMenu.cxx @@ -128,7 +128,7 @@ do_update() { for (int tc = 0; tc < num_toplevel_collectors; tc++) { int collector = client_data->get_toplevel_collector(tc); if (client_data->has_collector(collector) && - client_data->get_collector_has_level(collector)) { + client_data->get_collector_has_level(collector, _thread_index)) { // We put a separator between the above frame collector and the // first level collector. diff --git a/pandatool/src/win-stats/winStatsGraph.cxx b/pandatool/src/win-stats/winStatsGraph.cxx index 3a15a845eb..45693b2263 100644 --- a/pandatool/src/win-stats/winStatsGraph.cxx +++ b/pandatool/src/win-stats/winStatsGraph.cxx @@ -32,9 +32,8 @@ WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_OVERLAPPEDWINDOW | WS_VISIBLE; // Description: //////////////////////////////////////////////////////////////////// WinStatsGraph:: -WinStatsGraph(WinStatsMonitor *monitor, int thread_index) : - _monitor(monitor), - _thread_index(thread_index) +WinStatsGraph(WinStatsMonitor *monitor) : + _monitor(monitor) { _window = 0; _graph_window = 0; @@ -93,17 +92,6 @@ WinStatsGraph:: } } -//////////////////////////////////////////////////////////////////// -// Function: WinStatsGraph::get_thread_index -// Access: Public -// Description: Returns the thread index associated with this -// particular graph. -//////////////////////////////////////////////////////////////////// -int WinStatsGraph:: -get_thread_index() const { - return _thread_index; -} - //////////////////////////////////////////////////////////////////// // Function: WinStatsGraph::new_collector // Access: Public, Virtual diff --git a/pandatool/src/win-stats/winStatsGraph.h b/pandatool/src/win-stats/winStatsGraph.h index da18054164..fae67a0d29 100644 --- a/pandatool/src/win-stats/winStatsGraph.h +++ b/pandatool/src/win-stats/winStatsGraph.h @@ -47,11 +47,9 @@ public: }; public: - WinStatsGraph(WinStatsMonitor *monitor, int thread_index); + WinStatsGraph(WinStatsMonitor *monitor); virtual ~WinStatsGraph(); - int get_thread_index() const; - virtual void new_collector(int collector_index); virtual void new_data(int thread_index, int frame_number); virtual void force_redraw(); @@ -90,7 +88,6 @@ protected: Brushes _brushes; WinStatsMonitor *_monitor; - int _thread_index; HWND _window; HWND _graph_window; WinStatsLabelStack _label_stack; diff --git a/pandatool/src/win-stats/winStatsPianoRoll.cxx b/pandatool/src/win-stats/winStatsPianoRoll.cxx index 6408db63e5..c6f42914e3 100755 --- a/pandatool/src/win-stats/winStatsPianoRoll.cxx +++ b/pandatool/src/win-stats/winStatsPianoRoll.cxx @@ -36,7 +36,7 @@ WinStatsPianoRoll(WinStatsMonitor *monitor, int thread_index) : PStatPianoRoll(monitor, thread_index, default_piano_roll_width, default_piano_roll_height), - WinStatsGraph(monitor, thread_index) + WinStatsGraph(monitor) { _left_margin = 128; _right_margin = 8; @@ -127,7 +127,7 @@ set_time_units(int unit_mask) { void WinStatsPianoRoll:: clicked_label(int collector_index) { if (collector_index >= 0) { - WinStatsGraph::_monitor->open_strip_chart(WinStatsGraph::_thread_index, collector_index, false); + WinStatsGraph::_monitor->open_strip_chart(_thread_index, collector_index, false); } } @@ -467,7 +467,7 @@ update_labels() { for (int i = 0; i < get_num_labels(); i++) { int label_index = _label_stack.add_label(WinStatsGraph::_monitor, this, - WinStatsGraph::_thread_index, + _thread_index, get_label_collector(i), true); } _labels_changed = false; @@ -562,7 +562,7 @@ create_window() { const PStatClientData *client_data = WinStatsGraph::_monitor->get_client_data(); - string thread_name = client_data->get_thread_name(WinStatsGraph::_thread_index); + string thread_name = client_data->get_thread_name(_thread_index); string window_title = thread_name + " thread piano roll"; diff --git a/pandatool/src/win-stats/winStatsStripChart.cxx b/pandatool/src/win-stats/winStatsStripChart.cxx index 5523d5f953..4eb3d983e5 100644 --- a/pandatool/src/win-stats/winStatsStripChart.cxx +++ b/pandatool/src/win-stats/winStatsStripChart.cxx @@ -43,10 +43,11 @@ WinStatsStripChart(WinStatsMonitor *monitor, int thread_index, int collector_index, bool show_level) : PStatStripChart(monitor, show_level ? monitor->get_level_view(collector_index, thread_index) : monitor->get_view(thread_index), + thread_index, collector_index, default_strip_chart_width, default_strip_chart_height), - WinStatsGraph(monitor, thread_index) + WinStatsGraph(monitor) { _brush_origin = 0;