summaryrefslogtreecommitdiff
path: root/HACKING_ES
blob: 7173a242f565e1d157e6d6cb9e7d235a2e37c04d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
Tips and pointers (*berylhackingtips):

*Una diminuta porcion de Beryl es la magia actual del OpenGL, la 
mayoria del trabajo; manipulamiento de los "datos principales 
estructurados", (CompScreen, CompWindow)... el trabajo con Callbacks, (el 
nucleo es una bestia diferente). El estructuramiento de datos 
apropiadamente, es mucho mas relevante que algoritmos 
impresionantes.

*IPCS puede ser usado para la intercomunicacion entre los plugins, 
vease: beryl-core/src/ipcs.c, y Cube/Rotate son dos buenos ejemplos. 
Evite el uso de esto, ya que es lento y ata los plugins de maneras no 
deseadas, y no esperadas.

*La raiz de toda maldad es la optimizacion prematura, use profile 
preferentemente, esto le ahorrara tiempo de perdida en optimizacion. 
Para hacer profile de beryl lo puede compilar con -pg (CFLAGS="-pg" 
./configure; make; blah blah), cuando beryl se cerrara; arrojara en el 
directorio de trabajo 'gmon.out' . Desde ese directorio ejecute gprof 
/destino/de/beryl/ejecutable > berylprof, luego puede ver el profile en 
un editor de texto, o en una herramienta de profile como kprof 
(altamente recomendado).

* WRAP/UNWRAP trabaja un poco mejor como stack de sorts, examine un 
backtrace del gdb para hacer las cosas claras. Esto es relativamente 
inflexible y las ideas para mejoras posteriores a 0.2.0 son bienvenidas.

* Beryl puede ser debugeado sin colgar el sistema, compile con simbolos 
debugging (-g) y ejecutelo en tty con gdb beryl, configure breakpoints 
con 'break function' ejecute con 'run'; cuando X se cuelgue debido al 
break use alt+sysrq+r luego ctrl+alt+f1 para obtener al tty, examine 
cosas, y continue con la ejecucion.

* Enlazar iteraciones o sentencias (o lo que sea) desde; un-unos plugins, 
seteos de nucleo, seteos de plugins 
individuales, o seteos de intervalo, etc..> hacia otros',  es malo y debe 
ser evitado. 
'Escriba (programas) para hacer una cosa y para hacerla bien'.

* Como regla evite los pixel shaders ya que no estan expuestos en version 
actual AIGLX . A' la water.

* Los plugins deberan trabajar dentro del nucleo, al mismo tiempo... los 
cambios al nucleo puede hacerse para acomodar ventajas especificas; como 
por ejemplo el cubo transparente.

A HACER:
*Las optimizaciones son siempre bienvenidas, el benchmark no es 
horrorosamente preciso, pero sin embargo, si usted nota constantemente 
una mejora de ~10-20 FPS , o un decremento en picos de lag , o algo que 
no es mas de '1 FPS al rotar el cubo a la izquierda publiquelo,
en el peor de los casos sera revertido.

* Enlace de tecla para remplazar ventanas (que corra a traves del 
algoritmo placement ), seria facil de implementar y una caracteristica 
muy util. Puntos extra en el caso de que la ventana vuele hacia la nueva 
posicion.     

* Comentar el codigo! no solamente ayuda a todos en sus tareas, te ayuda 
a ti a entender los lineamientos de codigo.

* Permitir al plugin anotar (anotate), dibujar directamente sobre la 
textura de la ventana. Esto deberia involucrar procing drawWindowTexture 
en beryl-plugins/src/neg.c , y bindings en contexto de renderizacion 
opengl hacia la ventana GLXPixmap, mas alla de esto, es muy similar al 
resto de annotate.

* Mejorar las descripciones cortas (short descriptions), probablemente 
involucre (long descriptions), sera mas valorado debido a que son 
movidos a tooltips.

* Sabes de alguna manera de agilizar IPCS??

* Refractar algunos de los codigos en su lugar, (es un codigo spaghetti 
de momento).

* Contribuir al I18N

* Trabajar en kberylsettings, sobre PyQT settings manager en los 
branches.

* Un arreglo de tiempo de retraso a  Opacify, para que no 
dispare el efecto de inmediato. Ver el ejemplo 
beryl-plugins/src/plane.c, parte funcional CompTimeoutHandle, bastante 
simple, void * closure es pasado al callback. Hacer esto configurable.

* Agregar CompOptionFont a los settings

* Busca funciones a las que se pueda agregar entrelineas... 
use __attribute__((always_inline)) para forzar interlineado,
 inclusive sin la funcion:  -finline-functions

* Exonerar! ventanas especificas como parte del menu esmerald de 
decoraciones de ventana . Te acuerdas de esta configuracion de 
ventanas? fijate en todo kwin.

* Fijate al usar, macros DESEADAS/NODESEADAS para los argumentos if/else 
en bucles anidados, con una alta discriminacion hacia uno o lo otro. Usa 
Profile para encontrar dichas areas, optimizar prematuramente es malo!.	 

* Participar, discurriendo y planeando en IRC, es invaluable. Hagese 
parte de la comunidad de desarrolladores de beryl, no sea un perro 
vagabundo!

* ..Y mas cosas/cosillas/demases aqui!