CutefishOS app startup speed optimizer.
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Olli Leppanen a91b7a9f5c Changes: Language corrections into documentation
RevBy:TrustMe
15 years ago
data Changes: Use #include <MDeclarativeCache> in boosted-qml examples. 15 years ago
debian Changes: Language corrections into documentation 15 years ago
doc Changes: Language corrections into documentation 15 years ago
examples/boosted-qml Changes: Deprecate MDeclarativeCache::applicationDirPath() and 15 years ago
meego New: MeeGo packaging updated to 0.29.1 15 years ago
scripts Changes: separate link/dlopen library configuration for MeeGo 15 years ago
src Fixes: NB#267391 - Boosting prevents QML apps from dropping the GL context on background 15 years ago
tests Changes: Performance test modified. Tracking pixel co-ordinates changed. 15 years ago
.gitignore Changes: First public release 16 years ago
AUTHORS New: AUTHORS 15 years ago
CMakeLists.txt Fixes: NB#238947 - The API documentation main page for QML Booster needs to be updated 15 years ago
COPYING.LESSER Changes: First public release 16 years ago
INSTALL Changes: First public release 16 years ago
README Changes: Stuff to the README added. 15 years ago
TODO Changes: First public release 16 years ago
configure Changes: First public release 16 years ago

README

What is applauncherd?
==============================

Applauncherd is a daemon that helps to launch applications faster by
preloading dynamically linked libraries and caching stuff (MComponentCache). It also saves memory, because all launched
applications share certain resources.

Applauncherd also provides support for a splash screen and fast single
instance launches.

Some technical details are explained below. 

Install applauncherd-doc for the Doxygen-based user documentation.
See INSTALL on how to build applauncherd and the documentation.

Technical overview
==============================

The applauncherd daemon is started by UpStart as part of XSession, that
is, at the same level as the desktop (MeeGo Touch homescreen).
Applauncherd forks the will-be-application process, "booster", before
knowing which application is going to be launched next. There can be
different kinds of boosters optimized for different kinds of
applications, e.g. Qt, Meego Touch, QML. 

In the current architecture boosters are loaded as plugins. Applauncherd
searches for plugin libraries in /usr/lib/applaucherd/lib*booster.so and
forks a new process for each booster to wait for launch commands from the
user.

The user uses the launcher always through a special invoker program. The
invoker (/usr/bin/invoker) tells booster process to load an application
binary via a socket connection. 

The application to be launched via applauncherd should be compiled as a
shared library or a position independent executable (-pie) and it should
always export main(). There's also a "booster" for all applications to
be used with the splash screen. In that case exec() is used.

Technical details
==============================

Before loading, booster process changes its security credentials so that
the code in the application binary will be executed with the correct credentials. Loading the binary is done with dlopen(), and therefore the
application needs to be compiled and linked as a shared library or a
position independent executable. The booster process also sets the
environment variables. Finally, it finds the main function in the
application binary with dlsym() and calls the main() with the command
line arguments given by the invoker. 

The launcher itself is a library that is loaded by a small C-program (/usr/bin/applauncherd.bin). Idea behind this is to avoid linking the
launcher binary to any libraries. This allows us to fully control how
(with which flags) the preloaded libraries are opened with dlopen(). 

Aegis platform security is used to protect the socket connection between
invoker and launcher. Currently this works only on the target device. It
is automatically disabled by the build scripts when compiling on x86. 

Each application type (currently Qt and MeeGo Touch) has its own booster
process. When booster launches the application by calling the "main()"
function, applauncherd will create new booster process of that type.

Booster processes do some initializations that cannot be shared among
other processes and therefore have to be done after forking. This allows,
for instance, instantiating a MeeGo Touch application before knowing the
name of the application. Then the booster process waits for a connection
from the invoker with the information about which application should be
launched. 

With MeeGo Touch booster it's possible to fetch certain objects from a cache. This will significantly reduce the startup time of an application.