[Replicant] [vendor/replicant/scripts][PATCH 1/2] Add scripts to switch between LLVMpipe and libagl globally.

Denis 'GNUtoo' Carikli GNUtoo at cyberdimension.org
Thu Dec 12 22:11:59 UTC 2019


From: Jeremy Rand <jeremy at veclabs.net>

Replicant will soon merge patches to set the default renderer
for each application:
- Libagl was previously used for all applications. That prevented
  to use applications like IceCatMobile, which were crashing
  because libagl OpenGL implementation was incomplete.
- Some system applications or components are known to have
  huge performance issues with LLVMpipe.

Replicant will hopefully have good defaults settings that satisfy
most users, however it's still interesting to be able to change
the renderer system wide to workaround potential issues with the
default settings, or do some debugging or benchmarks.

Signed-off-by: Jeremy Rand <jeremy at veclabs.net>
GNUtoo at cyberdimension.org: commit message, fixed interpreter path
Signed-off-by: Denis 'GNUtoo' Carikli <GNUtoo at cyberdimension.org>
---
 display/renderer/device-files/androidsw.sh | 51 ++++++++++++++++++++++
 display/renderer/device-files/llvmpipe.sh  | 51 ++++++++++++++++++++++
 display/renderer/setup.sh                  |  5 +++
 3 files changed, 107 insertions(+)
 create mode 100644 display/renderer/device-files/androidsw.sh
 create mode 100644 display/renderer/device-files/llvmpipe.sh
 create mode 100755 display/renderer/setup.sh

diff --git a/display/renderer/device-files/androidsw.sh b/display/renderer/device-files/androidsw.sh
new file mode 100644
index 0000000..175e41f
--- /dev/null
+++ b/display/renderer/device-files/androidsw.sh
@@ -0,0 +1,51 @@
+#!/system/xbin/bash
+#
+# Copyright (C) 2017 Jeremy Rand <jeremy at veclabs.net>
+# Partially based on code by Wolfgang Wiedmeyer <wolfgit at wiedmeyer.de> and Filippo Fil Bergamo
+#
+# This file is part of "Replicant Renderer Switcher", a set of shell scripts to switch between
+# the Android Software Renderer and the llvmpipe renderer in Replicant.
+#
+# Replicant Renderer Switcher is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Replicant Renderer Switcher is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+set -euf -o pipefail
+
+grep -q "ro.libagl=0" /system/build.prop && renderer="llvmpipe" || renderer="android"
+
+if [ "${renderer}" == "android" ]
+then
+    echo "Android software renderer is already enabled!"
+    exit 1
+fi
+
+echo "Remounting system partition as writable..."
+mount -o rw,remount /system
+
+echo "Enabling Android software renderer..."
+sed "s/ro.libagl=0/ro.libagl=1/" -i /system/build.prop
+
+echo "Syncing filesystem..."
+sync
+sync
+
+echo "Remounting system partition as read-only..."
+mount -o ro,remount /system
+
+echo "Syncing filesystem..."
+sync
+sync
+
+# https://android.stackexchange.com/a/139139
+echo "Android software renderer will be enabled after we reboot now..."
+am start -a android.intent.action.REBOOT
diff --git a/display/renderer/device-files/llvmpipe.sh b/display/renderer/device-files/llvmpipe.sh
new file mode 100644
index 0000000..d40c4ec
--- /dev/null
+++ b/display/renderer/device-files/llvmpipe.sh
@@ -0,0 +1,51 @@
+#!/system/xbin/bash
+#
+# Copyright (C) 2017 Jeremy Rand <jeremy at veclabs.net>
+# Partially based on code by Wolfgang Wiedmeyer <wolfgit at wiedmeyer.de> and Filippo Fil Bergamo
+#
+# This file is part of "Replicant Renderer Switcher", a set of shell scripts to switch between
+# the Android Software Renderer and the llvmpipe renderer in Replicant.
+#
+# Replicant Renderer Switcher is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Replicant Renderer Switcher is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+set -euf -o pipefail
+
+grep -q "ro.libagl=0" /system/build.prop && renderer="llvmpipe" || renderer="android"
+
+if [ "${renderer}" == "llvmpipe" ]
+then
+    echo "llvmpipe is already enabled!"
+    exit 1
+fi
+
+echo "Remounting system partition as writable..."
+mount -o rw,remount /system
+
+echo "Enabling llvmpipe..."
+sed "s/ro.libagl=1/ro.libagl=0/" -i /system/build.prop
+
+echo "Syncing filesystem..."
+sync
+sync
+
+echo "Remounting system partition as read-only..."
+mount -o ro,remount /system
+
+echo "Syncing filesystem..."
+sync
+sync
+
+# https://android.stackexchange.com/a/139139
+echo "llvmpipe will be enabled after we reboot now..."
+am start -a android.intent.action.REBOOT
diff --git a/display/renderer/setup.sh b/display/renderer/setup.sh
new file mode 100755
index 0000000..ac5abe8
--- /dev/null
+++ b/display/renderer/setup.sh
@@ -0,0 +1,5 @@
+root_dir="/data/misc/renderer"
+adb root
+sleep 3
+adb shell mkdir -p "$root_dir"
+adb push ./device-files/* "$root_dir/"
-- 
2.24.0



More information about the Replicant mailing list