- modified cairo_widget, simulation_widget

- updated test-cairo_widget
- improved test-simulation_widget



git-svn-id: svn://svn.gna.org/svn/sgpemv2/trunk@924 3ecf2c5c-341e-0410-92b4-d18e462d057c
This commit is contained in:
paolo 2006-08-21 13:02:04 +00:00
parent 32db4228bb
commit 2a408b82af
6 changed files with 364 additions and 129 deletions

View file

@ -60,7 +60,7 @@ namespace sgpem
void draw_widget(cairo_t* ctx);
void change_scaling_mode();
virtual void calc_drawing_size(size_t& width, size_t& height) const;
virtual void calc_drawing_size(cairo_t* ctx, size_t& width, size_t& height);
// void calc_size(const History& history, size_t& width, size_t& height) const;
private:
int _desired_w;
@ -103,18 +103,18 @@ TestWidget::draw_widget(cairo_t* ctx)
// NOTE: just to try
CairoElements ce(ctx);
Rectangle area(10, 10, _desired_w-10, _desired_h/2);
Rectangle area( 10, 10, _desired_w-10, _desired_h/2 );
ce.draw_container(area);
Color red(1, 0, 0 );
Point center1(_desired_w/4, _desired_h/4*3);
Point center1(_desired_w/4, _desired_h/4*3 );
ce.draw_3dsphere(center1, _desired_w/10, red);
Color yellow(1, 1, 0);
Point center2(_desired_w/4*2, _desired_h/4*3);
ce.draw_3dsphere(center2, _desired_w/10, yellow);
Color green(0, 1, 0);
Point center3(_desired_w/4*3, _desired_h/4*3);
Color green(0, 1, 0 );
Point center3(_desired_w/4*3, _desired_h/4*3 );
ce.draw_3dsphere(center3, _desired_w/10, green);
// show text
@ -153,7 +153,7 @@ TestWidget::draw_widget(cairo_t* ctx)
void
TestWidget::calc_drawing_size(size_t& width, size_t& height) const
TestWidget::calc_drawing_size(cairo_t* ctx, size_t& width, size_t& height)
{
// FIXME: write me
// some magic here!
@ -183,6 +183,7 @@ TestWidget::change_scaling_mode()
break;
}
redraw();
// resize_redraw();
}

View file

@ -24,21 +24,20 @@
#include "config.h"
#include "gettext.h"
#include <glibmm/main.h>
#include <glibmm/module.h>
#include <glibmm/ustring.h>
#include <glibmm/thread.h>
#include <gtkmm/box.h>
#include <gtkmm/button.h>
#include <gtkmm/checkbutton.h>
#include <gtkmm/main.h>
#include <gtkmm/scrolledwindow.h>
#include <gtkmm/window.h>
#include <cassert>
#include <iostream>
/*
#include "backend/concrete_environment.hh"
#include "backend/concrete_history.hh"
*/
#include "backend/cpu_policies_gatekeeper.hh"
#include "backend/cpu_policy.hh"
#include "backend/cpu_policy_manager.hh"
@ -52,20 +51,18 @@
#include "cairo_elements.hh"
#include "cairo_widget.hh"
#include "simulation_widget.hh"
// #include "backend/concrete_history.hh"
using namespace sgpem;
using namespace std;
using Glib::ustring;
// ------------------------------------------------------
//
// PRRPolicy class
//
// ------------------------------------------------------
/** An hard-coded Priority Round Robin policy
* it adds a new constructor taking the quantum size (time slice)*/
@ -102,16 +99,6 @@ public:
ReadyQueue* sl = Scheduler::get_instance().get_ready_queue();
if(sl && sl->size()>=2)
{
/*
cout << " sort_queue time: " << Simulation::get_instance().get_front() << endl;
for (int i = 0; i < sl->size(); i++)
{
cout << " i: " << i << " name: " << sl->get_item_at(i).get_name()
<< " pr: " << sl->get_item_at(i).get_current_priority()
<< " last: " << sl->get_item_at(i).get_last_acquisition()
<< endl;
}
*/
for (int i = 0; i < sl->size(); i++)
{
for (int j = 0; j < sl->size() - 1; j++)
@ -125,25 +112,15 @@ public:
}
}
/*
cout << "after" << endl;
for (int i = 0; i < sl->size(); i++)
{
cout << " i: " << i << " name: " << sl->get_item_at(i).get_name()
<< " pr: " << sl->get_item_at(i).get_current_priority()
<< " last: " << sl->get_item_at(i).get_last_acquisition()
<< endl;
}
cout << endl;
*/
}
}
/*
int get_id() const
{
return 42;
}
*/
virtual Glib::ustring get_description() const
{
@ -178,18 +155,17 @@ public:
protected:
PolicyParameters _parameters;
int _id;
// int _id;
int _quantum;
private:
static PRRPolicy* _instance;
};
PRRPolicy* PRRPolicy::_instance=0;
// ------------------------------------------------------
//
// DummyPolicyManager class
@ -246,25 +222,13 @@ protected:
// insert some resources, processes, threads, requests, subrequests
void fillHistory(History &hist);
// print entire environment into the passed ostream
void dumpEnvironment(const Environment& env, ostream &os);
Glib::ustring get_schedulable_state_name(Schedulable::state st);
Glib::ustring get_request_state_name(Request::state st);
Glib::ustring get_simulation_state_name(Simulation::state st);
/*
// ------------------------------------------------------
//
// TestWidget class
//
// ------------------------------------------------------
namespace sgpem
{
class TestWidget : public SimulationObserver, public CairoWidget
@ -429,12 +393,14 @@ TestWidget::change_scaling_mode()
}
redraw();
}
*/
// ------------------------------------------------------
//
// MainWindow class
//
// contains and controls the tested widget
//
// ------------------------------------------------------
class MainWindow : public Gtk::Window
{
@ -445,18 +411,27 @@ public:
protected:
virtual void on_button_start_clicked();
virtual void on_button_stop_clicked();
virtual void on_button_pause_clicked();
virtual void on_button_runmode_clicked();
virtual bool on_timer_timeout();
TestWidget _test_widget;
// TestWidget _test_widget;
SimulationWidget _simulation_widget;
Gtk::Button _start_button;
Gtk::Button _stop_button;
Gtk::Button _pause_button;
Gtk::CheckButton _runmode_button;
Gtk::HBox _buttons_box;
Gtk::VBox _main_box;
Gtk::ScrolledWindow _scroller;
Simulation::state _sim_state;
};
MainWindow::MainWindow() : _start_button("Start"), _stop_button("Stop")
MainWindow::MainWindow() : _start_button("Start"), _stop_button("Stop"),
_pause_button("Pause"), _runmode_button("Continue")
{
_sim_state = Simulation::state_stopped;
// This just sets the title of our new window.
set_title("Simulation Widget Test");
add(_main_box);
@ -464,18 +439,43 @@ MainWindow::MainWindow() : _start_button("Start"), _stop_button("Stop")
_start_button.show();
_buttons_box.pack_start(_stop_button);
_stop_button.show();
_buttons_box.pack_start(_pause_button);
_pause_button.show();
_buttons_box.pack_start(_runmode_button);
_runmode_button.set_active(false);
_runmode_button.show();
_main_box.pack_start(_buttons_box, Gtk::PACK_SHRINK);
_buttons_box.show();
// _main_box.pack_start(_test_widget);
// _test_widget.show();
_main_box.pack_start(_simulation_widget);
_scroller.add(_simulation_widget);
_scroller.show();
_main_box.pack_start(_scroller);
_simulation_widget.show();
_main_box.show();
// Simulation::get_instance().attach(_simulation_widget);
/*
_start_button.signal_clicked().connect( sigc::mem_fun(*this, &MainWindow::on_button_start_clicked) );
_stop_button.signal_clicked().connect( sigc::mem_fun(*this, &MainWindow::on_button_stop_clicked) );
_pause_button.signal_clicked().connect( sigc::mem_fun(*this, &MainWindow::on_button_pause_clicked) );
_runmode_button.signal_clicked().connect( sigc::mem_fun(*this, &MainWindow::on_button_runmode_clicked) );
*/
// connect after standard signal handler
_start_button.signal_clicked().connect( sigc::mem_fun(*this, &MainWindow::on_button_start_clicked), true );
_stop_button.signal_clicked().connect( sigc::mem_fun(*this, &MainWindow::on_button_stop_clicked), true );
_pause_button.signal_clicked().connect( sigc::mem_fun(*this, &MainWindow::on_button_pause_clicked), true );
_runmode_button.signal_clicked().connect( sigc::mem_fun(*this, &MainWindow::on_button_runmode_clicked), true );
Glib::signal_timeout().connect(sigc::mem_fun(*this, &MainWindow::on_timer_timeout), 1000);
//is equivalent to:
/*
const Glib::RefPtr<Glib::TimeoutSource> timeout_source = Glib::TimeoutSource::create(1000);
timeout_source->connect(sigc::ptr_fun(&timeout_handler));
timeout_source->attach(Glib::MainContext::get_default());
*/
}
MainWindow::~MainWindow()
@ -484,17 +484,89 @@ MainWindow::~MainWindow()
void MainWindow::on_button_start_clicked()
{
Simulation::get_instance().run();
if(_sim_state == Simulation::state_stopped
|| _sim_state == Simulation::state_paused)
{
if(!_runmode_button.get_active())
{
// one step - drive directly simulation
Simulation& simu = Simulation::get_instance();
simu.run();
_sim_state = simu.get_state();
// _simulation_widget.redraw();
}
else
{
_sim_state = Simulation::state_running;
}
}
}
void MainWindow::on_button_stop_clicked()
{
Simulation::get_instance().stop();
_simulation_widget.redraw();
if(_sim_state == Simulation::state_running
|| _sim_state == Simulation::state_paused)
{
_sim_state = Simulation::state_stopped;
Simulation::get_instance().stop();
// _simulation_widget.redraw();
}
}
void MainWindow::on_button_pause_clicked()
{
if(_sim_state == Simulation::state_running)
{
_sim_state = Simulation::state_paused;
}
else if(_sim_state == Simulation::state_paused)
{
_sim_state = Simulation::state_running;
}
}
void MainWindow::on_button_runmode_clicked()
{
}
bool MainWindow::on_timer_timeout()
{
// std::cout << "Timer sim stat= " << _sim_state << endl;
if(_sim_state == Simulation::state_running)
{
Simulation& simu = Simulation::get_instance();
simu.run();
// _simulation_widget.redraw();
if(simu.get_state()==Simulation::state_stopped)
_sim_state = Simulation::state_stopped;
}
return true;
}
// utility functions...
// insert some resources, processes, threads, requests, subrequests
void fillHistory(History &hist);
// print entire environment into the passed ostream
void dumpEnvironment(const Environment& env, ostream &os);
// return the Schedulable::state readable string
Glib::ustring get_schedulable_state_name(Schedulable::state st);
// return the Request::state readable string
Glib::ustring get_request_state_name(Request::state st);
// return the Simulation::state readable string
Glib::ustring get_simulation_state_name(Simulation::state st);
// ------------------------------------------------------
//
// MainWindow class
//
// ------------------------------------------------------
int
main(int argc, char** argv)
@ -516,24 +588,19 @@ main(int argc, char** argv)
info << "gets history \n";
DummyPolicyManager dummy_manager;
/*
DummyPolicy dummy_policy;
PRRPolicy PRR_Policy;
*/
const std::vector<CPUPolicy*>& policies = dummy_manager.get_avail_policies();
CPUPolicy* pol = policies[0];
info << "policy " << pol->get_name() << endl;
// CPUPoliciesGatekeeper::get_instance().register_manager(&dummy_manager);
fillHistory(hist);
info << "history filled \n";
// CPUPoliciesGatekeeper::get_instance().activate_policy(&hist, pol);
simu.set_policy(pol);
info << "policy activated \n";
simu.set_mode(false);
simu.set_timer(100);
simu.set_timer(0);
info << "simulation set_mode single step\n";
info << "START environment dump \n";
@ -541,11 +608,10 @@ main(int argc, char** argv)
info << "END environment dump \n";
info << "simulation state: " << get_simulation_state_name(simu.get_state()) << endl;
// Gtk::Window win;
MainWindow win;
win.set_border_width(10);
win.resize (700, 200);
win.resize (400, 200);
Gtk::Main::run(win);
return 0;