2014-07-29

Hardward acceleration

For Android, forcing hardware acceleration to render apps means enable 'Force GPU rendering' in developer menu.See force_hw_ui in packages/apps/Settings/res/values/strings.xml.

You can control hardware acceleration at the following levels: Application, Activity, Window and View. See http://developer.android.com/guide/topics/graphics/hardware-accel.html#controlling

Enabling 'Force GPU rendering' option in developer menu will set persist.sys.ui.hw to 'true'. File: packages/apps/Settings/src/com/android/settings/DevelopmentSettings.java

       private static final String HARDWARE_UI_PROPERTY = "persist.sys.ui.hw";
       ...
       SystemProperties.set(HARDWARE_UI_PROPERTY, mForceHardwareUi.isChecked() ? "true" : "false");

To enable 'Hardware Accelerate', we can either enable 'Force GPU rendering' option in develop menu or explicit set it via setWindowManager API by developer, like below examples: File: ./frameworks/base/core/java/android/service/dreams/Dream.java

     mWindow.setWindowManager(null, windowToken, "dream", true);
  

If calling setWindowManager without specify the last input parameter(hardwareAccelerated), the default is false. File:./frameworks/base/core/java/android/view/Window.java

     public void setWindowManager(WindowManager wm, IBinder appToken, String appName) {
         setWindowManager(wm, appToken, appName, false);
     } 

File: ./frameworks/base/core/java/android/view/Window.java

 465     public void setWindowManager(WindowManager wm, IBinder appToken, String appName) {
 466         setWindowManager(wm, appToken, appName,false);
 467     }
 468 
 476     public void setWindowManager(WindowManager wm, IBinder appToken, String appName,
 477             boolean hardwareAccelerated) {
             ...
 483         mWindowManager = new LocalWindowManager(wm, hardwareAccelerated);
 484     }
 
 
 491     private class LocalWindowManager extends WindowManagerImpl.CompatModeWrapper {
 492         private static final String PROPERTY_HARDWARE_UI = "persist.sys.ui.hw";
 493 
 494         private final boolean mHardwareAccelerated;
 495 
 496         LocalWindowManager(WindowManager wm, boolean hardwareAccelerated) {
 497             ...
 498             mHardwareAccelerated = hardwareAccelerated ||                                                                          
 499                     SystemProperties.getBoolean(PROPERTY_HARDWARE_UI, false);
 500         }
 501 
 502         public boolean isHardwareAccelerated() {
 503             return mHardwareAccelerated;
 504         }

App can force 'Hardware Accelerated' to true(no matter developer menu->Force GPU rendering option is on or off), or make it depends to developer menu->Force GPU rendering option. Here are two examples from Normandy source:

     
File: packages/apps/Launcher2/AndroidManifest.xml
 64     <application
            ...
 68         android:hardwareAccelerated="@bool/config_hardwareAccelerated"                                                              
 
File: packages/apps/Gallery2/AndroidManifest.xml
 64     <application android:icon="@mipmap/ic_launcher_gallery" android:label="@string/app_name"
                ...
 67             android:hardwareAccelerated="true"

 

 

No comments: