added statistics show/hide, resized windows, added, scrolbars, added
simulation statistics git-svn-id: svn://svn.gna.org/svn/sgpemv2/trunk@1141 3ecf2c5c-341e-0410-92b4-d18e462d057c
This commit is contained in:
parent
290360c3b0
commit
03498c1a78
|
@ -349,6 +349,7 @@ sgpemv2_SOURCES = \
|
|||
src/schedulables_statistics_widget.cc \
|
||||
src/schedulables_tree_widget.cc \
|
||||
src/simulation_controller.cc \
|
||||
src/simulation_statistics_widget.cc \
|
||||
src/simulation_widget.cc \
|
||||
src/statistics_container_window.cc \
|
||||
src/text_simulation.cc
|
||||
|
@ -371,6 +372,7 @@ noinst_HEADERS += \
|
|||
src/schedulables_statistics_widget.hh \
|
||||
src/schedulables_tree_widget.hh \
|
||||
src/simulation_controller.hh \
|
||||
src/simulation_statistics_widget.hh \
|
||||
src/simulation_widget.hh \
|
||||
src/schedulables_statistics_widget.hh \
|
||||
src/text_simulation.hh
|
||||
|
@ -385,7 +387,8 @@ glade_DATA = \
|
|||
glade/add-thread-dialog.glade \
|
||||
glade/configure-dialog.glade \
|
||||
glade/jump-to-dialog.glade \
|
||||
glade/main-window.glade
|
||||
glade/main-window.glade \
|
||||
glade/statistics-window.glade
|
||||
|
||||
EXTRA_DIST += $(glade_DATA)
|
||||
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#include "holt_widget.hh"
|
||||
#include "ready_queue_widget.hh"
|
||||
#include "schedulables_tree_widget.hh"
|
||||
#include "schedulables_statistics_widget.hh"
|
||||
#include "simulation_widget.hh"
|
||||
#include "resources_widget.hh"
|
||||
#include "jump_to_dialog.hh"
|
||||
|
@ -64,6 +65,7 @@
|
|||
#include <gtkmm/spinbutton.h>
|
||||
#include <gtkmm/statusbar.h>
|
||||
#include <gtkmm/stock.h>
|
||||
#include <gtkmm/window.h>
|
||||
|
||||
#include <cassert>
|
||||
#include <iostream>
|
||||
|
@ -122,6 +124,20 @@ GuiBuilder::on_view_show_holt_graph_activate()
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
GuiBuilder::on_view_show_statistics_activate()
|
||||
{
|
||||
if(_statistics_container.get_main_window()->is_visible())
|
||||
{
|
||||
_statistics_container.get_main_window()->hide();
|
||||
}
|
||||
else
|
||||
{
|
||||
_statistics_container.get_main_window()->show();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
GuiBuilder::on_file_new_activate()
|
||||
|
@ -565,6 +581,10 @@ GuiBuilder::GuiBuilder(const std::string& gladefile)
|
|||
_refXml->get_widget("MenuItem.View.ShowHoltGraph", show_holt_graph);
|
||||
show_holt_graph->signal_activate().connect(sigc::mem_fun(*this, &GuiBuilder::on_view_show_holt_graph_activate));
|
||||
|
||||
// show/hide statistics window
|
||||
MenuItem* show_statistics_graph;
|
||||
_refXml->get_widget("MenuItem.View.ShowStatistics", show_statistics_graph);
|
||||
show_statistics_graph->signal_activate().connect(sigc::mem_fun(*this, &GuiBuilder::on_view_show_statistics_activate));
|
||||
|
||||
|
||||
CheckMenuItem* continuous_mode;
|
||||
|
@ -656,9 +676,20 @@ GuiBuilder::GuiBuilder(const std::string& gladefile)
|
|||
_holt_container.get_holt_widget().set_show_threads(_show_threads);
|
||||
_holt_container.show();
|
||||
|
||||
// Statistics container window
|
||||
_statistics_container.set_transient_for(main_window);
|
||||
_statistics_container.show();
|
||||
_statistics_container.get_main_window()->set_transient_for(main_window);
|
||||
|
||||
// Moves and resize windows
|
||||
int w = gdk_screen_width(), h= gdk_screen_height();;
|
||||
get_initial_window().move(0,0);
|
||||
get_initial_window().resize(w,(h/3)*2 - 50);
|
||||
|
||||
_holt_container.move(0, (h/3)*2);
|
||||
_holt_container.resize(h/3, h/3);
|
||||
|
||||
_statistics_container.get_main_window()->move(h/3 + 15,(h/3)*2);
|
||||
_statistics_container.get_main_window()->resize(w - h/3 - 15, h/3);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -62,6 +62,7 @@ namespace sgpem
|
|||
|
||||
void on_view_show_threads_activate();
|
||||
void on_view_show_holt_graph_activate();
|
||||
void on_view_show_statistics_activate();
|
||||
|
||||
void on_configure_cpu_policy();
|
||||
void on_configure_resource_policy();
|
||||
|
|
|
@ -136,17 +136,6 @@ TabularSchedulableStatisticsWidget::update(const History& changed_history)
|
|||
}
|
||||
}
|
||||
expand_all();
|
||||
|
||||
const SimulationStatistics* sim = Statistics::get_instance().get_simulation_statistics();
|
||||
cout << "\n\n****** SIMULATION STATISTICS *******\n AVG_RESP= "
|
||||
<< sim->get_average_response_time() << " AVG_INACT= " << sim->get_average_inactivity_time() <<
|
||||
" AVG_EXEC= " << sim->get_average_execution_progress() <<
|
||||
"% AVG_EFFIC= " << sim->get_average_efficiency() <<
|
||||
"% AVG_TURN= " << sim->get_average_turn_around() <<
|
||||
" TERM_PROCS= " << sim->get_terminated_processes() <<
|
||||
" TERM_THRES= " << sim->get_terminated_threads() <<
|
||||
" THRU_PROCS= " << sim->get_average_processes_throughput() <<
|
||||
" THRU_THREA= " << sim->get_average_threads_throughput() << "\n\n";
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,133 @@
|
|||
// src/simulation_statistics_widget.cc - Copyright 2005, 2006, University
|
||||
// of Padova, dept. of Pure and Applied
|
||||
// Mathematics
|
||||
//
|
||||
// This file is part of SGPEMv2.
|
||||
//
|
||||
// This is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; either version 2 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// SGPEMv2 is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with SGPEMv2; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
|
||||
#include "gettext.h"
|
||||
|
||||
|
||||
#include "simulation_statistics_widget.hh"
|
||||
#include <sgpemv2/simulation.hh>
|
||||
#include <sgpemv2/history.hh>
|
||||
#include <sgpemv2/statistics.hh>
|
||||
|
||||
#include <iostream>
|
||||
#include <stdio.h> //per sprintf
|
||||
|
||||
|
||||
using namespace sgpem;
|
||||
using namespace std;
|
||||
|
||||
using namespace Gtk;
|
||||
using namespace Glib;
|
||||
|
||||
|
||||
TabularSimulationStatisticsWidget::TabularSimulationStatisticsWidget()
|
||||
{
|
||||
//insert columns
|
||||
_columns.add(_col_inactivity);
|
||||
_columns.add(_col_progress);
|
||||
_columns.add(_col_turn);
|
||||
_columns.add(_col_response);
|
||||
_columns.add(_col_effic);
|
||||
_columns.add(_col_term_procs);
|
||||
_columns.add(_col_term_threads);
|
||||
_columns.add(_col_through_procs);
|
||||
_columns.add(_col_through_threads);
|
||||
|
||||
_model = TreeStore::create(_columns);
|
||||
set_model(_model);
|
||||
|
||||
append_column(_("Avg. inactivity time"), _col_inactivity);
|
||||
append_column(_("Avg. execution progress"), _col_progress);
|
||||
append_column(_("Avg. turn around"), _col_turn);
|
||||
append_column(_("Avg. response time"), _col_response);
|
||||
append_column(_("Avg. efficiency"), _col_effic);
|
||||
append_column(_("# terminated processes"), _col_term_procs);
|
||||
append_column(_("# terminated threads"), _col_term_threads);
|
||||
append_column(_("Avg. processes throughput"), _col_through_procs);
|
||||
append_column(_("Avg. threads throughput"), _col_through_threads);
|
||||
|
||||
|
||||
set_headers_visible(true);
|
||||
|
||||
// Register this HistoryObserver:
|
||||
Simulation::get_instance().get_history().attach(*this);
|
||||
}
|
||||
|
||||
TabularSimulationStatisticsWidget::~TabularSimulationStatisticsWidget()
|
||||
{
|
||||
Simulation::get_instance().get_history().detach(*this);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
TabularSimulationStatisticsWidget::update(const History& changed_history)
|
||||
{
|
||||
_model->clear();
|
||||
int num_procs=0, num_threads=0;
|
||||
vector<Process*> procs = Simulation::get_instance().get_history().get_environment_at(0).get_processes();
|
||||
num_procs = procs.size();
|
||||
for (uint i =0; i < procs.size(); i++)
|
||||
num_threads += procs[i]->get_threads().size();
|
||||
|
||||
if (num_procs == 0)
|
||||
return;
|
||||
|
||||
Statistics::get_instance().calculateStatisticsAt(changed_history.get_front());
|
||||
const SimulationStatistics* stats = Statistics::get_instance().get_simulation_statistics();
|
||||
|
||||
TreeModel::Row riga_P = *(_model->append());
|
||||
|
||||
char buff[100];
|
||||
|
||||
sprintf(buff, "%.2f", stats->get_average_inactivity_time());
|
||||
riga_P[_col_inactivity] = Glib::ustring(buff);
|
||||
sprintf(buff, "%.1f", stats->get_average_execution_progress());
|
||||
riga_P[_col_progress] = Glib::ustring(buff) + Glib::ustring("%");
|
||||
sprintf(buff, "%.2f", stats->get_average_turn_around());
|
||||
riga_P[_col_turn] = Glib::ustring(buff);
|
||||
sprintf(buff, "%.2f", stats->get_average_response_time());
|
||||
riga_P[_col_response] = Glib::ustring(buff);
|
||||
sprintf(buff, "%.1f", stats->get_average_efficiency());
|
||||
riga_P[_col_effic] = Glib::ustring(buff) + Glib::ustring("%");
|
||||
sprintf(buff, "%d / %d", stats->get_terminated_processes(), num_procs);
|
||||
riga_P[_col_term_procs] = Glib::ustring(buff);
|
||||
sprintf(buff, "%d / %d", stats->get_terminated_threads(), num_threads);
|
||||
riga_P[_col_term_threads] = Glib::ustring(buff);
|
||||
sprintf(buff, "%.3f", stats->get_average_processes_throughput());
|
||||
riga_P[_col_through_procs] = Glib::ustring(buff);
|
||||
sprintf(buff, "%.3f", stats->get_average_threads_throughput());
|
||||
riga_P[_col_through_threads]= Glib::ustring(buff);
|
||||
|
||||
expand_all();
|
||||
/*
|
||||
const SimulationStatistics* sim = Statistics::get_instance().get_simulation_statistics();
|
||||
cout << "\n\n****** SIMULATION STATISTICS *******\n AVG_RESP= "
|
||||
<< sim->get_average_response_time() << " AVG_INACT= " << sim->get_average_inactivity_time() <<
|
||||
" AVG_EXEC= " << sim->get_average_execution_progress() <<
|
||||
"% AVG_EFFIC= " << sim->get_average_efficiency() <<
|
||||
"% AVG_TURN= " << sim->get_average_turn_around() <<
|
||||
" TERM_PROCS= " << sim->get_terminated_processes() <<
|
||||
" TERM_THRES= " << sim->get_terminated_threads() <<
|
||||
" THRU_PROCS= " << sim->get_average_processes_throughput() <<
|
||||
" THRU_THREA= " << sim->get_average_threads_throughput() << "\n\n";
|
||||
*/
|
||||
}
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
// src/simulation_statistics_widget.hh - Copyright 2005, 2006, University
|
||||
// of Padova, dept. of Pure and Applied
|
||||
// Mathematics
|
||||
//
|
||||
// This file is part of SGPEMv2.
|
||||
//
|
||||
// This is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; either version 2 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// SGPEMv2 is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with SGPEMv2; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
#ifndef SIMULATION_STATISTICS_WIDGET_HH
|
||||
#define SIMULATION_STATISTICS_WIDGET_HH 1
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <sgpemv2/history_observer.hh>
|
||||
|
||||
#include <gtkmm/treeview.h>
|
||||
#include <gtkmm/treestore.h>
|
||||
|
||||
namespace sgpem
|
||||
{
|
||||
|
||||
|
||||
class TabularSimulationStatisticsWidget : public HistoryObserver, public Gtk::TreeView
|
||||
{
|
||||
public:
|
||||
TabularSimulationStatisticsWidget();
|
||||
virtual ~TabularSimulationStatisticsWidget();
|
||||
|
||||
void update(const History& changed_history);
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
Glib::RefPtr<Gtk::TreeStore> _model; //treeview stuffs
|
||||
Gtk::TreeModelColumnRecord _columns;
|
||||
|
||||
Gtk::TreeModelColumn<Glib::ustring> _col_inactivity; //all columns
|
||||
Gtk::TreeModelColumn<Glib::ustring> _col_progress;
|
||||
Gtk::TreeModelColumn<Glib::ustring> _col_turn;
|
||||
Gtk::TreeModelColumn<Glib::ustring> _col_response;
|
||||
Gtk::TreeModelColumn<Glib::ustring> _col_effic;
|
||||
Gtk::TreeModelColumn<Glib::ustring> _col_term_procs;
|
||||
Gtk::TreeModelColumn<Glib::ustring> _col_term_threads;
|
||||
Gtk::TreeModelColumn<Glib::ustring> _col_through_procs;
|
||||
Gtk::TreeModelColumn<Glib::ustring> _col_through_threads;
|
||||
|
||||
};
|
||||
|
||||
} //~ namespace sgpem
|
||||
|
||||
|
||||
#endif
|
|
@ -19,17 +19,44 @@
|
|||
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
#include "statistics_container_window.hh"
|
||||
#include <glibmm/ustring.h>
|
||||
|
||||
#include <iostream>
|
||||
|
||||
|
||||
using namespace Gtk;
|
||||
using Gnome::Glade::Xml;
|
||||
using namespace sgpem;
|
||||
using namespace std;
|
||||
|
||||
StatisticsContainerWindow::StatisticsContainerWindow()
|
||||
StatisticsContainerWindow::StatisticsContainerWindow(const std::string& gladefile)
|
||||
: _refXml(Xml::create(gladefile))
|
||||
{
|
||||
_refXml->get_widget("StatisticsWindow", _main_win);
|
||||
// This just sets the title of our new window.
|
||||
set_title(_("Simulation Statistics"));
|
||||
set_type_hint(Gdk::WINDOW_TYPE_HINT_UTILITY);
|
||||
_main_win->set_title(_("Simulation Statistics"));
|
||||
|
||||
|
||||
|
||||
ScrolledWindow *scroll1, *scroll2;
|
||||
_refXml->get_widget("SchedulableStatisticsScroll", scroll1);
|
||||
_tab_sched = manage(new TabularSchedulableStatisticsWidget());
|
||||
scroll1->add(*_tab_sched);
|
||||
|
||||
_refXml->get_widget("SimulationStatisticsScroll", scroll2);
|
||||
_tab_sim = manage(new TabularSimulationStatisticsWidget());
|
||||
scroll2->add(*_tab_sim);
|
||||
|
||||
|
||||
_main_win->show();
|
||||
|
||||
scroll1->show();
|
||||
scroll2->show();
|
||||
_tab_sched->show();
|
||||
_tab_sim->show();
|
||||
|
||||
_main_win->set_type_hint(Gdk::WINDOW_TYPE_HINT_UTILITY);
|
||||
/*
|
||||
_scrolled_tabular.add(_tabular_schedulables_statistics_widget);
|
||||
add(_scrolled_tabular);
|
||||
_scrolled_tabular.show();
|
||||
|
@ -37,7 +64,7 @@ StatisticsContainerWindow::StatisticsContainerWindow()
|
|||
|
||||
_scrolled_tabular.get_hscrollbar()->property_visible() = true;
|
||||
_scrolled_tabular.get_vscrollbar()->property_visible() = true;
|
||||
|
||||
*/
|
||||
//_scrolled_tabular.get_vscrollbar()->set_visible(true);
|
||||
|
||||
/*cout << "\n\nSIIIIIIIIIIIIIIIIIIIII\n\n";
|
||||
|
@ -51,16 +78,28 @@ StatisticsContainerWindow::StatisticsContainerWindow()
|
|||
StatisticsContainerWindow::~StatisticsContainerWindow()
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
StatisticsContainerWindow::on_size_request(Gtk::Requisition* /* requisition */ )
|
||||
{
|
||||
|
||||
void
|
||||
StatisticsContainerWindow::make_child(Window& w)
|
||||
{
|
||||
_main_win->set_transient_for(w);
|
||||
}
|
||||
|
||||
TabularSchedulableStatisticsWidget&
|
||||
TabularSimulationStatisticsWidget*
|
||||
StatisticsContainerWindow::get_tabular_simulation_statistics_widget()
|
||||
{
|
||||
return _tab_sim;
|
||||
}
|
||||
|
||||
TabularSchedulableStatisticsWidget*
|
||||
StatisticsContainerWindow::get_tabular_schedulables_statistics_widget()
|
||||
{
|
||||
return _tabular_schedulables_statistics_widget;
|
||||
return _tab_sched;
|
||||
}
|
||||
|
||||
Window*
|
||||
StatisticsContainerWindow::get_main_window()
|
||||
{
|
||||
return _main_win;
|
||||
}
|
||||
|
||||
|
|
|
@ -27,28 +27,35 @@
|
|||
#include <gtkmm/window.h>
|
||||
#include <gtkmm/scrolledwindow.h>
|
||||
#include <gtkmm/scrollbar.h>
|
||||
#include <libglademm/xml.h>
|
||||
|
||||
#include <cassert>
|
||||
#include <iostream>
|
||||
|
||||
#include <sgpemv2/simulation.hh>
|
||||
#include "schedulables_statistics_widget.hh"
|
||||
#include "simulation_statistics_widget.hh"
|
||||
|
||||
namespace sgpem {
|
||||
|
||||
|
||||
class StatisticsContainerWindow : public Gtk::Window
|
||||
class StatisticsContainerWindow
|
||||
{
|
||||
public:
|
||||
StatisticsContainerWindow();
|
||||
StatisticsContainerWindow(const std::string& gladefile = GLADEDIR "/statistics-window.glade");
|
||||
virtual ~StatisticsContainerWindow();
|
||||
|
||||
TabularSchedulableStatisticsWidget& get_tabular_schedulables_statistics_widget();
|
||||
void make_child(Gtk::Window&);
|
||||
TabularSchedulableStatisticsWidget* get_tabular_schedulables_statistics_widget();
|
||||
TabularSimulationStatisticsWidget* get_tabular_simulation_statistics_widget();
|
||||
Gtk::Window* get_main_window();
|
||||
protected:
|
||||
|
||||
virtual void on_size_request (Gtk::Requisition* requisition);
|
||||
TabularSchedulableStatisticsWidget _tabular_schedulables_statistics_widget;
|
||||
Gtk::ScrolledWindow _scrolled_tabular;
|
||||
Glib::RefPtr<Gnome::Glade::Xml> _refXml;
|
||||
Gtk::Window* _main_win;
|
||||
TabularSchedulableStatisticsWidget* _tab_sched;
|
||||
TabularSimulationStatisticsWidget* _tab_sim;
|
||||
|
||||
};
|
||||
|
||||
} // ~ namespace sgpem
|
||||
|
|
Loading…
Reference in New Issue