Streaming time-dynamic czml limits?

Hi, I currently have an application where we are streaming time-dynamic czml using the availability and interval properties. We receive the data which consists of billboards, labels and poly lines with material styling from a web socket.

I’m noticing in both Chrome and FireFox, much more noticble in FireFox that the polylines tend to flicker and occasionally lose styling. It seems to happen randomly.

All seems to be working well from a movement perspective and the flickering does not occur with the billboards.

We render the czml via a czml data source using the ‘process’ function every second.

The czml document has a clock interval defined with a start as the current time through a end as current time + 20 seconds.

Each availability and interval for the czml child packets are defined with a start as the current time and an end as the current time + 2 seconds.

I’m curious if there are limitations to the rendering speed for polylines? Or perhaps I’m using the availability/intervals incorrectly for polylines?

We are running Cesium 1.48.0, FireFox 60 Quantum 64-bit and Chrome 64-bit.

Additionally, to add to the above. I also occasionally on FireFox will receive with the same CZML the ominous “Rendering has stopped” error…

An error occurred while rendering. Rendering has stopped.

DeveloperError: This object was destroyed, i.e., destroy was called.

DeveloperError@webpack-internal:///2:43:19

throwOnDestroy@webpack-internal:///9:45:19

updateAndRenderPrimitivesObject-internal:///1239:2980:9

executeCommandsInViewport@webpack-internal:///1239:2840:13

updateAndExecuteCommands@webpack-internal:///1239:2703:13

render@webpack-internal:///1239:3271:9

tryAndCatchError@webpack-internal:///1239:3291:13

There shouldn’t be a limitation on update frequency for polylines. Are you processing the CZML like in this example?

I’m having trouble rendering recreating the issue. Can you try to share an example that has the problem? And/or perhaps post how you’re updating the polylines/your code that runs on ‘process’ every second.

The rendering has stopped might be a separate issue. Can you also show how you’re removing things?

Not exactly… We are calling the process function on the CZML data source passing a CZML string/document to it. We don’t really remove anything, we continually call the process function with each new CZML string/document. We rely on the availability/interval properties within each packet to remove elements when they fall outside their allotted time. Below is an example of the CZML; there are about 60 packets within the document consisting of a billboard, label and two polylines, As I mentioned the document interval is between 1-2 seconds with each child packets availability/interval being within the same 1-2 seconds. So, ideally something won’t be displayed on the screen longer than 2 seconds before its removed/expected to be replaced…

[
{
“id”: “document”,
“version”: “1.0”,
“clock”: {
“interval”: “20180822T134847.91400000000067Z/20180822T134849.91400000000067Z”
}
},
{
“id”: “6522”,
“availability”: “20180822T134847.91400000000067Z/20180822T134849.91400000000067Z”,
“billboard”: {
“image”: “data:image/svg+xml;base64,ENCODED_STRING”
},
“label”: {
“text”: “TEXT”,
“pixelOffset”: {
“cartesian2”: [ 0, 0 ]
},
“verticalOrigin”: “TOP”,
“horizontalOrigin”: “LEFT”
},
“position”: {
“cartographicDegrees”: [ 0, 0, 0 ]
}
},
{
“parent”: “6522”,
“id”: “6522-line-1”,
“polyline”: {
“material”: {
“solidColor”: {
“color”: {
“rgba”: [0, 0, 0, 255]
}
}
}
},
“interval”: “20180822T134847.91400000000067Z/20180822T134849.91400000000067Z”,
“positions”: {
“cartographicDegrees”: [
0, 0, 0,
0, 0, 0
]
},
“width”: 4
},
{
“parent”: “6522”,
“id”: “6522-line-2”,
“polyline”: {
“material”: {
“solidColor”: {
“color”: {
“rgba”: [0, 0, 0, 255]
}
}
}
},
“interval”: “20180822T134847.91400000000067Z/20180822T134849.91400000000067Z”,
“positions”: {
“cartographicDegrees”: [
0, 0, 0,
0, 0, 0,
0, 0, 0,
0, 0, 0,
0, 0, 0
]
},
“width”: 4
}
]

Are you adding it to the datasources on every process call?

I was getting the same error “DeveloperError: This object was destroyed, i.e., destroy() was called.” when doing that. I changed it to just process and it updates the entity by ID. You can see this Sandcastle processes a new packet 10 times a second (click on the “today” button on the bottom left to see the circle expanding and shrinking), so it should definitely handle updating every second.

The polylines flickering might be a separate issue. I’m curious, does it get fixed if you change it from processing every second to every 5 seconds perhaps? And can you reliably get it to throw the “DeveloperError” or does it happen infrequently?