ust.git
14 years agoReplace __COUNTER__ with the more portable __LINE__
Pierre-Marc Fournier [Wed, 13 Jan 2010 19:33:20 +0000 (14:33 -0500)] 
Replace __COUNTER__ with the more portable __LINE__

Also, change visibility of marker structs so they are visible
only to the current compilation unit. This allows to have the same
marker on the same line in two different files. It however does not
allow to have two identical (channel and name) markers on the same line
of the same file.

14 years agoremove save_ip stub
Pierre-Marc Fournier [Mon, 11 Jan 2010 22:21:02 +0000 (17:21 -0500)] 
remove save_ip stub

14 years agofix saving of marker format
Pierre-Marc Fournier [Mon, 11 Jan 2010 20:03:50 +0000 (15:03 -0500)] 
fix saving of marker format

14 years agomake initialization of marker struct completely static
Pierre-Marc Fournier [Thu, 7 Jan 2010 19:29:49 +0000 (14:29 -0500)] 
make initialization of marker struct completely static

14 years agofix macro indentation
Pierre-Marc Fournier [Thu, 7 Jan 2010 19:25:57 +0000 (14:25 -0500)] 
fix macro indentation

14 years agocomplete ip saving code
Pierre-Marc Fournier [Thu, 7 Jan 2010 17:00:41 +0000 (12:00 -0500)] 
complete ip saving code

14 years agoremove usage of the marker_addr section
Pierre-Marc Fournier [Thu, 7 Jan 2010 17:00:19 +0000 (12:00 -0500)] 
remove usage of the marker_addr section

14 years agofix comment
Pierre-Marc Fournier [Thu, 7 Jan 2010 04:05:56 +0000 (23:05 -0500)] 
fix comment

14 years agofirst take on the save ip on x86-32
Pierre-Marc Fournier [Thu, 10 Dec 2009 20:37:07 +0000 (15:37 -0500)] 
first take on the save ip on x86-32

14 years agoMake 64 bit compilation on 32 bit compiler possible
Pedro Alves [Thu, 7 Jan 2010 03:33:32 +0000 (22:33 -0500)] 
Make 64 bit compilation on 32 bit compiler possible

This patch is to be able to build ust with `i686-unknown-pc-gnu-gcc -m64', that
is, 32-bit compiler, 64-bit multilib.

14 years agoRemove absolute path from libust.so
Pedro Alves [Thu, 7 Jan 2010 03:28:21 +0000 (22:28 -0500)] 
Remove absolute path from libust.so

I noticed that the libust.so ld script is installed to the same directory as
libust.so.0 and libust-initializer.o, so removing the absolute paths from them
allows linking with a libust.so that isn't in the sysroot or installed under
/usr/, like e.g., in a DESTDIR directory.  This was useful for testing a
release with everything extracted some randome prefix, e.g., libust.so in
$RANDOM_UNPACK_DIR/usr/lib, and pointing LD_LIBRARY_PATH to
$RANDOM_UNPACK_DIR/usr/lib.

14 years agoupdate README
Pierre-Marc Fournier [Wed, 6 Jan 2010 21:29:49 +0000 (16:29 -0500)] 
update README

14 years agochange inline to __inline__ for better compatibility
Pierre-Marc Fournier [Fri, 18 Dec 2009 20:28:37 +0000 (15:28 -0500)] 
change inline to __inline__ for better compatibility

14 years agoadd is_marker_enabled function from lttng kt
Pierre-Marc Fournier [Fri, 18 Dec 2009 20:05:23 +0000 (15:05 -0500)] 
add is_marker_enabled function from lttng kt

14 years agoport fix from lttng kernel tracer 0.92
Pierre-Marc Fournier [Fri, 18 Dec 2009 19:23:55 +0000 (14:23 -0500)] 
port fix from lttng kernel tracer 0.92

14 years agoadd asm to save regs on x86-32, for gdb
Pierre-Marc Fournier [Mon, 14 Dec 2009 07:15:27 +0000 (02:15 -0500)] 
add asm to save regs on x86-32, for gdb

14 years agoAdd test for compilation of libust against a shared library
Pierre-Marc Fournier [Mon, 14 Dec 2009 07:17:34 +0000 (02:17 -0500)] 
Add test for compilation of libust against a shared library

14 years agoAdd dummy marker and tracepoint to libust-initializer
Pierre-Marc Fournier [Mon, 14 Dec 2009 07:10:01 +0000 (02:10 -0500)] 
Add dummy marker and tracepoint to libust-initializer

Without these, the __start... and __stop... symbols are
not defined, and compilation fails with an obscure relocation
message. A more elegant solution should be found.

14 years agoForce -fPIC build of libust-initializer.o
Pierre-Marc Fournier [Mon, 14 Dec 2009 07:08:45 +0000 (02:08 -0500)] 
Force -fPIC build of libust-initializer.o

This is needed for linking it to shared libraries.

14 years agoFix compilation of libust-initializer.o
Pierre-Marc Fournier [Mon, 14 Dec 2009 07:06:18 +0000 (02:06 -0500)] 
Fix compilation of libust-initializer.o

The explicit rule in /Makefile.am to build libust-initializer.o was
not being considered. This is because programs that depend on it
were being built before it, triggering the use of an implicit rule
to build it.

Changing SUBDIRS in /Makefile.am to include "." insures
libust-initializer.o is built first with the right rule.

14 years agomore fixes of conditional compilation of gdb support
Pierre-Marc Fournier [Wed, 9 Dec 2009 19:10:05 +0000 (14:10 -0500)] 
more fixes of conditional compilation of gdb support

14 years agofix conditional compilation of gdb support
Pierre-Marc Fournier [Wed, 9 Dec 2009 18:55:03 +0000 (13:55 -0500)] 
fix conditional compilation of gdb support

14 years agoprobe.h: fix warning
Pierre-Marc Fournier [Tue, 8 Dec 2009 20:01:32 +0000 (15:01 -0500)] 
probe.h: fix warning

14 years agosimple_include: fix warning
Pierre-Marc Fournier [Tue, 8 Dec 2009 20:01:20 +0000 (15:01 -0500)] 
simple_include: fix warning

14 years agomove probe stuff to probe.h, to have it available in system wide headers
Pierre-Marc Fournier [Tue, 8 Dec 2009 19:51:55 +0000 (14:51 -0500)] 
move probe stuff to probe.h, to have it available in system wide headers

14 years agotracepoint.h: fix header macro name
Pierre-Marc Fournier [Tue, 8 Dec 2009 19:34:47 +0000 (14:34 -0500)] 
tracepoint.h: fix header macro name

14 years agofix gdb integration bug
Pierre-Marc Fournier [Tue, 8 Dec 2009 18:03:55 +0000 (13:03 -0500)] 
fix gdb integration bug

14 years agofix warning
Pierre-Marc Fournier [Mon, 7 Dec 2009 20:57:24 +0000 (15:57 -0500)] 
fix warning

14 years agofix 32 bit support by conditionally compiling gdb support
Pierre-Marc Fournier [Mon, 7 Dec 2009 20:54:40 +0000 (15:54 -0500)] 
fix 32 bit support by conditionally compiling gdb support

must define CONFIG_UST_GDB_INTEGRATION for gdb support to be enabled

14 years agomarker.h: change header #define macro name
Pierre-Marc Fournier [Mon, 7 Dec 2009 20:52:16 +0000 (15:52 -0500)] 
marker.h: change header #define macro name

14 years agofix save_last_tsc() and last_tsc_overflow() args
Pierre-Marc Fournier [Mon, 7 Dec 2009 19:23:22 +0000 (14:23 -0500)] 
fix save_last_tsc() and last_tsc_overflow() args

15 years agoRewrite last GPL bits in relay.c and relay.h
Pierre-Marc Fournier [Tue, 20 Oct 2009 18:08:52 +0000 (14:08 -0400)] 
Rewrite last GPL bits in relay.c and relay.h

Also update other files accordingly.

15 years agomark 32 bit support as broken
Pierre-Marc Fournier [Thu, 12 Nov 2009 21:23:24 +0000 (16:23 -0500)] 
mark 32 bit support as broken

15 years agoadd very simple compilation test
Pierre-Marc Fournier [Wed, 11 Nov 2009 22:03:08 +0000 (17:03 -0500)] 
add very simple compilation test

15 years agoconfigure.ac: use $host_cpu, not $target_cpu
Pierre-Marc Fournier [Wed, 11 Nov 2009 21:29:13 +0000 (16:29 -0500)] 
configure.ac: use $host_cpu, not $target_cpu

15 years agofix static initialization so out of tree make distcheck works
Pierre-Marc Fournier [Wed, 11 Nov 2009 20:55:34 +0000 (15:55 -0500)] 
fix static initialization so out of tree make distcheck works

15 years agostatic initializer: make cross-compilable
Pierre-Marc Fournier [Wed, 11 Nov 2009 20:45:00 +0000 (15:45 -0500)] 
static initializer: make cross-compilable

15 years agoFix libust-initializer.o build
Jan Blunck [Thu, 5 Nov 2009 15:41:24 +0000 (16:41 +0100)] 
Fix libust-initializer.o build

For the include path the $top_builddir variable was used which should be the
$top_srcdir instead.

Signed-off-by: Jan Blunck <jblunck@suse.de>
15 years agoLink tests against libust-initializer.o as well
Jan Blunck [Thu, 5 Nov 2009 15:24:09 +0000 (16:24 +0100)] 
Link tests against libust-initializer.o as well

I don't find a proper way to let the libtool Automake magic automatically
link against the initializer object as well. Therefore I need to add it
manually to each testcase.

Signed-off-by: Jan Blunck <jblunck@suse.de>
15 years agoMake references to __{start,stop}___{markers,tracepoints} weak
Jan Blunck [Tue, 27 Oct 2009 10:07:39 +0000 (11:07 +0100)] 
Make references to __{start,stop}___{markers,tracepoints} weak

When using the linker script approach for initialization of the libust
library we unconditionally call __markers_init()/__tracepoints_init().
If one is using only tracepoints or only markers the init call fails
because of undefined references to the linker generated symbols for the
__markers or __tracepoints section (__start___markers, ...). Since we use
the symbols just for the size and the start of the section it is safe to
use weak symbols in this case: if the size if zero nothing get read anyway.

Signed-off-by: Jan Blunck <jblunck@suse.de>
15 years agoFix include path when compiling libust-initializer.c
Jan Blunck [Mon, 26 Oct 2009 13:59:35 +0000 (14:59 +0100)] 
Fix include path when compiling libust-initializer.c

Otherwise it does not find the headers if they are not installed already.

Signed-off-by: Jan Blunck <jblunck@suse.de>
15 years agoAdd linker script and libust initializer object
Jan Blunck [Thu, 5 Nov 2009 17:13:18 +0000 (18:13 +0100)] 
Add linker script and libust initializer object

This adds a libust initializer object which gets linked automagically if
you link against libust.so, which is a linker skript from now on. The
object file just ensures that the libust is initialized properly without
forcing the user of the library to care about calling MARKER_LIB and
TRACEPOINT_LIB explicitly.

Signed-off-by: Jan Blunck <jblunck@suse.de>
15 years agorevert installation of tracer.h, but keep ust.h
Pierre-Marc Fournier [Wed, 11 Nov 2009 21:47:06 +0000 (16:47 -0500)] 
revert installation of tracer.h, but keep ust.h

15 years agosave registers: fix small problems
Pierre-Marc Fournier [Wed, 4 Nov 2009 04:26:18 +0000 (23:26 -0500)] 
save registers: fix small problems

- Don't put C code at the beginning of save save_registers macro, as
  it will change the registers in unpredictable ways. Therefore, test
  whether ust_reg_stack_ptr has been initialized in assembly code.
- Save rflags at the begginning of the stub because using the test
  instruction may change its content.

15 years agoupdate .gitignore
Pierre-Marc Fournier [Wed, 4 Nov 2009 03:02:25 +0000 (22:02 -0500)] 
update .gitignore

15 years agoinstall tracer.h, add new ust/ust.h
Pierre-Marc Fournier [Wed, 4 Nov 2009 03:01:33 +0000 (22:01 -0500)] 
install tracer.h, add new ust/ust.h

15 years agosave registers: update
Pierre-Marc Fournier [Tue, 3 Nov 2009 23:46:43 +0000 (18:46 -0500)] 
save registers: update

15 years agoprocessor.h: save rflags
Pierre-Marc Fournier [Mon, 2 Nov 2009 21:16:53 +0000 (16:16 -0500)] 
processor.h: save rflags

15 years agoadd serialize_to_text() function
Pierre-Marc Fournier [Thu, 29 Oct 2009 04:59:55 +0000 (00:59 -0400)] 
add serialize_to_text() function

For gdb static tracepoints.

15 years agousttrace: add comments to describe start sequence of ustd
Pierre-Marc Fournier [Wed, 28 Oct 2009 04:19:38 +0000 (00:19 -0400)] 
usttrace: add comments to describe start sequence of ustd

15 years agousttrace: reorganise error messages for ustd not found
Pierre-Marc Fournier [Wed, 28 Oct 2009 04:17:56 +0000 (00:17 -0400)] 
usttrace: reorganise error messages for ustd not found

15 years agoustd: fix opening mode of pidfile to support writing to fifos
Pierre-Marc Fournier [Wed, 28 Oct 2009 04:12:09 +0000 (00:12 -0400)] 
ustd: fix opening mode of pidfile to support writing to fifos

The fifo is opened in write-only in order to block until someone
opens it.

15 years agousttrace: oops: $(USTDPID) -> $USTDPID
Pierre-Marc Fournier [Wed, 28 Oct 2009 03:31:53 +0000 (23:31 -0400)] 
usttrace: oops: $(USTDPID) -> $USTDPID

15 years agoMake usttrace work when it isn't installed
Jan Blunck [Tue, 27 Oct 2009 12:25:17 +0000 (13:25 +0100)] 
Make usttrace work when it isn't installed

usttrace needs to detect when to use the installed libraries and when it
is invoked in the repository itself. Otherwise usttrace does not work
when it is installed in /usr/bin.

Signed-off-by: Jan Blunck <jblunck@suse.de>
15 years agofix build and out of tree build
Pierre-Marc Fournier [Tue, 27 Oct 2009 23:52:50 +0000 (19:52 -0400)] 
fix build and out of tree build

15 years agomove processor.h to include/ust dir
Pierre-Marc Fournier [Tue, 27 Oct 2009 23:18:36 +0000 (19:18 -0400)] 
move processor.h to include/ust dir

15 years agojava: fixes
Pierre-Marc Fournier [Tue, 27 Oct 2009 23:14:55 +0000 (19:14 -0400)] 
java: fixes

15 years agoMerge branch 'for-pierre-marc' of git://git.infradead.org/users/jblunck/ust
Pierre-Marc Fournier [Tue, 27 Oct 2009 22:58:15 +0000 (18:58 -0400)] 
Merge branch 'for-pierre-marc' of git://git.infradead.org/users/jblunck/ust

Fixed conflicts:
include/ust/marker.h

15 years agoalways initialize statically the .location field of struct marker to NULL
Pierre-Marc Fournier [Tue, 27 Oct 2009 22:33:15 +0000 (18:33 -0400)] 
always initialize statically the .location field of struct marker to NULL

Constructors later write the real location value.

15 years agorename registers.h -> processor.h
Pierre-Marc Fournier [Tue, 27 Oct 2009 22:32:52 +0000 (18:32 -0400)] 
rename registers.h -> processor.h

15 years agotrace_mark: pass register values to probe
Pierre-Marc Fournier [Tue, 27 Oct 2009 21:36:58 +0000 (17:36 -0400)] 
trace_mark: pass register values to probe

This should be more efficient, disableable or done inside the probe. For GDB static tracepoints.

15 years agomarkers: save marker location in struct marker
Pierre-Marc Fournier [Tue, 27 Oct 2009 21:33:04 +0000 (17:33 -0400)] 
markers: save marker location in struct marker

This is for gdb static tracepoints.

15 years agoregisters.h: update
Pierre-Marc Fournier [Tue, 27 Oct 2009 21:22:04 +0000 (17:22 -0400)] 
registers.h: update

15 years agoregisters.h: improve registers saving
Pierre-Marc Fournier [Mon, 26 Oct 2009 21:13:21 +0000 (17:13 -0400)] 
registers.h: improve registers saving

15 years agoadd registers.h
Pierre-Marc Fournier [Mon, 26 Oct 2009 20:58:56 +0000 (16:58 -0400)] 
add registers.h

15 years agousttrace: deal correctly with ustd creation and termination
Pierre-Marc Fournier [Mon, 26 Oct 2009 14:07:11 +0000 (10:07 -0400)] 
usttrace: deal correctly with ustd creation and termination

15 years agomarkers: add comment
Pierre-Marc Fournier [Mon, 26 Oct 2009 13:52:14 +0000 (09:52 -0400)] 
markers: add comment

15 years agoMove kernelcompat.h to include/ust/ and share.h, usterr.h to include/
Jan Blunck [Sun, 25 Oct 2009 13:57:47 +0000 (14:57 +0100)] 
Move kernelcompat.h to include/ust/ and share.h, usterr.h to include/

kernelcompat.h is included by marker.h and tracepoint.h therefore it should
be in include/ust/ as well. Move shared headers to include/ as well.

Signed-off-by: Jan Blunck <jblunck@suse.de>
15 years agoMove immediate.h, marker.h and tracepoint.h to include/ust/
Jan Blunck [Sun, 25 Oct 2009 12:57:45 +0000 (13:57 +0100)] 
Move immediate.h, marker.h and tracepoint.h to include/ust/

Move the primary header files to a common location and install them with
ust/ prefix in /usr/include.

Signed-off-by: Jan Blunck <jblunck@suse.de>
15 years agoRemove localerr.h
Jan Blunck [Fri, 23 Oct 2009 18:58:48 +0000 (20:58 +0200)] 
Remove localerr.h

localerr.h is only including usterr.h so remove it and replace it.

Signed-off-by: Jan Blunck <jblunck@suse.de>
15 years agoAdd some missing headers and files for make dist
Jan Blunck [Fri, 23 Oct 2009 18:35:36 +0000 (20:35 +0200)] 
Add some missing headers and files for make dist

This commit adds missing headers and other files to let make dist and install
work as necessry for packaging of ust.

Signed-off-by: Jan Blunck <jblunck@suse.de>
15 years agoTemporary remove Java support
Jan Blunck [Fri, 23 Oct 2009 16:17:03 +0000 (18:17 +0200)] 
Temporary remove Java support

SInce UST.c and UST.h are missing in the java/ directory remove the Java
support for the moment.

Signed-off-by: Jan Blunck <jblunck@suse.de>
15 years agoFix waiting for ustd on shutdown
Jan Blunck [Sun, 18 Oct 2009 20:39:24 +0000 (22:39 +0200)] 
Fix waiting for ustd on shutdown

When starting the daemon use a fifo instead of a pidfile. Otherwise the start
races against the reading of the pidfile. During shutdown we should wait for
all the existing background shells (there is only one) instead of waiting
for the pid of the daemon process.

Signed-off-by: Jan Blunck <jblunck@suse.de>
15 years agoREADME: update installation instructions
Pierre-Marc Fournier [Tue, 20 Oct 2009 18:06:21 +0000 (14:06 -0400)] 
README: update installation instructions

15 years agofix porting bug
Pierre-Marc Fournier [Thu, 15 Oct 2009 22:50:51 +0000 (18:50 -0400)] 
fix porting bug

15 years agousttrace: use ustd in daemon mode, sparing a sleep and removing a race
Pierre-Marc Fournier [Tue, 13 Oct 2009 23:16:33 +0000 (19:16 -0400)] 
usttrace: use ustd in daemon mode, sparing a sleep and removing a race

The race was that usttrace waited for 0.5s for the daemon (started in
background) to settle before starting the command to trace. If the
daemon needed more than 0.5s to settle, the connection would fail.

Now, it is guaranteed to succeed.

15 years agousttrace: enhance
Pierre-Marc Fournier [Tue, 13 Oct 2009 23:15:58 +0000 (19:15 -0400)] 
usttrace: enhance

15 years agotests/fork: updates
Pierre-Marc Fournier [Tue, 13 Oct 2009 23:12:45 +0000 (19:12 -0400)] 
tests/fork: updates

15 years agoustd: add support for --pidfile
Pierre-Marc Fournier [Tue, 13 Oct 2009 23:09:27 +0000 (19:09 -0400)] 
ustd: add support for --pidfile

15 years agoustd: add daemon mode
Pierre-Marc Fournier [Tue, 13 Oct 2009 21:55:01 +0000 (17:55 -0400)] 
ustd: add daemon mode

15 years agoimmediately create listener thread on process creation
Pierre-Marc Fournier [Tue, 13 Oct 2009 21:47:24 +0000 (17:47 -0400)] 
immediately create listener thread on process creation

It is complex to create a thread properly inside a signal handler.
Leave this aside for now. This optimization can always be added
later.

15 years agoimprove create_listener()
Pierre-Marc Fournier [Tue, 13 Oct 2009 21:20:07 +0000 (17:20 -0400)] 
improve create_listener()

15 years agotracectl.c: minor cleanup
Pierre-Marc Fournier [Tue, 13 Oct 2009 21:18:22 +0000 (17:18 -0400)] 
tracectl.c: minor cleanup

15 years agoremove unneeded noinline's
Pierre-Marc Fournier [Tue, 13 Oct 2009 21:17:01 +0000 (17:17 -0400)] 
remove unneeded noinline's

15 years agomodify the commit logic to indicate the reason for which an event was dropped
Pierre-Marc Fournier [Tue, 13 Oct 2009 21:15:06 +0000 (17:15 -0400)] 
modify the commit logic to indicate the reason for which an event was dropped

These changes were designed by Mathieu Desnoyers.

15 years agoset the reader side of the buffer-ready pipe non-blocking (experimental)
Pierre-Marc Fournier [Tue, 13 Oct 2009 21:13:49 +0000 (17:13 -0400)] 
set the reader side of the buffer-ready pipe non-blocking (experimental)

15 years agoustctl: update UST_COMPONENT
Pierre-Marc Fournier [Tue, 13 Oct 2009 21:10:10 +0000 (17:10 -0400)] 
ustctl: update UST_COMPONENT

This was forgotten when the tool was renamed.

15 years agoremove unneeded constructor priority
Pierre-Marc Fournier [Tue, 13 Oct 2009 21:01:07 +0000 (17:01 -0400)] 
remove unneeded constructor priority

15 years agoupdate build system to find automatically installed kcompat and urcu
Pierre-Marc Fournier [Fri, 9 Oct 2009 22:52:35 +0000 (18:52 -0400)] 
update build system to find automatically installed kcompat and urcu

15 years agoupdate README
Pierre-Marc Fournier [Tue, 6 Oct 2009 17:43:00 +0000 (13:43 -0400)] 
update README

15 years agousttrace: fix arg error handling
Pierre-Marc Fournier [Tue, 6 Oct 2009 00:15:18 +0000 (20:15 -0400)] 
usttrace: fix arg error handling

15 years agoREADME: add section on libinterfork
Pierre-Marc Fournier [Mon, 5 Oct 2009 20:16:12 +0000 (16:16 -0400)] 
README: add section on libinterfork

15 years agorename ust -> ustctl
Pierre-Marc Fournier [Mon, 5 Oct 2009 20:15:32 +0000 (16:15 -0400)] 
rename ust -> ustctl

15 years agousttrace: improve
Pierre-Marc Fournier [Mon, 5 Oct 2009 20:02:29 +0000 (16:02 -0400)] 
usttrace: improve

15 years agominor refactor of ustd to avoid deadlock
Pierre-Marc Fournier [Mon, 5 Oct 2009 19:55:19 +0000 (15:55 -0400)] 
minor refactor of ustd to avoid deadlock

Previously, we could have a deadlock between ustd and libust:

- libust connects to the ustd socket and waits for a reply
- while ustd is sending commands to the same libust to get
  information about a buffer

To fix this, info about a buffer to collect is retrieved from within
a different thread than the one that processes incoming commands.

15 years agoadd fork2
Pierre-Marc Fournier [Mon, 5 Oct 2009 19:54:07 +0000 (15:54 -0400)] 
add fork2

15 years agolibust: never inline functions that may be called from external components
Pierre-Marc Fournier [Mon, 5 Oct 2009 19:48:52 +0000 (15:48 -0400)] 
libust: never inline functions that may be called from external components

15 years agouse liburcu-bp
Pierre-Marc Fournier [Mon, 5 Oct 2009 19:40:54 +0000 (15:40 -0400)] 
use liburcu-bp

15 years agoustd: add fixme
Pierre-Marc Fournier [Thu, 1 Oct 2009 22:24:07 +0000 (18:24 -0400)] 
ustd: add fixme

15 years agoustd: fix warning
Pierre-Marc Fournier [Thu, 1 Oct 2009 22:23:54 +0000 (18:23 -0400)] 
ustd: fix warning

This page took 0.037032 seconds and 4 git commands to generate.