- fixed redrawing bug
git-svn-id: svn://svn.gna.org/svn/sgpemv2/trunk@1014 3ecf2c5c-341e-0410-92b4-d18e462d057c
This commit is contained in:
parent
3e35ed278f
commit
51ce976d65
|
@ -94,6 +94,8 @@ SimulationWidget::SimulationWidget(Simulation& simulation)
|
||||||
_running_process_gradient = 0;
|
_running_process_gradient = 0;
|
||||||
_blocked_process_gradient = 0;
|
_blocked_process_gradient = 0;
|
||||||
|
|
||||||
|
_partial_redraw = false;
|
||||||
|
_last_drawn = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -111,14 +113,18 @@ SimulationWidget::update(const Simulation& /* changed_simulation */ )
|
||||||
{
|
{
|
||||||
// Force redraw
|
// Force redraw
|
||||||
//count_elements();
|
//count_elements();
|
||||||
resize_redraw();
|
// nedd redraw only last
|
||||||
|
_partial_redraw = true;
|
||||||
|
// resize_redraw();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
SimulationWidget::update(const History& /* changed_history */ )
|
SimulationWidget::update(const History& /* changed_history */ )
|
||||||
{
|
{
|
||||||
// Force redraw
|
// Force redraw
|
||||||
//count_elements();
|
_last_drawn = 0;
|
||||||
|
_partial_redraw = false;
|
||||||
|
count_elements();
|
||||||
resize_redraw();
|
resize_redraw();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -143,35 +149,17 @@ void
|
||||||
SimulationWidget::draw_widget(cairo_t* ctx)
|
SimulationWidget::draw_widget(cairo_t* ctx)
|
||||||
{
|
{
|
||||||
if(_n_proc<1) // nothing to draw
|
if(_n_proc<1) // nothing to draw
|
||||||
|
{
|
||||||
|
cairo_move_to(ctx, 10.0, 10.0);
|
||||||
|
cairo_show_text(ctx, "Simulation Widget: nothing to draw...");
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
draw_names(ctx);
|
draw_names(ctx);
|
||||||
draw_grid(ctx);
|
draw_grid(ctx);
|
||||||
draw_bars(ctx);
|
draw_bars(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
// top margin in y units
|
|
||||||
_yu_top_margin = 1.0;
|
|
||||||
|
|
||||||
// left margin in x units
|
|
||||||
_xu_left_margin = 1.0;
|
|
||||||
|
|
||||||
// left margin in x units
|
|
||||||
_xu_left_graph_margin = 11.0;
|
|
||||||
|
|
||||||
// bar spacing in y units
|
|
||||||
_yu_process_bar_spacing = 1.0;
|
|
||||||
|
|
||||||
// process bar height in y units
|
|
||||||
_yu_process_bar_height = 1.0;
|
|
||||||
|
|
||||||
// thread bar spacing in y units
|
|
||||||
_yu_thread_bar_spacing = 0.2;
|
|
||||||
|
|
||||||
// thread bar height in y units
|
|
||||||
_yu_thread_bar_height = 0.6;
|
|
||||||
*/
|
|
||||||
|
|
||||||
void
|
void
|
||||||
SimulationWidget::draw_names(cairo_t* ctx)
|
SimulationWidget::draw_names(cairo_t* ctx)
|
||||||
|
@ -276,9 +264,13 @@ SimulationWidget::draw_grid(cairo_t* ctx)
|
||||||
// - draw left VER line
|
// - draw left VER line
|
||||||
cairo_move_to(ctx, left_graph_margin, top_margin);
|
cairo_move_to(ctx, left_graph_margin, top_margin);
|
||||||
cairo_rel_line_to(ctx, 0, graph_height);
|
cairo_rel_line_to(ctx, 0, graph_height);
|
||||||
// - draw right VER line
|
|
||||||
cairo_move_to(ctx, left_graph_margin + graph_width, top_margin);
|
if(_simulation->get_state()==Simulation::state_stopped)
|
||||||
cairo_rel_line_to(ctx, 0, graph_height);
|
{
|
||||||
|
// - draw right VER line
|
||||||
|
cairo_move_to(ctx, left_graph_margin + graph_width, top_margin);
|
||||||
|
cairo_rel_line_to(ctx, 0, graph_height);
|
||||||
|
}
|
||||||
cairo_stroke(ctx);
|
cairo_stroke(ctx);
|
||||||
|
|
||||||
// draw and write time line
|
// draw and write time line
|
||||||
|
@ -323,13 +315,24 @@ SimulationWidget::draw_bars(cairo_t* ctx)
|
||||||
const double thread_bar_height = _yu_thread_bar_height * _y_unit;
|
const double thread_bar_height = _yu_thread_bar_height * _y_unit;
|
||||||
const double process_height = (_yu_process_bar_height + 2*_yu_process_bar_spacing) * _y_unit;
|
const double process_height = (_yu_process_bar_height + 2*_yu_process_bar_spacing) * _y_unit;
|
||||||
const double thread_height = (2.0*_yu_thread_bar_spacing+_yu_thread_bar_height) * _y_unit;
|
const double thread_height = (2.0*_yu_thread_bar_spacing+_yu_thread_bar_height) * _y_unit;
|
||||||
|
unsigned int from_time;
|
||||||
// const double graph_width = (2.0 + hist_front) * _x_unit;
|
// const double graph_width = (2.0 + hist_front) * _x_unit;
|
||||||
// const double graph_height = _n_proc * process_height + (_show_threads?_n_thr:0) * thread_height;
|
// const double graph_height = _n_proc * process_height + (_show_threads?_n_thr:0) * thread_height;
|
||||||
|
|
||||||
|
|
||||||
make_gradients();
|
make_gradients();
|
||||||
|
|
||||||
for(unsigned int t=1; t<=hist_front; t++)
|
if(_partial_redraw && _last_drawn>0)
|
||||||
|
{
|
||||||
|
from_time = _last_drawn;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
from_time = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::cout << " SimulationWidget::draw_bars from:" << from_time << " to:" << hist_front << std::endl;
|
||||||
|
for(unsigned int t=from_time; t<=hist_front; t++)
|
||||||
{
|
{
|
||||||
// draw schedulables bars
|
// draw schedulables bars
|
||||||
double xpos = left_graph_margin + t * _x_unit; // left start of first process
|
double xpos = left_graph_margin + t * _x_unit; // left start of first process
|
||||||
|
@ -361,7 +364,9 @@ SimulationWidget::draw_bars(cairo_t* ctx)
|
||||||
} // ~ if(_show_threads)
|
} // ~ if(_show_threads)
|
||||||
ypos += process_bar_spacing; // white row after bar
|
ypos += process_bar_spacing; // white row after bar
|
||||||
} // ~ while(proc_iter!=processes.end())
|
} // ~ while(proc_iter!=processes.end())
|
||||||
} // ~ for(int t=0; t<=hist_size; t++)
|
} // ~ for(int t=0; t<=hist_front; t++)
|
||||||
|
_last_drawn = hist_front;
|
||||||
|
_partial_redraw = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -646,7 +651,7 @@ SimulationWidget::calc_drawing_size(cairo_t* ctx, size_t& width, size_t& height)
|
||||||
_y_unit=extents.height;
|
_y_unit=extents.height;
|
||||||
|
|
||||||
// left margin, labels, graph
|
// left margin, labels, graph
|
||||||
width = (size_t)((_xu_left_graph_margin + _xu_left_graph_margin + 3.0 + pos) * _x_unit);
|
width = (size_t)((_xu_left_graph_margin + 3.0 + pos) * _x_unit);
|
||||||
// top margin,
|
// top margin,
|
||||||
height = (size_t)((_yu_top_margin + (_yu_process_bar_spacing*2.0+_yu_process_bar_height) * _n_proc + 3.0) * _y_unit);
|
height = (size_t)((_yu_top_margin + (_yu_process_bar_spacing*2.0+_yu_process_bar_height) * _n_proc + 3.0) * _y_unit);
|
||||||
if(_show_threads)
|
if(_show_threads)
|
||||||
|
|
|
@ -122,6 +122,19 @@ namespace sgpem
|
||||||
cairo_pattern_t* _ready_process_gradient;
|
cairo_pattern_t* _ready_process_gradient;
|
||||||
cairo_pattern_t* _running_process_gradient;
|
cairo_pattern_t* _running_process_gradient;
|
||||||
cairo_pattern_t* _blocked_process_gradient;
|
cairo_pattern_t* _blocked_process_gradient;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to redraw partially the widget.
|
||||||
|
* If the redraw come from Simulation update this flag is true
|
||||||
|
* and are redrawn only the last time tics.
|
||||||
|
* If the redraw is needed by History update or resize this flag is false.
|
||||||
|
*/
|
||||||
|
bool _partial_redraw;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Last time tic drawn.
|
||||||
|
*/
|
||||||
|
unsigned int _last_drawn;
|
||||||
};
|
};
|
||||||
|
|
||||||
} //~ namespace sgpem
|
} //~ namespace sgpem
|
||||||
|
|
Loading…
Reference in New Issue