It is very weird but when I add a print()
statement to your code the GC kicks in (at least in Dartium)
int i = 0;
void draw(num _) {
var context = m_canvas.context2D;
context.clearRect(0, 0, m_canvas.width, m_canvas.height);
var imageData = context.getImageData(0, 0, m_canvas.width, m_canvas.height);
print(i++);
requestRedraw();
}