Merge "Use spin::Once rather than wrapping a OnceCell in a SpinMutex." into main
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);