!7 sclass Screenshot { LongRange timeTaken; // (timestamp start shooting, timestamp end shooting) long processingDone; // timestamp int screenNr; Rect screenRect; // can be null (=whole screen) BufferedImage image; IntegralImage integralImage; } cmodule StreamOfScreenshots > DynFlexibleRateTimerAndEnabled { transient Screenshot lastScreenshot; bool makeIntegralImage = true; start { timer.setRunnableAndStart(r takeScreenshot); } void takeScreenshot enter { if (!enabled) ret with lastScreenshot = null; new Screenshot ss; long timeTaken = now(); ss.image = shootScreen2(); ss.timeTaken = longRange(timeTaken, now()); if (makeIntegralImage) ss.integralImage = IntegralImage(ss.image); ss.processingDone = now(); print("Screenshot taken in " + ss.timeTaken.length() + " ms, integral image made in " + (ss.processingDone-ss.timeTaken.end) + " ms"); lastScreenshot = ss; vmBus_send newScreenshotInStream(this, ss); } }