Details
-
Bug
-
Resolution: Unresolved
-
P2: Important
-
None
-
6.2.0, 6.3.0
-
None
Description
Appending points to a `LineSeries` is extremely slow when running on Android.
Consider the following example:
main.cpp:
#include <QGuiApplication> #include <QQmlApplicationEngine> #include <QApplication> int main(int argc, char *argv[]) { QApplication app(argc, argv); QQmlApplicationEngine engine; const QUrl url(u"qrc:/chart-repro/main.qml"_qs); QObject::connect(&engine, &QQmlApplicationEngine::objectCreated, &app, [url](QObject *obj, const QUrl &objUrl) { if (!obj && url == objUrl) QCoreApplication::exit(-1); }, Qt::QueuedConnection); engine.load(url); return app.exec(); }
main.qml:
import QtQuick import QtCharts 2.3 Window { width: 640 height: 480 visible: true title: qsTr("Hello World") Component.onCompleted: { const ts = new Date().getTime(); console.log("populating..."); const s = series; for(var i=0; i<1000; i++){ series.append(i, i + Math.random()*400-200) } const te = new Date().getTime(); console.log("finished in", te-ts, "ms") } ChartView { anchors.fill: parent antialiasing: true id: chart ValuesAxis{ id: xaxis min: 0 max: 1000 } ValuesAxis { id: yaxis min: 0 max: 1000 } AreaSeries{ useOpenGL: true axisX: xaxis axisY: yaxis upperSeries: LineSeries { id: series } } } }
Notice the time measuring in Component.onCompleted. When running on a Linux PC, building the chart takes 7ms to build. On Android it takes more than 1000ms, even though it's not an old phone (Pixel 3a). This huge difference seems like something is wrong under the hood.