display: skip the display update
authorgiwoong.kim <giwoong.kim@samsung.com>
Tue, 12 Mar 2013 02:15:42 +0000 (11:15 +0900)
committergiwoong.kim <giwoong.kim@samsung.com>
Tue, 12 Mar 2013 10:31:06 +0000 (19:31 +0900)
skip the display update when it is turned off
on ShmSkin design.

Signed-off-by: GiWoong Kim <giwoong.kim@samsung.com>
tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSdlSkin.java
tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorShmSkin.java
tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkin.java
tizen/src/skin/client/src/org/tizen/emulator/skin/comm/sock/SocketCommunicator.java

index b1c76c9..149137c 100644 (file)
@@ -119,6 +119,18 @@ public class EmulatorSdlSkin extends EmulatorSkin {
        }
 
        @Override
+       public void displayOn() {
+               logger.info("display on");
+               /* do nothing */
+       }
+
+       @Override
+       public void displayOff() {
+               logger.info("display off");
+               /* do nothing */
+       }
+
+       @Override
        protected void openScreenShotWindow() {
                if (screenShotDialog != null) {
                        logger.info("screenshot window was already opened");
index 7ec849d..dd47b77 100644 (file)
@@ -74,6 +74,7 @@ public class EmulatorShmSkin extends EmulatorSkin {
 
                private volatile boolean stopRequest;
                private Runnable runnable;
+               private int intervalWait;
 
                public PollFBThread(int lcdWidth, int lcdHeight) {
                        this.display = Display.getDefault();
@@ -83,25 +84,37 @@ public class EmulatorShmSkin extends EmulatorSkin {
                        this.imageData = new ImageData(lcdWidth, lcdHeight, COLOR_DEPTH, paletteData);
                        this.framebuffer = new Image(Display.getDefault(), imageData);
 
+                       setWaitIntervalTime(30);
+
                        this.runnable = new Runnable() {
                                @Override
                                public void run() {
                                        // logger.info("update display framebuffer");
-                                       if(lcdCanvas.isDisposed() == false) {
+                                       if (lcdCanvas.isDisposed() == false) {
                                                lcdCanvas.redraw();
                                        }
                                }
                        };
                }
 
+               public synchronized void setWaitIntervalTime(int ms) {
+                       intervalWait = ms;
+               }
+
+               public synchronized int getWaitIntervalTime() {
+                       return intervalWait;
+               }
+
                @Override
                public void run() {
                        stopRequest = false;
 
+                       Image temp;
+
                        while (!stopRequest) {
-                               synchronized (this) {
+                               synchronized(this) {
                                        try {
-                                               this.wait(30); /* 30ms */
+                                               this.wait(intervalWait); /* ms */
                                        } catch (InterruptedException e) {
                                                e.printStackTrace();
                                                break;
@@ -115,7 +128,7 @@ public class EmulatorShmSkin extends EmulatorSkin {
                                        imageData.setPixels(0, i, lcdWidth, array, i * lcdWidth);
                                }
 
-                               Image temp = framebuffer;
+                               temp = framebuffer;
                                framebuffer = new Image(display, imageData);
                                temp.dispose();
 
@@ -133,6 +146,10 @@ public class EmulatorShmSkin extends EmulatorSkin {
 
                public void stopRequest() {
                        stopRequest = true;
+
+                       synchronized(pollThread) {
+                               pollThread.notify();
+                       }
                }
        }
 
@@ -151,7 +168,7 @@ public class EmulatorShmSkin extends EmulatorSkin {
                super.finger.setMultiTouchEnable(0);
                super.finger.clearFingerSlot();
                super.finger.cleanup_multiTouchState();
-       
+
                super.skinFinalize();
        }
 
@@ -178,18 +195,27 @@ public class EmulatorShmSkin extends EmulatorSkin {
 
                                int x = lcdCanvas.getSize().x;
                                int y = lcdCanvas.getSize().y;
+
+                               if (pollThread.getWaitIntervalTime() == 0) {
+                                       logger.info("draw black screen");
+
+                                       e.gc.drawRectangle(-1, -1, x + 1, y + 1);
+                                       return;
+                               }
+
                                if (currentState.getCurrentAngle() == 0) { /* portrait */
                                        e.gc.drawImage(pollThread.framebuffer,
                                                        0, 0, pollThread.lcdWidth, pollThread.lcdHeight,
                                                        0, 0, x, y);
-                                       
+
                                        if (finger.getMultiTouchEnable() == 1) {
                                                finger.rearrangeFingerPoints(currentState.getCurrentResolutionWidth(), 
                                                                currentState.getCurrentResolutionHeight(), 
                                                                currentState.getCurrentScale(), 
                                                                currentState.getCurrentRotationId());
                                        }
-                    finger.drawImage(e, currentState.getCurrentAngle());
+
+                                       finger.drawImage(e, currentState.getCurrentAngle());
                                        return;
                                }
 
@@ -212,15 +238,14 @@ public class EmulatorShmSkin extends EmulatorSkin {
                                        y = temp;
                                        transform.translate(x * -1, 0);
                                }
-                               
-                               //draw finger image
-                               //for when rotate while use multi touch
+
+                               /* draw finger image for when rotate while use multitouch */
                                if (finger.getMultiTouchEnable() == 1) {
                                        finger.rearrangeFingerPoints(currentState.getCurrentResolutionWidth(), 
                                                        currentState.getCurrentResolutionHeight(), 
                                                        currentState.getCurrentScale(), 
                                                        currentState.getCurrentRotationId());
-                               }       
+                               }
                                //save current transform as "oldtransform" 
                                e.gc.getTransform(oldtransform);
                                //set to new transfrom
@@ -230,7 +255,7 @@ public class EmulatorShmSkin extends EmulatorSkin {
                                                0, 0, x, y);
                                //back to old transform
                                e.gc.setTransform(oldtransform);
-                               
+
                                transform.dispose();
                                finger.drawImage(e, currentState.getCurrentAngle());
                        }
@@ -242,6 +267,35 @@ public class EmulatorShmSkin extends EmulatorSkin {
        }
 
        @Override
+       public void displayOn() {
+               logger.info("display on");
+
+               if (pollThread.isAlive()) {
+                       pollThread.setWaitIntervalTime(30);
+
+                       synchronized(pollThread) {
+                               pollThread.notify();
+                       }
+               }
+       }
+
+       @Override
+       public void displayOff() {
+               logger.info("display off");
+
+               if (pollThread.isAlive()) {
+                       pollThread.setWaitIntervalTime(0);
+
+                       shell.getDisplay().asyncExec(new Runnable() {
+                               @Override
+                               public void run() {
+                                       lcdCanvas.redraw();
+                               }
+                       });
+               }
+       }
+
+       @Override
        protected void openScreenShotWindow() {
                if (screenShotDialog != null) {
                        logger.info("screenshot window was already opened");
index 17afe67..7916488 100644 (file)
@@ -1034,7 +1034,23 @@ public class EmulatorSkin {
        }
 
        protected void openScreenShotWindow() {
-               //TODO: abstract
+               /* abstract */
+       }
+
+       public void dispalyBrightness(boolean on) {
+               if (on == true) {
+                       displayOn();
+               } else {
+                       displayOff();
+               }
+       }
+
+       protected void displayOn() {
+               /* abstract */
+       }
+
+       protected void displayOff() {
+               /* abstract */
        }
 
        public boolean isSelectKeyWindow() {
index 01dc150..5f3e734 100644 (file)
@@ -370,9 +370,9 @@ public class SocketCommunicator implements ICommunicator {
                                                }
 
                                                if (value == 0) {
-                                                       logger.info("display off");
+                                                       skin.dispalyBrightness(false);
                                                } else {
-                                                       logger.info("display on");
+                                                       skin.dispalyBrightness(true);
                                                }
                                        }