[Interest] Qt3D memory leaks

Igor Mironchik igor.mironchik at gmail.com
Thu Apr 13 16:31:54 CEST 2017



13.04.2017 17:31, william.crocker at analog.com пишет:
> 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?

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




More information about the Interest mailing list