TickingAreas don't tick reliably which could be a huge problem for technical maps/Marketplace content that require command blocks to function.
It appears that larger tickingAreas unload more frequently, and when they fail it affects every chunk in that area. More testing needs to be done in order to confirm this, though.
In
[media], the first value is how many gameticks have been simulated in the tickingArea over the course of an hour. The second value is how many gameticks have been simulated by the player over the same time frame.
In the picture below, the chunks labelled chunk[_] are separate chunks in the same tickingArea. This is evidence that larger tickingAreas unload more often.
[media]
Steps to Reproduce
Open
. It contains a scoreboard system that counts ticks in several chunks simulated by the player, and in ticking area.
/tp -89 1 -128
Flip the lever.
Wait for a few minutes, or up to an hour.
Expected result
All scoreboards display the same number.
Actual result
Areas simulated by the player have a higher value on the scoreboard than that of the tickingArea.
Related issues
relates to
Attachments
Comments


I reproduced this running the test world for <10 minutes while updating the ticket. By 10,000 ticks there was a noticeable difference.
The problems described in MCPE-40601 and MCPE-73059 may have been partially due to this issue.

Can confirm this happens in singleplayer and with BDS

Code Analysis (BDS 1.16.100): The code analysis in the report is incorrect. Those two functions are not responsible for ticking chunks.
`TickingAreaView::tick()` is the important function to pay attention to. This is the function that gets called every game tick to tick all the chunks in a ticking area. There is a bool flag passed to `TickingAreaView::tick()`, and that function does something different depending on whether the flag is TRUE or FALSE. I believe it's this flag that is responsible for chunks in ticking areas sometimes not ticking.
`TickingAreaListBase::tick()` ticks all the ticking areas in a dimension and is responsible for setting the flag that gets passed to `TickingAreaView::tick()`. For each ticking area, this flag is true once every 20 ticks, but not all ticking areas will have the flag set at the same time. (I'm simplifying here.)
When the flag is false, all chunks in the ticking area appear to be ticked normally. When the flag is true, the ticks seem to be getting ticked in a random order, or only a random subset get ticked. But I'm not quite sure of this.
My best guess is that ticking areas are supposed to work like this, but in practice they do not:
(1) Every tick: Tick all chunks in ticking area.
(2) Every 20 ticks, randomize the order of chunks in the ticking area.

Removed the inaccurate and incomplete "Code Analysis". Sorry for any confusion.