OSDN Git Service

[fixed] synch block in onDrawFrame was way to big. Minimized it down to the minimum...
authorbadlogicgames <badlogicgames@6c4fd544-2939-11df-bb46-9574ba5d0bfa>
Wed, 1 Dec 2010 23:08:30 +0000 (23:08 +0000)
committerbadlogicgames <badlogicgames@6c4fd544-2939-11df-bb46-9574ba5d0bfa>
Wed, 1 Dec 2010 23:08:30 +0000 (23:08 +0000)
backends/gdx-backend-android/src/com/badlogic/gdx/backends/android/AndroidGraphics.java

index 4f1cad6..acafe85 100644 (file)
@@ -71,11 +71,11 @@ public final class AndroidGraphics implements Graphics, Renderer {
        private int fps;\r
        private WindowedMean mean = new WindowedMean(5);\r
 \r
-       boolean created = false;\r
-       boolean running = false;\r
-       boolean pause = false;\r
-       boolean resume = false;\r
-       boolean destroy = false;\r
+       volatile boolean created = false;\r
+       volatile boolean running = false;\r
+       volatile boolean pause = false;\r
+       volatile boolean resume = false;\r
+       volatile boolean destroy = false;\r
 \r
        private float ppiX = 0;\r
        private float ppiY = 0;\r
@@ -319,16 +319,15 @@ public final class AndroidGraphics implements Graphics, Renderer {
        }\r
 \r
        void pause() {\r
+               long startTime = System.nanoTime();\r
                synchronized (synch) {\r
                        running = false;\r
                        pause = true;\r
                }\r
-               boolean cond = false;\r
-               while (!cond) {\r
-                       synchronized (synch) {\r
-                               cond = !pause;\r
-                       }\r
-               }\r
+               Gdx.app.log("AndroidGraphics", "synch took: " + (System.nanoTime()-startTime)/1000000000.0f);\r
+               startTime = System.nanoTime();\r
+               while (pause); // busy wait. ya, nasty...               \r
+               Gdx.app.log("AndroidGraphics", "wait took: " + (System.nanoTime()-startTime)/1000000000.0f);\r
        }\r
 \r
        void destroy() {\r
@@ -351,28 +350,47 @@ public final class AndroidGraphics implements Graphics, Renderer {
                lastFrameTime = time;\r
                mean.addValue(deltaTime);\r
        \r
-               synchronized (synch) {\r
-                       if (running) {\r
-                               ((AndroidInput)Gdx.input).processEvents();\r
-                               app.listener.render();\r
+               boolean lrunning = false;\r
+               boolean lpause = false;\r
+               boolean ldestroy = false;\r
+               boolean lresume = false;\r
+               \r
+               synchronized(synch) {\r
+                       lrunning = running;\r
+                       lpause = pause;\r
+                       ldestroy = destroy;\r
+                       lresume = resume;\r
+                       \r
+                       if (pause) {                    \r
+                               pause = false;                  \r
                        }\r
-\r
-                       if (pause) {\r
-                               app.listener.pause();\r
-                               pause = false;\r
+                       \r
+                       if (destroy) {                          \r
+                               destroy = false;\r
                        }\r
 \r
-                       if (resume) {\r
-                               app.listener.resume();\r
+                       if (resume) {                           \r
                                resume = false;\r
                                running = true;\r
-                       }\r
+                       }               \r
+               }\r
+                               \r
+               if (lrunning) {\r
+                       ((AndroidInput)Gdx.input).processEvents();\r
+                       app.listener.render();\r
+               }\r
 \r
-                       if (destroy) {\r
-                               app.listener.dispose();\r
-                               destroy = false;\r
-                       }\r
+               if (lpause) {\r
+                       app.listener.pause();\r
+               }\r
+\r
+               if (lresume) {\r
+                       app.listener.resume();\r
                }\r
+\r
+               if (ldestroy) {\r
+                       app.listener.dispose();\r
+               }               \r
                \r
                if (time - frameStart > 1000000000) {\r
                        fps = frames;\r