2016-07-06 22:01:16 |
Andrea Bernabei |
description |
It seems that independently from which Mir server I use (mir_demo_server, qtmir-demo-shell, unity8) the CPU usage on Arale when running any simple client seems to be quite high.
My investigation started with a designer contacting me about
https://bugs.launchpad.net/ubuntu/+source/ubuntu-ui-toolkit/+bug/1431957
and
https://bugs.launchpad.net/ubuntu/+source/ubuntu-system-settings/+bug/1513450
Since the activity indicator visual has to be updated anyway, we were looking at the options we had to also make it less CPU consuming at the same time.
It turned out it's not a matter of how you render it, anything that causes redraw at 60fps will cause high cpu usage, here are the results I got:
Device:
Arale, rc-proposed r370
Setup:
clean flash + apt-get install qtmir-tests mir-demos
(qtmir-tests will remove qtmir-android, you'll have to reinstall it until https://bugs.launchpad.net/ubuntu/+source/qtmir/+bug/1599614 is fixed)
echo 806000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo 806000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
and the same for cpu1 and cpu2 (after bringing them online by scrolling scopes)
Results:
=== Minimal Mir server + egltriangle demo ===
sudo su
stop lightdm
echo 2047 > /sys/class/backlight/lm3630_bled/brightness
sudo mir_demo_server_minimal --arw-file
(separate shell, phablet user)
mir_demo_client_egltriangle -m /tmp/mir_socket
1 CORE ONLINE
mir_demo_server: 12.5%
mir_demo_client: 11%
=== Mir demo server + egltriangle demo ===
sudo su
stop lightdm
echo 2047 > /sys/class/backlight/lm3630_bled/brightness
LD_PRELOAD=/lib/arm-linux-gnueabihf/libpthread.so.0 mir_demo_server --test-client /usr/bin/mir_demo_client_egltriangle
1 CORE ONLINE
mir demo server: 20%
mir_demo_client: 9%
=== Qt Mir demo shell + egltriangle demo ===
sudo su
stop lightdm
echo 2047 > /sys/class/backlight/lm3630_bled/brightness
cd /usr/share/qtmir/qtmir-demo-shell
MIR_SERVER_FILE=/tmp/mir_socket QT_QPA_PLATFORM=mirserver qmlscene ./qml-demo-shell.qml
(on a separate shell, phablet user)
MIR_SOCKET=/tmp/mir_socket QT_QPA_PLATFORM=ubuntumirclient sudo mir_demo_client_egltriangle -- --desktop_file_hint=dialer-app
1 to 2 CORES ONLINE (varying)
qmlscene (Mir server): 27.5% CPU
mir_demo_client: 10% CPU
=== Unity8 + test qml app ===
qmlscene test.qml --desktop_file_hint=dialer-app
2 CORES ONLINE
Unity8: 30%
qmlscene: 15%
USC: 10%
==== QML TEST FILE ====
import QtQuick 2.4
import Ubuntu.Components 1.3
Item {
anchors.fill: parent
/*AnimatedSprite {
id: sprite
width: 69
height: 69
source: "spinner-spritesheet.png"
frameCount: 74
frameSync: true
frameWidth: 81
frameHeight: 81
loops: 100
}*/
/*ActivityIndicator {
id: indicator
running: true
}*/
Rectangle {
id: rect
width: 69
height: 69
color: "orange"
/*RotationAnimation on rotation {
loops: Animation.Infinite
from: 0
to: 360
}*/
/*NumberAnimation on x {
loops: Animation.Infinite
from: 0
to: 360
}*/
XAnimator {
target: rect;
from: 0;
to: 360;
duration: 15000
running: true
}
}
Timer {
interval: 10000
running: true
onTriggered: Qt.quit()
}
} |
It seems that independently from which Mir server I use (mir_demo_server, qtmir-demo-shell, unity8) the CPU usage on Arale when running any simple client seems to be quite high.
My investigation started with a designer contacting me about
https://bugs.launchpad.net/ubuntu/+source/ubuntu-ui-toolkit/+bug/1431957
and
https://bugs.launchpad.net/ubuntu/+source/ubuntu-system-settings/+bug/1513450
Since the activity indicator visual has to be updated anyway, we were looking at the options we had to also make it less CPU consuming at the same time.
It turned out it's not a matter of how you render it, anything that causes redraw at 60fps will cause high cpu usage, here are the results I got:
Tools:
phablet-shell to run the commands
top to see cpu usage
Device:
Arale, rc-proposed r370
Setup:
clean flash + apt-get install qtmir-tests mir-demos
(qtmir-tests will remove qtmir-android, you'll have to reinstall it until https://bugs.launchpad.net/ubuntu/+source/qtmir/+bug/1599614 is fixed)
echo 806000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo 806000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
and the same for cpu1 and cpu2 (after bringing them online by scrolling scopes)
Results:
=== Minimal Mir server + egltriangle demo ===
sudo su
stop lightdm
echo 2047 > /sys/class/backlight/lm3630_bled/brightness
sudo mir_demo_server_minimal --arw-file
(separate shell, phablet user)
mir_demo_client_egltriangle -m /tmp/mir_socket
1 CORE ONLINE
mir_demo_server: 12.5%
mir_demo_client: 11%
=== Mir demo server + egltriangle demo ===
sudo su
stop lightdm
echo 2047 > /sys/class/backlight/lm3630_bled/brightness
LD_PRELOAD=/lib/arm-linux-gnueabihf/libpthread.so.0 mir_demo_server --test-client /usr/bin/mir_demo_client_egltriangle
1 CORE ONLINE
mir demo server: 20%
mir_demo_client: 9%
=== Qt Mir demo shell + egltriangle demo ===
sudo su
stop lightdm
echo 2047 > /sys/class/backlight/lm3630_bled/brightness
cd /usr/share/qtmir/qtmir-demo-shell
MIR_SERVER_FILE=/tmp/mir_socket QT_QPA_PLATFORM=mirserver qmlscene ./qml-demo-shell.qml
(on a separate shell, phablet user)
MIR_SOCKET=/tmp/mir_socket QT_QPA_PLATFORM=ubuntumirclient sudo mir_demo_client_egltriangle -- --desktop_file_hint=dialer-app
1 to 2 CORES ONLINE (varying)
qmlscene (Mir server): 27.5% CPU
mir_demo_client: 10% CPU
=== Unity8 + test qml app ===
qmlscene test.qml --desktop_file_hint=dialer-app
2 CORES ONLINE
Unity8: 30%
qmlscene: 15%
USC: 10%
==== QML TEST FILE ====
import QtQuick 2.4
import Ubuntu.Components 1.3
Item {
anchors.fill: parent
/*AnimatedSprite {
id: sprite
width: 69
height: 69
source: "spinner-spritesheet.png"
frameCount: 74
frameSync: true
frameWidth: 81
frameHeight: 81
loops: 100
}*/
/*ActivityIndicator {
id: indicator
running: true
}*/
Rectangle {
id: rect
width: 69
height: 69
color: "orange"
/*RotationAnimation on rotation {
loops: Animation.Infinite
from: 0
to: 360
}*/
/*NumberAnimation on x {
loops: Animation.Infinite
from: 0
to: 360
}*/
XAnimator {
target: rect;
from: 0;
to: 360;
duration: 15000
running: true
}
}
Timer {
interval: 10000
running: true
onTriggered: Qt.quit()
}
} |
|