-
Notifications
You must be signed in to change notification settings - Fork 4
Aumentando pool de Operações de 2048 para 131072 #101
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Não vejo problema
@@ -30,7 +30,7 @@ | |||
{ | |||
private final PoolOperacoesGraficas POOL_OPERACOES_GRAFICAS = new PoolOperacoesGraficas(); | |||
|
|||
private final OperacaoGrafica[] operacoes = new OperacaoGrafica[2048]; | |||
private final OperacaoGrafica[] operacoes = new OperacaoGrafica[131072]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
2 coisas para revisar:
1 - porque você está usando este número? É algo místico? Um número cabalístico? Você jogou búzios e o resultado foi 131072? 😄
2 - O array deveria ter sido declarado com a constante QUANTIDADE_MAXIMA_OPERACOES ao invés de usar o número cabalístico diretamente. Assim, para mudar a quantidade de operações bastaria alterar o valor da constante.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@elieserdejesus, aumentamos este valor para que fosse possível rodar o exemplo que desenha a nave do Star Wars em 3D. Do jeito que estava ele estourava o cache porque a nave tem muitos vértices pra serem desenhados ao mesmo tempo.
131072 = 2^17
Na verdade, poderíamos transformar este vetor em uma lista, assim não precisaríamos nos preocupar com o tamanho. Bastaria definir um tamanho inicial. Porém, tirando o exemplo da nave, que extrapola bastante o padrão, ter um vetor com este tamanho deve dar conta do recado.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@noschang , se usar uma lista é importante lembrar de não usar iterador (implícita (com for each) ou explicitamente) para evitar zilhões de instâncias de iteradores alocadas durante a execução.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@elieserdejesus, bem lembrado. Mas acho que por hora podemos manter como vetor. Depois desse release podemos fazer uma discussão entre a equipe e ver se vale a pena transformar em lista.
Pontos positivos:
- Tira a limitação que o usuário tem na quantidade de operações gráficas que são permitidas
- Permite renderizar exemplos mais complexos
- Elimina a necessidade de termos que modificar o código fonte toda vezes que algum exemplo quebrar por causa do tamanho da cache
Pontos negativos:
- Introduzirá um pequeno "lag" no programa toda vez que a lista precisar aumentar de tamanho (o que imagino que não deve ocorre com tanta frequência)
- Sem um limitador de tamaho, o usuário poderá instanciar operações gráficas até estourar o Heap do Studio, que hoje está fixado em 256MB
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@elieserdejesus , @noschang Devo dar merge então???
@@ -30,7 +30,7 @@ | |||
{ | |||
private final PoolOperacoesGraficas POOL_OPERACOES_GRAFICAS = new PoolOperacoesGraficas(); | |||
|
|||
private final OperacaoGrafica[] operacoes = new OperacaoGrafica[2048]; | |||
private final OperacaoGrafica[] operacoes = new OperacaoGrafica[131072]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@AlissonSteffens , falta declarar o array usando a constante ao invés de usar o número mágico.
Porque alguns exemplos davam "out off bounds" e não fica legal pro 3D
Resolve o problema com o Exemplo Fractal da Issue UNIVALI-LITE/Portugol-Studio#183