[Interest] Qt3D memory leaks

william.crocker at analog.com william.crocker at analog.com
Thu Apr 13 16:31:09 CEST 2017


On 04/13/2017 09:21 AM, Igor Mironchik wrote:
> Hi,
>
> Fresh data:
>
> First grow of the tree of 5 years - 135,1 MB
>
> First restart and 5 years - 173,8 MB
>
> Second restart - 203,6 MB
>
> Is it a fragmentation? Or something else?

Are those numbers for Linux or Windows?

>
>
> 13.04.2017 15:39, william.crocker at analog.com пишет:
>> On 04/13/2017 08:34 AM, Igor Mironchik wrote:
>>> Hi,
>>>
>>> Strange, I launch 3Dtree on Linux under valgrind:
>>>
>>> ==4321== HEAP SUMMARY:
>>> ==4321==     in use at exit: 439,965 bytes in 6,185 blocks
>>> ==4321==   total heap usage: 2,207,719 allocs, 2,201,534 frees, 1,241,469,509
>>> bytes allocated
>>> ==4321==
>>> ==4321== LEAK SUMMARY:
>>> ==4321==    definitely lost: 1,080 bytes in 10 blocks
>>> ==4321==    indirectly lost: 7,609 bytes in 55 blocks
>>> ==4321==      possibly lost: 416 bytes in 1 blocks
>>> ==4321==    still reachable: 430,860 bytes in 6,119 blocks
>>> ==4321==         suppressed: 0 bytes in 0 blocks
>>>
>>
>> Check the virtual image size on Linux,
>> just to make sure it is not growing as well.
>> That is the bottom line.
>>
>>> But on my Windows OS after each restart of tree I receive plus ~100MB additional
>>> memory.
>>>
>>> As I can see this memory still reachable. But why 3Dtree allocates more and more
>>> memory and doesn't use freed one?
>>>
>>> 13.04.2017 9:58, Sean Harmer пишет:
>>>> Hi,
>>>>
>>>> On 13/04/2017 07:09, Igor Mironchik wrote:
>>>>> Hello,
>>>>>
>>>>> 3Dtree has been updated. Now autumn is animated. Removed hand-made
>>>>> classes of leaf geometry and mesh. Now example uses ready mesh prepared
>>>>> in Blender. Modified a little constants of the tree. Example looks nice.
>>>>> This is a benchmark of your video card, because leafs and branches are
>>>>> stand alone objects (QEntity). For example 5 years tree has ~ 900
>>>>> objects. My Intel Pentium with Intel HD graphics normally paint only 5
>>>>> years tree, 6 years tree starts to slow down.
>>>>
>>>> Yes, at present each entity with a material/geometry renderer combo gets
>>>> translated to an OpenGL draw call. We are looking to add batching (similar to
>>>> how Qt Quick 2 works) but it's not there yet.
>>>>
>>>> If you don't need to address each individual leaf/branch in your object model.
>>>> E.g. if you're just rendering them, then you can get *much* better performance
>>>> by using instanced rendering.
>>>>
>>>> Essentially you have one entity representing all leaves. This entity contains
>>>> the material and geometry renderer as normal. The positions and any other
>>>> custom properties that vary between instances (rotation, leaf size, leaf
>>>> colour etc) should be placed into an additional attribute/buffer and provided
>>>> to the geometry renderer. On this attribute, set the divisor property to 1
>>>> meaning that 1 piece of data maps to 1 instance of the leave in the scene.
>>>> With this approach you will be able to render 10,000's leaves in a single draw
>>>> call. It maps through to a call to glDrawElementsInstanced() in case you want
>>>> to read up on it. Essentially you're moving the for loop over each leaf on to
>>>> the GPU.
>>>>
>>>> Typically, you'd have your data for the leaves in an array in C++ and use this
>>>> to populate the leaf instance buffer.
>>>>
>>>> The plan is to have a batcher that uses this instancing facility.
>>>>
>>>> Cheers,
>>>>
>>>> Sean
>>>>
>>>>>
>>>>> And one more - now you can rotate the tree with the left mouse button.
>>>>>
>>>>>
>>>>> 11.04.2017 12:15, Igor Mironchik пишет:
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> I fixed a little 3Dtree. Now branches positions are correct. And I
>>>>>> know that not all leafs is visible (this is because leaf geometry is
>>>>>> implemented as plain which renders only on one side).
>>>>>>
>>>>>>
>>>>>> 10.04.2017 13:20, Igor Mironchik пишет:
>>>>>>>
>>>>>>> Hello,
>>>>>>>
>>>>>>> I guess that Qt3D has huge memory leaks.
>>>>>>>
>>>>>>> You can check it on this example: https://github.com/igormironchik/3Dtree
>>>>>>>
>>>>>>> It's 3D tree, that grows year by year.
>>>>>>>
>>>>>>> By default tree will grow 5 years (5 minutes).
>>>>>>>
>>>>>>> When tree grown you can restart tree. And here I delete all resources:
>>>>>>>
>>>>>>> void
>>>>>>>
>>>>>>> MainWindowPrivate::createTree()
>>>>>>> {
>>>>>>> if(m_tree)
>>>>>>> {
>>>>>>> for(constauto&e:m_rootEntity->childNodes())
>>>>>>> e->deleteLater();
>>>>>>> }
>>>>>>> m_tree=newBranch(m_startPos,m_endPos,c_startBranchRadius,
>>>>>>> true,m_rootEntity);
>>>>>>> m_tree->setAge(0.0f);
>>>>>>> m_tree->updatePosition();
>>>>>>> m_tree->placeLeafs();
>>>>>>> }
>>>>>>>
>>>>>>> But a lot of memory are eaten.
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Interest mailing list
>>>>> Interest at qt-project.org
>>>>> http://lists.qt-project.org/mailman/listinfo/interest
>>>>>
>>>>
>>>
>>> _______________________________________________
>>> Interest mailing list
>>> Interest at qt-project.org
>>> http://lists.qt-project.org/mailman/listinfo/interest
>>
>> _______________________________________________
>> Interest mailing list
>> Interest at qt-project.org
>> http://lists.qt-project.org/mailman/listinfo/interest
>
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest




More information about the Interest mailing list