From c159026a7ae4106d218cc542c30ab6cba11c629b Mon Sep 17 00:00:00 2001 From: Grigorii Zimin Date: Mon, 17 Aug 2020 17:37:39 +0300 Subject: [vehicle] fix segfaults in SP mode Fixes: AUTOSUITE-1607 Change-Id: Ib1d628a495611aca952a1ea3acba6e23f2101894 Reviewed-by: Svetlana Abramenkova Reviewed-by: Egor Nemtsev --- apps/com.luxoft.vehicle/panels/Vehicle3DPanel.qml | 22 +++++++++-- apps/com.luxoft.vehicle/views/VehicleView.qml | 45 ++++++++++++++++++----- 2 files changed, 55 insertions(+), 12 deletions(-) diff --git a/apps/com.luxoft.vehicle/panels/Vehicle3DPanel.qml b/apps/com.luxoft.vehicle/panels/Vehicle3DPanel.qml index bb8efe47..1c0068ff 100644 --- a/apps/com.luxoft.vehicle/panels/Vehicle3DPanel.qml +++ b/apps/com.luxoft.vehicle/panels/Vehicle3DPanel.qml @@ -78,6 +78,14 @@ Item { return angle * 180 / Math.PI; } + function forceRedraw() { + // force scene to redraw (workaround for AUTOSUITE-1598) + // see FrameAction below: we force render policy to be 'Always' for at least 5 seconds + // this time should be enough to make model shown + // after this we set renderPolicy back to OnDemand to reduce cpu consuming + renderSettings.renderPolicy = RenderSettings.Always; + } + MouseArea { anchors.top: parent.top anchors.left: parent.left @@ -137,6 +145,16 @@ Item { FrameAction { id: frameCounter + property real dtime: 0.0 + onTriggered: { + if (renderSettings.renderPolicy === RenderSettings.Always) { + dtime += dt; + if (dtime > 5.0) { + dtime = 0; + renderSettings.renderPolicy = RenderSettings.OnDemand; + } + } + } } components: [inputSettings, renderSettings, frameCounter] @@ -149,9 +167,7 @@ Item { function onTriggered() { if (++fc == 3) { root.readyToChanges = true; - // force scene to redraw (workaround for AUTOSUITE-1598) - renderSettings.renderPolicy = RenderSettings.Always; - renderSettings.renderPolicy = RenderSettings.OnDemand; + root.forceRedraw(); } } } diff --git a/apps/com.luxoft.vehicle/views/VehicleView.qml b/apps/com.luxoft.vehicle/views/VehicleView.qml index 929107c7..04f857ee 100644 --- a/apps/com.luxoft.vehicle/views/VehicleView.qml +++ b/apps/com.luxoft.vehicle/views/VehicleView.qml @@ -45,6 +45,10 @@ Item { id: root property VehicleStore store + + // This timer is used to make the order of creation transparent + // 1) read settings (reread to be sure, it's a synch op), get chosen runtime + // 2) load the chosen model Timer { id: delayTimer interval: 1 @@ -55,12 +59,35 @@ Item { } } + // This timer is a workaround to prevent 3DStudio presentation from too fast reload + Timer { + id: studioReloadTimer + interval: 2000 + running: false + onTriggered: { + loadVehiclePanel(); + } + } + + // we don't change visible manually, it is changed by sysui, when another app is called + // or the same app is called again, even if it is maximized right now onVisibleChanged: { - if (!visible) { - vehicle3DPanelLoader.active = false; - } else { - if (!delayTimer.running && !vehicle3DPanelLoader.active) - loadVehiclePanel(); + // the app was already launched and is restored (e.g. Vehicle -> Home -> Vehicle) + if (root.store.runtime3D === "qt3d") { + if (visible && !!vehicle3DPanelLoader.item) { + // vehicle is loaded, but it is hidden (AUTOSUITE-1598) + // we force redraw, to make it visible + vehicle3DPanelLoader.item.forceRedraw(); + } + } else if (root.store.runtime3D === "3DStudio") { + if (!visible && !!vehicle3DPanelLoader.item) { + vehicle3DPanelLoader.source = "" // force to remove current instance + } + + if (visible) { + vehicleProxyPanel.opacity = 1.0; // enable proxy with the progress bar + studioReloadTimer.start(); + } } } @@ -71,11 +98,11 @@ Item { ? "../panels/Vehicle3DPanel.qml" : "../panels/Vehicle3DStudioPanel.qml" , { "leftDoorOpen": root.store.leftDoorOpened - , "rightDoorOpen": root.store.rightDoorOpen - , "trunkOpen": root.store.trunkOpen + , "rightDoorOpen": root.store.rightDoorOpened + , "trunkOpen": root.store.trunkOpened , "roofOpenProgress": root.store.roofOpenProgress - , "lastCameraAngle": root.store.lastCameraAngle - , "modelVersion": root.store.modelVersion + , "lastCameraAngle": root.store.cameraAngleView + , "modelVersion": root.store.model3DVersion , "vehicleColor": root.store.vehicle3DstudioColor }); vehicle3DPanelLoader.active = store.allowOpenGLContent; -- cgit v1.2.3