display dpi scale, refresh rate and memory are from vm_config.json
And set the dpi scale of Ferrochrome to 0.77 so that it can show more
info. Refresh rate is set to 30 (from the default 60) for now just to
reduce the display update overhead.
Bug: N/A
Test: run ferrochrome
Change-Id: I1e4f13390da8f5d9f053aaf3b7ecdb6254a04cf8
diff --git a/ferrochrome_app/vm_config.json.template b/ferrochrome_app/vm_config.json.template
index 6e1992f..d1a7cfa 100644
--- a/ferrochrome_app/vm_config.json.template
+++ b/ferrochrome_app/vm_config.json.template
@@ -33,5 +33,9 @@
"backend": "virglrenderer",
"context_types": ["virgl2"]
},
+ "display": {
+ "scale": "0.77",
+ "refresh_rate": "30"
+ },
"console_input_device": "hvc0"
}
diff --git a/vmlauncher_app/java/com/android/virtualization/vmlauncher/MainActivity.java b/vmlauncher_app/java/com/android/virtualization/vmlauncher/MainActivity.java
index 47a6fe3..105ae03 100644
--- a/vmlauncher_app/java/com/android/virtualization/vmlauncher/MainActivity.java
+++ b/vmlauncher_app/java/com/android/virtualization/vmlauncher/MainActivity.java
@@ -43,7 +43,6 @@
import android.system.virtualmachine.VirtualMachineManager;
import android.util.DisplayMetrics;
import android.util.Log;
-import android.view.Display;
import android.view.InputDevice;
import android.view.KeyEvent;
import android.view.SurfaceHolder;
@@ -200,20 +199,32 @@
customImageConfigBuilder.setGpuConfig(gpuConfigBuilder.build());
}
- configBuilder.setMemoryBytes(8L * 1024 * 1024 * 1024 /* 8 GB */);
+ long memoryMib = 1024; // 1GB by default
+ if (json.has("memory_mib")) {
+ memoryMib = json.getLong("memory_mib");
+ }
+ configBuilder.setMemoryBytes(memoryMib * 1024 * 1024);
+
WindowMetrics windowMetrics = getWindowManager().getCurrentWindowMetrics();
- Rect windowSize = windowMetrics.getBounds();
- int dpi = (int) (DisplayMetrics.DENSITY_DEFAULT * windowMetrics.getDensity());
+ float dpi = DisplayMetrics.DENSITY_DEFAULT * windowMetrics.getDensity();
+ int refreshRate = (int) getDisplay().getRefreshRate();
+ if (json.has("display")) {
+ JSONObject display = json.getJSONObject("display");
+ if (display.has("scale")) {
+ dpi *= (float) display.getDouble("scale");
+ }
+ if (display.has("refresh_rate")) {
+ refreshRate = display.getInt("refresh_rate");
+ }
+ }
+ int dpiInt = (int) dpi;
DisplayConfig.Builder displayConfigBuilder = new DisplayConfig.Builder();
+ Rect windowSize = windowMetrics.getBounds();
displayConfigBuilder.setWidth(windowSize.right);
displayConfigBuilder.setHeight(windowSize.bottom);
- displayConfigBuilder.setHorizontalDpi(dpi);
- displayConfigBuilder.setVerticalDpi(dpi);
-
- Display display = getDisplay();
- if (display != null) {
- displayConfigBuilder.setRefreshRate((int) display.getRefreshRate());
- }
+ displayConfigBuilder.setHorizontalDpi(dpiInt);
+ displayConfigBuilder.setVerticalDpi(dpiInt);
+ displayConfigBuilder.setRefreshRate(refreshRate);
customImageConfigBuilder.setDisplayConfig(displayConfigBuilder.build());
customImageConfigBuilder.useTouch(true);