[Interest] Qt3D memory leaks

Igor Mironchik igor.mironchik at gmail.com
Thu Apr 13 17:31:15 CEST 2017


Hi,


13.04.2017 17:55, Igor Mironchik пишет:
>
> Am I right that QEntity doesn't delete its children on destruction and 
> just removes them from scene?

I asked this in context of QEntity::addComponent()...

Seems that entity doesn't delete anything. And documentation is unclear 
in it:

voidQEntity::addComponent(QComponent <qt3dcore-qcomponent.html>*comp)

Adds a new reference to the component comp.

Note: If the Qt3DCore::QComponent <qt3dcore-qcomponent.html> has no 
parent, the Qt3DCore::QEntity <qt3dcore-qentity.html> will set itself as 
its parent thereby taking ownership of the component.


As I can guess it doesn't take ownership. Because of it I have few leaks 
at exit but not in restart of tree...

>
>>
>> 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
>>
>> _______________________________________________
>> Interest mailing list
>> Interest at qt-project.org
>> http://lists.qt-project.org/mailman/listinfo/interest
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20170413/77cce7fa/attachment.html>


More information about the Interest mailing list