[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
Wed May 18 21:59:20 UTC 2016
Thanks for the clarification, John! That makes sense :)
Fabio
--
On Tue, May 17, 2016 at 11:15 AM John McIntosh <
johnmci at smalltalkconsulting.com> wrote:
>
> Over in sqSqueakScreenAndWindow
> We managed the clip area and the timer for flushing the screen based on
> the incoming draw requests, and morphic sync. These are the raw abstraction
> points for drawing.
>
> In a flush or force update we would then call the subclass view
> implementation to do the draw, in this case the open/gl logic.
>
> In that logic we checked to see if we were headless and avoided the actual
> draw.
>
> The new logic abstracts the sqSqueakScreenAndWindow further into a new
> superclass where we do nothing for the VM screen calls except say we are
> supporting a 10x10 32bit view. So the actual implementation for draw &
> flush is nothing thus avoiding the clip area management (trivial). But we
> also avoid setup of a timer which is scheduled on the run loop and it's
> management. Although non-trivial I think the overhead couldn't really be
> measured either.
>
>
>
> Sent from my iPhone
>
> On May 17, 2016, at 12:53 AM, Fabio Niephaus <lists at fniephaus.com> wrote:
>
> 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/20160518/25fe2df5/attachment-0001.htm
More information about the Vm-dev
mailing list