URI:
       tdevdraw: cocoa metal screen adds a delayed update (#270) - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit e995a0c101863688d5f14649ae3de45a7c43789c
   DIR parent d4e16c838ab2cccd97ad6e24fc290239666eaaac
  HTML Author: Xiao-Yong <xjin@anl.gov>
       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(-)
       ---
   DIR diff --git a/src/cmd/devdraw/cocoa-screen-metal.m b/src/cmd/devdraw/cocoa-screen-metal.m
       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.y, r.size.width, r.size.height);
                r = [win convertRectFromBacking:r];
                LOG(@"setNeedsDisplayInRect(%g, %g, %g, %g)", r.origin.x, r.origin.y, r.size.width, r.size.height);
                [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];
        }