diff options
author | Kristian Lyngstol <kristian@bohemians.org> | 2007-06-22 14:58:59 +0200 |
---|---|---|
committer | Kristian Lyngstol <kristian@bohemians.org> | 2007-06-22 14:58:59 +0200 |
commit | dcebf95c5d7ab4e8511a034c23c00f09a9aa6cc6 (patch) | |
tree | cfdc1116e90479c51f06a3607c658288634dc635 | |
parent | 52f7454e1f475402680350622a1c1c330f50aced (diff) | |
download | Documentation-dcebf95c5d7ab4e8511a034c23c00f09a9aa6cc6.tar.gz Documentation-dcebf95c5d7ab4e8511a034c23c00f09a9aa6cc6.tar.bz2 |
Whitespace
-rw-r--r-- | HACKING | 89 |
1 files changed, 64 insertions, 25 deletions
@@ -1,38 +1,72 @@ Tips and pointers (*berylhackingtips): -* A very small portion of beryl is the actual OpenGL magic, most of working with plugins is manipulating the main data structures (CompScreen, CompWindow) and working with Callbacks, core is a different beast. Appropriate data structures are more important than impressive algorithms! - -* IPCS can be used for communication between plugins see beryl-core/src/ipcs.c and Cube/Rotate for good examples. Avoid use of this however as it is both slow and ties plugins together in ways you may not wish. - -* Premature optimization is the root of all evil, profile before needlessly wasting time on optimization. To profile beryl you can compile with -pg (CFLAGS="-pg" ./configure; make; blabla) and when beryl exits it drops a 'gmon.out' in it's working directory. From that directory run gprof /path/to/beryl/executable > berylprof, and you can view the profile in a text editor, or a profile tool such as kprof (highly recommended). - -* WRAP/UNWRAP works a bit like a stack of sorts, examine a backtrace from gdb to make things clear. This is relatively inflexible and ideas for improvement post 0.2.0 are welcome. - -* Beryl can be debugged without crashing your system, compile with debugging symbols (-g) and run in a tty with gdb beryl, set breakpoints with 'break function' run with 'run' when X freezes because of the break use alt+sysrq+r then ctrl+alt+f1 to get to the tty, examine things, and continue execution. - -* Tieing things whether it be plugins, settings/core, or settings/an individual plugin is bad and should be avoided. 'Write (programs) to do one thing and do it well'. - -* As a rule avoid pixel shaders as they aren't exposed by AIGLX as of current. Ala water. - -* Plugins should work within core, at the same time changes to core can be made to accomadate a specific feature such as transparent cube. +* A very small portion of beryl is the actual OpenGL magic, most of working + with plugins is manipulating the main data structures (CompScreen, + CompWindow) and working with Callbacks, core is a different beast. + Appropriate data structures are more important than impressive algorithms! + +* IPCS can be used for communication between plugins see + beryl-core/src/ipcs.c and Cube/Rotate for good examples. Avoid use of this + however as it is both slow and ties plugins together in ways you may not + wish. + +* Premature optimization is the root of all evil, profile before needlessly + wasting time on optimization. To profile beryl you can compile with -pg + (CFLAGS="-pg" ./configure; make; blabla) and when beryl exits it drops a + 'gmon.out' in it's working directory. From that directory run gprof + /path/to/beryl/executable > berylprof, and you can view the profile in a + text editor, or a profile tool such as kprof (highly recommended). + +* WRAP/UNWRAP works a bit like a stack of sorts, examine a backtrace from gdb + to make things clear. This is relatively inflexible and ideas for + improvement post 0.2.0 are welcome. + +* Beryl can be debugged without crashing your system, compile with debugging + symbols (-g) and run in a tty with gdb beryl, set breakpoints with 'break + function' run with 'run' when X freezes because of the break use + alt+sysrq+r then ctrl+alt+f1 to get to the tty, examine things, and + continue execution. + +* Tieing things whether it be plugins, settings/core, or settings/an + individual plugin is bad and should be avoided. 'Write (programs) to do one + thing and do it well'. + +* As a rule avoid pixel shaders as they aren't exposed by AIGLX as of + current. Ala water. + +* Plugins should work within core, at the same time changes to core can be + made to accomadate a specific feature such as transparent cube. TODO: -* Optimizations are always welcome, benchmark isn't horribly accurate but if you consistently notice a ~10-20 FPS improvement, or a decrease in lag spikes , or something that's not '1 FPS more when rotating cube left' go ahead and commit it, worst case is it's reverted. Things to look at: Switcher, particle system in animation, input enabled zoom. +* Optimizations are always welcome, benchmark isn't horribly accurate but if + you consistently notice a ~10-20 FPS improvement, or a decrease in lag + spikes , or something that's not '1 FPS more when rotating cube left' go + ahead and commit it, worst case is it's reverted. Things to look at: + Switcher, particle system in animation, input enabled zoom. -* A keybinding to replace windows (run through placement algorithm again) would be an easy to implement and useful feature. Bonus points if the windows fly to their new positions. +* A keybinding to replace windows (run through placement algorithm again) + would be an easy to implement and useful feature. Bonus points if the + windows fly to their new positions. -* Comment code! not only does this help everyone in their tasks it helps you learn the codebase, pretty easy to do. +* Comment code! not only does this help everyone in their tasks it helps you + learn the codebase, pretty easy to do. -* Allow annotate to draw directly on to the window texture. This would involve procing drawWindowTexture as in beryl-plugins/src/neg.c and binding an opengl rendering context to the windows GLXPixmap, beyond that it's pretty similar to the rest of annotate. +* Allow annotate to draw directly on to the window texture. This would involve + procing drawWindowTexture as in beryl-plugins/src/neg.c and binding an + opengl rendering context to the windows GLXPixmap, beyond that it's pretty + similar to the rest of annotate. -* Improve plugin short descriptions, maybe make long descriptions a bit more wordy as well as they are being moved to tooltips. +* Improve plugin short descriptions, maybe make long descriptions a bit more + wordy as well as they are being moved to tooltips. * Anyway to speed up IPCS? * Refactor some of the code in place, it's spaghetti code as it stands. -* Exempt specific windows from window decorations as part of the emerald menu. Remember this setting for windows? look at all kwin has for stuff like this, duplicating a small amount would be nice. +* Exempt specific windows from window decorations as part of the emerald menu. + Remember this setting for windows? look at all kwin has for stuff like this, + duplicating a small amount would be nice. * Contribute to I18N @@ -40,17 +74,22 @@ TODO: * Add CompOptionFont to settings -* Look for functions that can be inlined. use __attribute__((always_inline)) to force the inline even without -finline-functions +* Look for functions that can be inlined. use __attribute__((always_inline)) to + force the inline even without -finline-functions -* Look at using LIKELY/UNLIKELY macros for if/else statements in tight loops with a high discrimination towards one or the other. Profile to find such areas, premature optimization is bad. +* Look at using LIKELY/UNLIKELY macros for if/else statements in tight loops + with a high discrimination towards one or the other. Profile to find such + areas, premature optimization is bad. -* Participate in discussion and planning on IRC, it's invaluable. Make yourself a part of the beryl development community rather than a lone wolf. +* Participate in discussion and planning on IRC, it's invaluable. Make yourself + a part of the beryl development community rather than a lone wolf. * Take lengthy discussions on the mailinglist. * Add more code documentation in Documentation/ about interfaces used by Beryl. -* Look in Documentation/TODO-Multiscreen for multiscreen bugs to fix during 0.3.x +* Look in Documentation/TODO-Multiscreen for multiscreen bugs to fix during + 0.3.x * Add more stuff here! |