tdevdraw: cocoa metal screen adds a delayed update (#270) - plan9port - [fork] … | |
git clone git://src.adamsgaard.dk/plan9port | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit e995a0c101863688d5f14649ae3de45a7c43789c | |
parent d4e16c838ab2cccd97ad6e24fc290239666eaaac | |
Author: Xiao-Yong <[email protected]> | |
Date: Wed, 19 Jun 2019 13:32:57 -0500 | |
devdraw: cocoa metal screen adds a delayed update (#270) | |
The immediate display of the screen sometimes miss the update from | |
tthe CPU side memory. No obvious synchronization mechanism is available. | |
In order to make sure the screen updates properly, we set needsDisplay | |
again after 16ms delay to ensure a second screen update. | |
Diffstat: | |
M src/cmd/devdraw/cocoa-screen-metal… | 7 +++++++ | |
1 file changed, 7 insertions(+), 0 deletions(-) | |
--- | |
diff --git a/src/cmd/devdraw/cocoa-screen-metal.m b/src/cmd/devdraw/cocoa-scree… | |
t@@ -212,12 +212,19 @@ threadmain(int argc, char **argv) | |
+ (void)callsetNeedsDisplayInRect:(NSValue *)v | |
{ | |
NSRect r; | |
+ dispatch_time_t time; | |
r = [v rectValue]; | |
LOG(@"callsetNeedsDisplayInRect(%g, %g, %g, %g)", r.origin.x, r.origin… | |
r = [win convertRectFromBacking:r]; | |
LOG(@"setNeedsDisplayInRect(%g, %g, %g, %g)", r.origin.x, r.origin.y, … | |
[layer setNeedsDisplayInRect:r]; | |
+ | |
+ time = dispatch_time(DISPATCH_TIME_NOW, 16 * NSEC_PER_MSEC); | |
+ dispatch_after(time, dispatch_get_main_queue(), ^(void){ | |
+ [layer setNeedsDisplayInRect:r]; | |
+ }); | |
+ | |
[myContent enlargeLastInputRect:r]; | |
} | |