Godot: Estouro de buffer ao instanciar 14563 PackedScene.

Criado em 21 abr. 2017  ·  3Comentários  ·  Fonte: godotengine/godot

Sistema operacional ou dispositivo - versão Godot:
Linux - Ubuntu Mate 16.10 - Godot 2.1.2 estável

Descrição do problema:
Eu estava enfrentando um uso excessivo de RAM com meu protótipo de jogo Godot 2D e decidi descobrir a causa disso. Eu queria ver quantas instâncias do PackedScene Godot poderia controlar sem estourar minha RAM.

Construí uma cena principal com uma arquitetura simples:

---> Node // Script attached  here
       +----> YSort

Também construí uma cena chamada "Hexa.tscn", com uma arquitetura também simples:

---> Area2D
       +-----> Sprite

Em um script anexado ao nó raiz da cena principal, tento adicionar o máximo de instância de cena "Hexa" possível no nó YSort.

Se eu adicionar 14562 instâncias de cena Hexa, tudo correrá bem (~ 3% de uso de 1 CPU, ~ 115Mo de uso de RAM, que representa: 29655 objetos, 3 recursos, 29127 nós)

Mas se eu adicionar 14563 instâncias de cena Hexa, encontro um erro de estouro de buffer, conforme a seguir:

Na guia Erro do depurador:

Type: Error
Description:
Time: 0:00:00:0458
C Error: Condition '(buffer_end+room_needed) >= buffer_size' is true. returned ERR_OUT_OF_MEMORY
C Source: core/message_queue.ccp:54
C function: push_call

Na guia Output do depurador:

failed method: Sprite:_update_callback target ID: 29681
TOTAL BYTES: 1048560
NULL count: 0
CALL _sort_children: 14564
CALL_update_callback: 29126

Isso é um inseto ?

Passos para reproduzir:
Execute o projeto Godot anexado no editor Godot para ver o erro no depurador.

Link para projeto de exemplo mínimo:
memtest.tar.gz

archived enhancement junior job core

Comentários muito úteis

Oi @Faless !

Fico feliz em saber que esse problema aparentemente não é um bug, mas apenas uma configuração incorreta de uma configuração de minha parte.

Obrigado por você pela iluminação :)

Seria interessante melhorar a mensagem de erro, a fim de informar o usuário sobre esse ajuste de configuração de message_queue_size_kb?

Todos 3 comentários

Você deseja aumentar o tamanho máximo da fila de mensagens em:

project settings -> core -> message_queue_size_kb
para algo mais alto.

Em qualquer caso, eu evitaria criar tantos nós por motivos de desempenho.

Oi @Faless !

Fico feliz em saber que esse problema aparentemente não é um bug, mas apenas uma configuração incorreta de uma configuração de minha parte.

Obrigado por você pela iluminação :)

Seria interessante melhorar a mensagem de erro, a fim de informar o usuário sobre esse ajuste de configuração de message_queue_size_kb?

Gostaria de informar que no Godot 3.1 Alpha 2 a mensagem de erro é ainda pior:

image

Levei algum tempo para perceber que atingi o limite da fila de mensagens.

Esta página foi útil?
0 / 5 - 0 avaliações