[OS X]Window Server sehr hohe last.
Übersicht

FWeinbehemals "ich"Betreff: [OS X]Window Server sehr hohe last. |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich habe ein komisches Verhalten des WindowServers beobachtet, wenn ich ein Programm mithilfe der MaxGUI schreibe, dann kommt es zu einer sehr hohen last.
Hier der Code: BlitzMax: [AUSKLAPPEN] SuperStrict Wenn das ganze ohne die MaxGUI gemacht wird läuft alles OK. BlitzMax: [AUSKLAPPEN] Graphics 800,600,0 Ich denke mal, das es daran liegt, das bei jedem Flip irgendwie das komplette Fenster erneuert wird. Ich weiß aber leider nicht wie ich das beheben könnte. Wäre dankbar für jede Hilfe. MfG ich |
||
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du solltest nur repainten lassen wenn ein Anlass dafür vorliegt.
Siehe dazu unter EVENTS (EVENT_GADGETPAINT). |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
FWeinbehemals "ich" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Doch leider ist das nicht möglich, da auf dem Canvas ein Spiel laufen soll, also müsste dies schon wirklich 60 mal die Sekunde aktualisiert werden.
In dem mit Graphics erzeugen Fenster ist das ja auch möglich. MfG ich |
||
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs |
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der App-Aufbau so ist nicht ideal. So zeichnest du nach jedem Event, das ankommt. Nötig wäre das Neuzeichnen allerdings nur 60x die Sekunde.
BlitzMax: [AUSKLAPPEN] SuperStrict Oh - und Flip 0 nicht vergessen ![]() mfG Holzchopf |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: SetGraphicsDriver(GLMax2DDriver())
Windows + OpenGL = evtl. suboptimal. Dein Graphics-Programm stellt keinen Graphiktreiber ein, deshalb wird DX9 genommen, was auf Windows evtl. schneller ist. So wirst du natürlich kein realistisches Ergebnis erhalten. ZEVS |
||
FWeinbehemals "ich" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@ZEVS
Da auf dem Mac kein DX9 zur Verfügung steht, macht das keinen Unterschied. @Holzchopf Auch diese Änderung lässt den WindowServer immer noch bei 10-15% CPU last pendeln. Danke für die Hilfe. [Edit] Selbst das Beispiel aus der Doku für CreateCanvas erzeugt 50% WindowServer last. BlitzMax: [AUSKLAPPEN] Import MaxGui.Drivers MfG ich |
||
jsp |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn du
Case EVENT_TIMERTICK RedrawGadget canvas ausführst wird bei jedem event das Gadget neu gezeichnet, aber eigentlich soll nur der Inhalt upgedatet werden. So wie Holzchopf das im Beispiel hatte war das eleganter. Ich würde die Befehle unter Gadgetpaint in eine Funktion schreiben und diese dann je nötigen Event aufrufen. Unter: SetGraphics CanvasGraphics(canvas) fehlt mir eigentlich auch ein: SetViewport 0,0,GadgetWidth( Canvas ),GadgetHeight( Canvas ) Probier doch mal ob das besser läuft Code: [AUSKLAPPEN] Import MaxGui.Drivers
SuperStrict SetGraphicsDriver(GLMax2DDriver()) Global GAME_WIDTH:Int=320 Global GAME_HEIGHT:Int=240 ' create a centered window with client size GAME_WIDTH,GAME_HEIGHT Local wx:Int=(ClientWidth(Desktop())-GAME_WIDTH)/2 Local wy:Int=(ClientHeight(Desktop())-GAME_HEIGHT)/2 Local window:TGadget=CreateWindow("My Canvas",wx,wy,GAME_WIDTH,GAME_HEIGHT,Null,WINDOW_TITLEBAR|WINDOW_CLIENTCOORDS) ' create a canvas for our game Global canvas:TGadget=CreateCanvas(0,0,320,240,window) ' create an update timer CreateTimer 60 While WaitEvent() Select EventID() Case EVENT_TIMERTICK Redraw() Case EVENT_GADGETPAINT Redraw() Case EVENT_MOUSEMOVE Print "MOVE!" Case EVENT_WINDOWCLOSE FreeGadget canvas End Case EVENT_APPTERMINATE End End Select Wend Function Redraw() SetGraphics CanvasGraphics(canvas) SetViewport 0,0,GadgetWidth( Canvas ),GadgetHeight( Canvas ) SetOrigin 160,120 SetLineWidth 5 Cls Local t:Int=MilliSecs() DrawLine 0,0,120*Cos(t),120*Sin(t) DrawLine 0,0,80*Cos(t/60),80*Sin(t/60) Flip End Function |
||
Logic Gui Professional a Gui Designer for MaxGui |
FWeinbehemals "ich" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das macht leider auch keinen Unterschied. Meine einzige Vermutung ist, das OS X irgend welche Events feuert wenn die Grafik im Canvas aktualisiert wird, den bei der Variante nur mit Graphics liegt der WindowServer bei c.a. 2-4% last. Bei der mit der MaxGUI bei 10-20%
MfG ich |
||
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs |
![]() |
AnniXa |
![]() Antworten mit Zitat ![]() |
---|---|---|
Alternativ geht es auch mit peekevent() anstelle eines timerevents:
Code: [AUSKLAPPEN] Repeat while PeekEvent() WaitEvent() Select CurrentEvent.id Case EVENT_APPTERMINATE End End Select EndSelect Wend DrawRect 20,20,100,100 Flip(1) Forever End wird sicher auch nicht besser sein, aber ein versuch ist es ja wert |
||
|moonForge|
Ich bin Pokémon Meisterin seit 1998! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group