If queue_draw is "frozen", we simply accumulate drawing requests in a (union) rectangle, and when finally "thawed" the canvas submits a single redraw request for the entire accumulated rect. Although in theory this is all that GTK/GDK does for draw requests, callgrind reveals significant costs associated with the actual calltree for GtkWidget::queue_draw_area(). One potential cost is that GDK also maintains a list of invalidated rectangles in addition to the union, and for MIDI regions with thousands of notes, this can represent real overhead. This approach dispenses with the rect list, since our Canvas drawing model only uses the union rectangle anyway. |
||
---|---|---|
.. | ||
benchmark | ||
canvas | ||
doc | ||
MSVCcanvas | ||
test | ||
arc.cc | ||
arrow.cc | ||
box.cc | ||
build-and-run-benchmark.sh | ||
build-and-run-manual-test.sh | ||
build-and-run-tests.sh | ||
canvas.cc | ||
circle.cc | ||
container.cc | ||
ct | ||
curve.cc | ||
debug.cc | ||
fill.cc | ||
flag.cc | ||
framed_curve.cc | ||
grid.cc | ||
image.cc | ||
item.cc | ||
line_set.cc | ||
line.cc | ||
lookup_table.cc | ||
meter.cc | ||
note.cc | ||
Notes | ||
outline.cc | ||
pixbuf.cc | ||
poly_item.cc | ||
poly_line.cc | ||
polygon.cc | ||
rectangle.cc | ||
root_group.cc | ||
ruler.cc | ||
run-manual-test.sh | ||
run-tests.sh | ||
scroll_group.cc | ||
stateful_image.cc | ||
step_button.cc | ||
table.cc | ||
text.cc | ||
tracking_text.cc | ||
types.cc | ||
utils.cc | ||
widget.cc | ||
wscript | ||
xfade_curve.cc |