[Vm-dev] [commit][3718] JMM add logic to support headless as a null windowview object to reduce drawing overhead , fix headless VM support

Fabio Niephaus lists at fniephaus.com
Tue May 17 07:53:34 UTC 2016


Hi John,

Do you have any numbers on how big this overhead is/was? I'm curious :)

Best,
Fabio

-- 

On Sun, May 15, 2016 at 12:43 AM <commits at squeakvm.org> wrote:

>
> Revision: 3718
> Author:   johnmci
> Date:     2016-05-14 15:43:36 -0700 (Sat, 14 May 2016)
> Log Message:
> -----------
> JMM add logic to support headless as a null windowview object to reduce
> drawing overhead, fix headless VM support
>
> Modified Paths:
> --------------
>     branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakEventsAPI.m
>     branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAPI.m
>     branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAndWindow.h
>     branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAndWindow.m
>     branches/Cog/platforms/iOS/vm/OSX/SqueakOSXAppDelegate.h
>     branches/Cog/platforms/iOS/vm/OSX/SqueakOSXAppDelegate.m
>     branches/Cog/platforms/iOS/vm/OSX/SqueakOSXApplication.m
>     branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXApplication.m
>     branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXDropAPI.m
>     branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXOpenGLView.m
>     branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXScreenAndWindow.h
>     branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXScreenAndWindow.m
>
> Added Paths:
> -----------
>     branches/Cog/platforms/iOS/vm/OSX/sqSqueakNullScreenAndWindow.h
>     branches/Cog/platforms/iOS/vm/OSX/sqSqueakNullScreenAndWindow.m
>
> Modified: branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakEventsAPI.m
> ===================================================================
> --- branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakEventsAPI.m
> 2016-05-14 21:02:58 UTC (rev 3717)
> +++ branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakEventsAPI.m
> 2016-05-14 22:43:36 UTC (rev 3718)
> @@ -40,13 +40,13 @@
>  #import "sqSqueakAppDelegate.h"
>  #import "sqSqueakEventsAPI.h"
>  #import "sqSqueakMainApplication+events.h"
> -#import "sqSqueakScreenAndWindow.h"
> +#import "sqSqueakNullScreenAndWindow.h"
>  #import "sqaio.h"
>
>  extern sqSqueakAppDelegate *gDelegateApp;
>  extern struct  VirtualMachine* interpreterProxy;
>  extern BOOL gQuitNowRightNow;
> -extern sqSqueakScreenAndWindow *getMainWindowDelegate();
> +extern sqSqueakNullScreenAndWindow *getMainWindowDelegate();
>
>  void nativeIoProcessEvents(void) {
>
>
> Modified: branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAPI.m
> ===================================================================
> --- branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAPI.m
> 2016-05-14 21:02:58 UTC (rev 3717)
> +++ branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAPI.m
> 2016-05-14 22:43:36 UTC (rev 3718)
> @@ -51,7 +51,7 @@
>  #endif
>
>
> -sqSqueakScreenAndWindow *getMainWindowDelegate() {
> +sqSqueakNullScreenAndWindow *getMainWindowDelegate() {
>  #ifdef BUILD_FOR_OSX
>         return ((__bridge NSWindow *) windowHandleFromIndex(1)).delegate;
>  #else
>
> Modified:
> branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAndWindow.h
> ===================================================================
> ---
> branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAndWindow.h
> 2016-05-14 21:02:58 UTC (rev 3717)
> +++
> branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAndWindow.h
> 2016-05-14 22:43:36 UTC (rev 3718)
> @@ -38,38 +38,12 @@
>  //
>
>  #import <Foundation/Foundation.h>
> -#import "sq.h"
> +#import "sqSqueakNullScreenAndWindow.h"
>
> - at interface sqSqueakScreenAndWindow : NSObject {
> -       sqInt windowIndex;
> + at interface sqSqueakScreenAndWindow : sqSqueakNullScreenAndWindow {
>         NSTimeInterval squeakUIFlushPrimaryDeferNMilliseconds;
>         NSTimeInterval lastFlushTime;
>         NSTimer *blip;
> -       BOOL forceUpdateFlush;
>         BOOL displayIsDirty;
>  }
> -
> -- (sqInt) ioScreenSize;
> -- (sqInt) ioScreenDepth;
> -- (sqInt) ioHasDisplayDepth: (sqInt) depth;
> -- (void)  ioForceDisplayUpdate;
> -- (void)  ioSetFullScreen: (sqInt) fullScreen;
> -- (int)   ioShowDisplayOnWindow: (unsigned char*) dispBitsIndex
> -                                                 width: (int) width
> -                                                height: (int) height
> -                                                 depth: (int) depth
> -                                         affectedL: (int) affectedL
> -                                         affectedR: (int) affectedR
> -                                         affectedT: (int) affectedT
> -                                         affectedB: (int) affectedB
> -                                       windowIndex: (int) windowIndex;
> -- (id) getMainView;
> -- (void) ioForceDisplayUpdateFlush: (NSTimer*)theTimer;
> - at property (nonatomic,assign) sqInt windowIndex;
> - at property (nonatomic,strong) NSTimer *blip;
> - at property (nonatomic,assign) NSTimeInterval
> squeakUIFlushPrimaryDeferNMilliseconds;
> - at property (nonatomic,assign) NSTimeInterval    lastFlushTime;
> - at property (nonatomic,assign) BOOL forceUpdateFlush;
> - at property (nonatomic,assign) BOOL displayIsDirty;
> -
>  @end
>
> Modified:
> branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAndWindow.m
> ===================================================================
> ---
> branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAndWindow.m
> 2016-05-14 21:02:58 UTC (rev 3717)
> +++
> branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAndWindow.m
> 2016-05-14 22:43:36 UTC (rev 3718)
> @@ -61,9 +61,15 @@
>                                                         ) {
>  }
>
> + at interface sqSqueakScreenAndWindow()
> + at property (nonatomic,strong) NSTimer *blip;
> + at property (nonatomic,assign) NSTimeInterval
> squeakUIFlushPrimaryDeferNMilliseconds;
> + at property (nonatomic,assign) NSTimeInterval    lastFlushTime;
> + at property (nonatomic,assign) BOOL displayIsDirty;
> + at end
> +
>  @implementation sqSqueakScreenAndWindow
> - at synthesize windowIndex;
> - at synthesize
> blip,squeakUIFlushPrimaryDeferNMilliseconds,forceUpdateFlush,lastFlushTime,displayIsDirty;
> + at synthesize
> blip,squeakUIFlushPrimaryDeferNMilliseconds,lastFlushTime,displayIsDirty;
>
>  - (instancetype)init {
>      self = [super init];
> @@ -77,13 +83,6 @@
>      return self;
>  }
>
> -- (id) getMainView {
> -       return NULL;
> -}
> -
> -- (void)  ioSetFullScreen: (sqInt) fullScreen {
> -}
> -
>  - (sqInt) ioScreenSize {
>         sqInt w, h;
>
> @@ -100,25 +99,12 @@
>
>  }
>
> -- (sqInt) ioScreenDepth {
> -       return 32;
> -}
> -
> -- (sqInt) ioHasDisplayDepth: (sqInt) depth {
> -       if (depth == 2 || depth ==  4 || depth == 8 || depth == 16 ||
> depth == 32 ||
> -        depth == -2 || depth ==  -4 || depth == -8 || depth == -16 ||
> depth == -32) {
> -               return true;
> -    } else {
> -        return false;
> -    }
> -}
> -
> -- (void) ioForceDisplayUpdateActual {
> -       lastFlushTime = [NSDate timeIntervalSinceReferenceDate];
> -       self.displayIsDirty = NO;
> -       self.forceUpdateFlush = NO;
> +- (void) ioForceDisplayUpdate {
> +    lastFlushTime = [NSDate timeIntervalSinceReferenceDate];
> +    self.displayIsDirty = NO;
> +    self.forceUpdateFlush = NO;
>
> -       [[self getMainView] preDrawThelayers];
> +    [[self getMainView] preDrawThelayers];
>
>      //SQK-24
>      //javier_diaz_r at mac.com iOS VM problems with dragging a morph and
> PasteUpMorph>>flashRects:color:
> @@ -131,10 +117,6 @@
>      }
>  }
>
> -- (void) ioForceDisplayUpdate {
> -       [self ioForceDisplayUpdateActual];
> -}
> -
>  - (int)   ioShowDisplayOnWindowActual: (unsigned char*) dispBitsIndex
>                                                   width: (int) width
>                                                  height: (int) height
>
> Modified: branches/Cog/platforms/iOS/vm/OSX/SqueakOSXAppDelegate.h
> ===================================================================
> --- branches/Cog/platforms/iOS/vm/OSX/SqueakOSXAppDelegate.h    2016-05-14
> 21:02:58 UTC (rev 3717)
> +++ branches/Cog/platforms/iOS/vm/OSX/SqueakOSXAppDelegate.h    2016-05-14
> 22:43:36 UTC (rev 3718)
> @@ -42,7 +42,7 @@
>  #import "sqSqueakOSXOpenGLView.h"
>
>  @class sqSqueakMainApplication;
> - at class sqSqueakOSXScreenAndWindow;
> + at class sqSqueakNullScreenAndWindow;
>
>  @interface SqueakOSXAppDelegate : sqSqueakAppDelegate
> <NSApplicationDelegate> {
>      NSWindow *__weak window;
> @@ -56,6 +56,6 @@
>  @property (nonatomic,weak) IBOutlet sqSqueakOSXOpenGLView *mainView;
>  @property (nonatomic,strong) NSString *possibleImageNameAtLaunchTime;
>  @property (nonatomic,assign) BOOL checkForFileNameOnFirstParm;
> - at property (nonatomic, strong) sqSqueakOSXScreenAndWindow *windowHandler;
> + at property (nonatomic, strong) sqSqueakNullScreenAndWindow *windowHandler;
>
>  @end
>
> Modified: branches/Cog/platforms/iOS/vm/OSX/SqueakOSXAppDelegate.m
> ===================================================================
> --- branches/Cog/platforms/iOS/vm/OSX/SqueakOSXAppDelegate.m    2016-05-14
> 21:02:58 UTC (rev 3717)
> +++ branches/Cog/platforms/iOS/vm/OSX/SqueakOSXAppDelegate.m    2016-05-14
> 22:43:36 UTC (rev 3718)
> @@ -81,13 +81,6 @@
>      @autoreleasepool {
>                 gDelegateApp = self;
>                 self.squeakApplication = [self makeApplicationInstance];
> -               self.windowHandler =
> AUTORELEASEOBJ([[sqSqueakOSXScreenAndWindow alloc] init]);
> -               windowHandler.mainViewOnWindow = self.mainView;
> -               self.mainView.windowLogic = windowHandler;
> -               windowHandler.windowIndex = 1;
> -               [windowHandler.mainViewOnWindow initializeVariables];
> -               self.window.delegate =  windowHandler;
> -               self.window.contentResizeIncrements =
> NSMakeSize(8.0f,8.0f);
>                 [self.squeakApplication setupEventQueue];
>                 [self singleThreadStart];
>  //     [self workerThreadStart];
> @@ -105,7 +98,29 @@
>         return NSTerminateCancel;
>  }
>
> +- (void) initializeTheWindowHandler {
> +    [windowHandler mainViewOnWindow: self.mainView];
> +    self.mainView.windowLogic = windowHandler;
> +    windowHandler.windowIndex = 1;
> +    [windowHandler.getMainViewOnWindow initializeVariables];
> +    self.window.delegate =  windowHandler;
> +    self.window.contentView = self.mainView;
> +}
> +
>  -(void) setupWindow {
> +    extern BOOL gSqueakHeadless;
> +    if (gSqueakHeadless) {
> +        self.windowHandler = AUTORELEASEOBJ([[sqSqueakNullScreenAndWindow
> alloc] init]);
> +        [self initializeTheWindowHandler];
> +        return;
> +    } else {
> +        self.windowHandler = AUTORELEASEOBJ([[sqSqueakOSXScreenAndWindow
> alloc] init]);
> +    }
> +
> +
> +    [self initializeTheWindowHandler];
> +    self.window.contentResizeIncrements = NSMakeSize(8.0f,8.0f);
> +
>      //I setup the window with all the right properties. Some of them are
> depending on image information.
>
>         sqInt width,height;
> @@ -129,59 +144,17 @@
>         [self.window setRepresentedURL: [[self squeakApplication]
> imageNameURL]];
>         [self.window setInitialFirstResponder: [self mainView]];
>         [self.window setShowsResizeIndicator: NO];
> -
> -       extern sqInt getFullScreenFlag(void);
> -#if (SQ_VI_BYTES_PER_WORD == 4)
> -       NSPanel *panel;
> -       if (sizeof(void*) == 8) {
> -               panel= NSGetAlertPanel(@"About this Alpha Version of Cocoa
> Squeak 64/32 bits 5.7b3 (21)",
> -
>                       @"Only use this VM for testing, it lacks mac menu
> integration.",
> -
>                       @"Dismiss",
> -
>                       nil,
> -
>                       nil);
> -       } else {
> -        return;
> -       }
> -#else
> -       NSPanel *panel;
> -       if (sizeof(long) == 8) {
> -               panel= NSGetAlertPanel(@"About this Alpha Version of Cocoa
> Squeak 64/64 bits 5.7b3 (21)",
> -
>  @"Only use this VM for testing, it lacks mac menu integration.",
> -
>  @"Dismiss",
> -
>  nil,
> -
>  nil);
> -       } else {
> -               panel= NSGetAlertPanel(@"About this Alpha Version of Cocoa
> Squeak 32/64 bits 5.7b3 (21)",
> -                                                          @"Only use this
> VM for testing, it lacks mac menu integration.",
> -                                                          @"Dismiss",
> -                                                          nil,
> -                                                          nil);
> -       }
> -#endif
> -
> -/*     NSRect frame= [panel frame];
> -       frame.size.width *= 1.5f;
> -       [panel setFrame: frame display: NO];
> -       [NSApp runModalForWindow: panel];
> -       [panel close];
> -*/
>  }
>
>  -(void) setupMainView {
> -    //Creates and sets the contentView for our window.
> +    extern BOOL gSqueakHeadless;
> +    if (gSqueakHeadless) {
> +        return;
> +    }
> +    //Creates and sets the contentView for our window.
>      //It can right now, I have two implementations to pick (CoreGraphics
> or OpenGL), muy more/different could be added
>      //in the future.
>
> -    NSView *view = AUTORELEASEOBJ([[ContentViewClass alloc]
> initWithFrame:[[self window] frame]]);
> -    self.mainView = (id) view;
> -    [[self window] setContentView: view];
> -
> -    [windowHandler setMainViewOnWindow: (sqSqueakOSXOpenGLView *) view];
> -       [(sqSqueakOSXOpenGLView *) view setWindowLogic: windowHandler];
> -       [windowHandler setWindowIndex: 1];
> -       [[windowHandler mainViewOnWindow] initializeVariables];
> -       [[self window] setDelegate:windowHandler];
> -       [[self window] setContentResizeIncrements:NSMakeSize(8.0f,8.0f)];
>  }
>
>  - (id) createPossibleWindow {
>
> Modified: branches/Cog/platforms/iOS/vm/OSX/SqueakOSXApplication.m
> ===================================================================
> --- branches/Cog/platforms/iOS/vm/OSX/SqueakOSXApplication.m    2016-05-14
> 21:02:58 UTC (rev 3717)
> +++ branches/Cog/platforms/iOS/vm/OSX/SqueakOSXApplication.m    2016-05-14
> 22:43:36 UTC (rev 3718)
> @@ -50,7 +50,7 @@
>                 sqSqueakOSXScreenAndWindow *squeakScreenWindow =
> (sqSqueakOSXScreenAndWindow *) who.delegate;
>                 sqSqueakOSXOpenGLView *view;
>                 if (squeakScreenWindow)
> -                       view = squeakScreenWindow.mainViewOnWindow;
> +                       view = [squeakScreenWindow getMainViewOnWindow];
>                 else
>                         view = [who contentView];
>            [view fakeKeyDownUp: anEvent];
>
> Added: branches/Cog/platforms/iOS/vm/OSX/sqSqueakNullScreenAndWindow.h
> ===================================================================
> --- branches/Cog/platforms/iOS/vm/OSX/sqSqueakNullScreenAndWindow.h
>                      (rev 0)
> +++ branches/Cog/platforms/iOS/vm/OSX/sqSqueakNullScreenAndWindow.h
>  2016-05-14 22:43:36 UTC (rev 3718)
> @@ -0,0 +1,69 @@
> +//
> +//  sqSqueakNullScreenAndWindow.h
> +//  SqueakPureObjc
> +//
> +//  Created by John M McIntosh on 2016-05-14.
> +/*
> + Copyright (c) 2016 Corporate Smalltalk Consulting Ltd. All rights
> reserved.
> + MIT License
> + Permission is hereby granted, free of charge, to any person
> + obtaining a copy of this software and associated documentation
> + files (the "Software"), to deal in the Software without
> + restriction, including without limitation the rights to use,
> + copy, modify, merge, publish, distribute, sublicense, and/or sell
> + copies of the Software, and to permit persons to whom the
> + Software is furnished to do so, subject to the following
> + conditions:
> +
> + The above copyright notice and this permission notice shall be
> + included in all copies or substantial portions of the Software.
> +
> + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
> + OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
> + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
> + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
> + OTHER DEALINGS IN THE SOFTWARE.
> +
> + The end-user documentation included with the redistribution, if any,
> must include the following acknowledgment:
> + "This product includes software developed by Corporate Smalltalk
> Consulting Ltd (http://www.smalltalkconsulting.com)
> + and its contributors", in the same place and form as other third-party
> acknowledgments.
> + Alternately, this acknowledgment may appear in the software itself, in
> the same form and location as other
> + such third-party acknowledgments.
> +
> + */
> +//
> +//
> +
> +#import <Foundation/Foundation.h>
> +#import "sq.h"
> +
> + at interface sqSqueakNullScreenAndWindow : NSObject {
> +    sqInt windowIndex;
> +    BOOL forceUpdateFlush;
> +}
> +
> +- (sqInt) ioScreenSize;
> +- (sqInt) ioScreenDepth;
> +- (sqInt) ioHasDisplayDepth: (sqInt) depth;
> +- (void)  ioForceDisplayUpdate;
> +- (void)  ioSetFullScreen: (sqInt) fullScreen;
> +- (int)   ioShowDisplayOnWindow: (unsigned char*) dispBitsIndex
> +                          width: (int) width
> +                         height: (int) height
> +                          depth: (int) depth
> +                      affectedL: (int) affectedL
> +                      affectedR: (int) affectedR
> +                      affectedT: (int) affectedT
> +                      affectedB: (int) affectedB
> +                    windowIndex: (int) windowIndex;
> +- (id) getMainView;
> +- (void) ioForceDisplayUpdateFlush: (NSTimer*)theTimer;
> +- (id) getMainViewOnWindow;
> +- (void) mainViewOnWindow: (id) aView;
> +
> + at property (nonatomic,assign) sqInt windowIndex;
> + at property (nonatomic,assign) BOOL forceUpdateFlush;
> + at end
>
> Added: branches/Cog/platforms/iOS/vm/OSX/sqSqueakNullScreenAndWindow.m
> ===================================================================
> --- branches/Cog/platforms/iOS/vm/OSX/sqSqueakNullScreenAndWindow.m
>                      (rev 0)
> +++ branches/Cog/platforms/iOS/vm/OSX/sqSqueakNullScreenAndWindow.m
>  2016-05-14 22:43:36 UTC (rev 3718)
> @@ -0,0 +1,103 @@
> +//
> +//  sqSqueakNullScreenAndWindow.m
> +//  SqueakPureObjc
> +//
> +//  Created by John M McIntosh on 2016-05-14.
> +/*
> + Copyright (c) 2016 Corporate Smalltalk Consulting Ltd. All rights
> reserved.
> + MIT License
> + Permission is hereby granted, free of charge, to any person
> + obtaining a copy of this software and associated documentation
> + files (the "Software"), to deal in the Software without
> + restriction, including without limitation the rights to use,
> + copy, modify, merge, publish, distribute, sublicense, and/or sell
> + copies of the Software, and to permit persons to whom the
> + Software is furnished to do so, subject to the following
> + conditions:
> +
> + The above copyright notice and this permission notice shall be
> + included in all copies or substantial portions of the Software.
> +
> + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
> + OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
> + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
> + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
> + OTHER DEALINGS IN THE SOFTWARE.
> +
> + The end-user documentation included with the redistribution, if any,
> must include the following acknowledgment:
> + "This product includes software developed by Corporate Smalltalk
> Consulting Ltd (http://www.smalltalkconsulting.com)
> + and its contributors", in the same place and form as other third-party
> acknowledgments.
> + Alternately, this acknowledgment may appear in the software itself, in
> the same form and location as other
> + such third-party acknowledgments.
> +
> + */
> +
> +//
> +//
> +
> +#import "sqSqueakNullScreenAndWindow.h"
> +
> + at implementation sqSqueakNullScreenAndWindow
> + at synthesize windowIndex,forceUpdateFlush;
> +
> +- (instancetype)init {
> +    self = [super init];
> +    if (self) {
> +    }
> +    return self;
> +}
> +
> +- (id) getMainViewOnWindow {
> +    return NULL;
> +}
> +
> +- (void) mainViewOnWindow: (id) aView {
> +}
> +
> +- (id) getMainView {
> +    return NULL;
> +}
> +
> +- (void)  ioSetFullScreen: (sqInt) fullScreen {
> +}
> +
> +- (sqInt) ioScreenSize {
> +    return (10 << 16) | (10 & 0xFFFF);  /* w is high 16 bits; h is low 16
> bits */
> +}
> +
> +- (sqInt) ioScreenDepth {
> +    return 32;
> +}
> +
> +- (sqInt) ioHasDisplayDepth: (sqInt) depth {
> +    if (depth == 2 || depth ==  4 || depth == 8 || depth == 16 || depth
> == 32 ||
> +        depth == -2 || depth ==  -4 || depth == -8 || depth == -16 ||
> depth == -32) {
> +        return true;
> +    } else {
> +        return false;
> +    }
> +}
> +
> +- (void) ioForceDisplayUpdate {
> +}
> +
> +- (void) ioForceDisplayUpdateFlush: (NSTimer*)theTimer {
> +
> +}
> +
> +- (int)   ioShowDisplayOnWindow: (unsigned char*) dispBitsIndex
> +                          width: (int) width
> +                         height: (int) height
> +                          depth: (int) depth
> +                      affectedL: (int) affectedL
> +                      affectedR: (int) affectedR
> +                      affectedT: (int) affectedT
> +                      affectedB: (int) affectedB
> +                    windowIndex: (int) passedWindowIndex {
> +    return 0;
> +}
> +
> + at end
>
> Modified: branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXApplication.m
> ===================================================================
> --- branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXApplication.m  2016-05-14
> 21:02:58 UTC (rev 3717)
> +++ branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXApplication.m  2016-05-14
> 22:43:36 UTC (rev 3718)
> @@ -104,7 +104,7 @@
>  }
>
>  - (void) doHeadlessSetup {
> -       [super doHeadlessSetup];
> +       //No super call here as we've already set headless from command
> line or info.plist
>         extern BOOL gSqueakHeadless;
>      // Notice that setActivationPolicy: is available in OSX 10.6 and later
>      if ([NSApp respondsToSelector:@selector(setActivationPolicy:)]) {
> @@ -147,7 +147,6 @@
>
>  - (int) parseArgument: (NSString *) argData peek: (char *) peek
>  {
> -
>         if ([argData isEqualToString: @"--"]) {
>                 return 1;
>         }
> @@ -344,41 +343,54 @@
>
>
>  - (void) parseArgs: (NSArray *) args {
> -       commandLineArguments = [args copyWithZone:null];
> -       argsArguments = [[NSMutableArray alloc] initWithCapacity: [args
> count]];
> -
> -       if ([args count] < 2)
> -               return;
> -       //NSLog(@"%@",args);
> -       int i;
> -       BOOL optionsCompleted = NO;
> -       for (i = 1; i < [args count]; i++) {
> -               NSString *argData = args[i];
> -               char *peek = i + 1 >= [args count] ? 0 : (char
> *)[args[i+1] UTF8String];
> -               //printf("argData %s peek %s\n", [argData UTF8String],
> peek ? peek : "NULL");
> -               if ([argData isEqualToString: @"--"]) {
> -                       optionsCompleted = YES;
> -                       continue;
> -               }
> -               if (!optionsCompleted && ![[argData substringToIndex: 1]
> isEqualToString: @"-"]) {
> -                       optionsCompleted = YES;
> -                       //guessing first parameter as image name
> -                       if ([argData compare: @"--"] != NSOrderedSame)
> +    commandLineArguments = [args copyWithZone:null];
> +    argsArguments = [[NSMutableArray alloc] initWithCapacity: [args
> count]];
> +
> +    if ([args count] < 2)
> +        return;
> +    NSMutableArray *revisedArgs = AUTORELEASEOBJ([args
> mutableCopyWithZone: NULL]);
> +    [revisedArgs removeObjectAtIndex:0];
> +
> +    NSUInteger i,result;
> +    BOOL optionsCompleted = NO;
> +    for (i=0; i<[revisedArgs count]; i++) {
> +        NSString *argData = revisedArgs[i];
> +
> +        NSString *peek = (i == ([revisedArgs count] - 1)) ? @"" :
> revisedArgs[i+1];
> +
> +        if ([argData isEqualToString: @"-NSDocumentRevisionsDebugMode"]) {
> +            //This is an Xcode debug option, skip it for us
> +            i++;
> +            continue;
> +        }
> +        if ([argData compare: @"--"] == NSOrderedSame) {
> +            optionsCompleted = YES;
> +            continue;
> +        }
> +        if (!optionsCompleted && ![[argData substringToIndex: 1]
> isEqualToString: @"-"]) {
> +            optionsCompleted = YES;
> +
> +            //guessing first parameter as image name
> +            if ([argData compare: @"--"] != NSOrderedSame) {
>                  [self setImageNamePathIfItWasReadable:argData];
> -                       continue;
> -               }
> -               if (optionsCompleted)
> -                       [self.argsArguments addObject: argData];
> -               else {
> -                       int result = [self parseArgument: argData peek:
> peek];
> -                       if (result <= 0) {      /* option not recognised */
> -                               fprintf(stderr, "unknown option: %s\n",
> [argData UTF8String]);
> -                               [self usage];
> -                               exit(1);
> -                       }
> -                       i += result - 1;
> -               }
> -       }
> +            } else {
> +                continue;
> +            }
> +        }
> +        if (optionsCompleted) {
> +            [self.argsArguments addObject: argData];
> +        } else {
> +            result = [self parseArgument: argData peek: peek.UTF8String];
> +            if (result == 0)                   /* option not recognised
> */ {
> +                fprintf(stderr, "unknown option: %s\n", [argData
> UTF8String]);
> +                [self usage];
> +                exit(1);
> +            }
> +            if (result == 2)
> +                i++;
> +        }
> +
> +    }
>  }
>
>  - (long long) strtobkm: (const char *) str {
>
> Modified: branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXDropAPI.m
> ===================================================================
> --- branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXDropAPI.m      2016-05-14
> 21:02:58 UTC (rev 3717)
> +++ branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXDropAPI.m      2016-05-14
> 22:43:36 UTC (rev 3718)
> @@ -53,7 +53,7 @@
>
>  char* dropRequestFileName(sqInt dropIndex) {
>         /* return name of file or NULL if error */
> -       sqSqueakOSXOpenGLView *view =
> ((sqSqueakOSXScreenAndWindow*)((__bridge NSWindow
> *)windowHandleFromIndex(1)).delegate).mainViewOnWindow;
> +       sqSqueakOSXOpenGLView *view =
> [((sqSqueakOSXScreenAndWindow*)((__bridge NSWindow
> *)windowHandleFromIndex(1)).delegate) getMainViewOnWindow];
>         NSString *fileNameString = [view dragFileNameStringAtIndex:
> dropIndex];
>         return (char *) [fileNameString UTF8String];
>  }
>
> Modified: branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXOpenGLView.m
> ===================================================================
> --- branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXOpenGLView.m   2016-05-14
> 21:02:58 UTC (rev 3717)
> +++ branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXOpenGLView.m   2016-05-14
> 22:43:36 UTC (rev 3718)
> @@ -175,12 +175,6 @@
>  }
>
>  - (void) drawThelayers {
> -    extern BOOL gSqueakHeadless;
> -       if (gSqueakHeadless) {
> -        firstDrawCompleted = YES;
> -        return;
> -    }
> -
>      if (syncNeeded) {
>                 [self drawRect: NSRectFromCGRect(clippy)];
>                 syncNeeded = NO;
>
> Modified: branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXScreenAndWindow.h
> ===================================================================
> --- branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXScreenAndWindow.h
> 2016-05-14 21:02:58 UTC (rev 3717)
> +++ branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXScreenAndWindow.h
> 2016-05-14 22:43:36 UTC (rev 3718)
> @@ -43,6 +43,8 @@
>  @interface sqSqueakOSXScreenAndWindow : sqSqueakScreenAndWindow
> <NSWindowDelegate>{
>      sqSqueakOSXOpenGLView      *mainViewOnWindow;
>  }
> - at property (nonatomic,strong) sqSqueakOSXOpenGLView *mainViewOnWindow;
>
> +- (sqSqueakOSXOpenGLView *) getMainViewOnWindow;
> +- (void) mainViewOnWindow: (sqSqueakOSXOpenGLView *) aView;
> +
>  @end
>
> Modified: branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXScreenAndWindow.m
> ===================================================================
> --- branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXScreenAndWindow.m
> 2016-05-14 21:02:58 UTC (rev 3717)
> +++ branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXScreenAndWindow.m
> 2016-05-14 22:43:36 UTC (rev 3718)
> @@ -45,6 +45,10 @@
>
>  extern SqueakOSXAppDelegate *gDelegateApp;
>
> + at interface sqSqueakOSXScreenAndWindow()
> +    @property (nonatomic,strong) sqSqueakOSXOpenGLView *mainViewOnWindow;
> + at end
> +
>  @implementation sqSqueakOSXScreenAndWindow
>  @synthesize mainViewOnWindow;
>
> @@ -52,6 +56,14 @@
>         return self.mainViewOnWindow;
>  }
>
> +- (void) mainViewOnWindow: (id) aView {
> +    self.mainViewOnWindow = aView;
> +}
> +
> +- (sqSqueakOSXOpenGLView *) getMainViewOnWindow {
> +    return self.mainViewOnWindow;
> +}
> +
>  - (void) dealloc {
>      RELEASEOBJ(mainViewOnWindow);
>      SUPERDEALLOC
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20160517/abf4aae5/attachment-0001.htm


More information about the Vm-dev mailing list