Commit cbedde09 authored by Anthony Liguori's avatar Anthony Liguori
Browse files

Merge remote-tracking branch 'stefanha/tracing' into staging

* stefanha/tracing:
  vga: add trace event for ppm_save
  console: add some trace events
  maintainers: Add docs/tracing.txt to Tracing
  docs: correct ./configure line in tracing.txt
  trace: make trace_thread_create() use its function arg
  tracetool: Omit useless QEMU_*_ENABLED() check
  trace: Provide a per-event status define for conditional compilation
parents 1d2cb1a2 72750018
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -548,6 +548,7 @@ Tracing
M: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
S: Maintained
F: trace/
F: docs/tracing.txt
T: git://github.com/stefanha/qemu.git tracing

Checkpatch
+3 −0
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@
#include "qdict.h"
#include "notify.h"
#include "monitor.h"
#include "trace.h"

/* keyboard/mouse support */

@@ -202,11 +203,13 @@ static inline DisplaySurface* qemu_create_displaysurface(DisplayState *ds, int w

static inline DisplaySurface* qemu_resize_displaysurface(DisplayState *ds, int width, int height)
{
    trace_displaysurface_resize(ds, ds->surface, width, height);
    return ds->allocator->resize_displaysurface(ds->surface, width, height);
}

static inline void qemu_free_displaysurface(DisplayState *ds)
{
    trace_displaysurface_free(ds, ds->surface);
    ds->allocator->free_displaysurface(ds->surface);
}

+41 −7
Original line number Diff line number Diff line
@@ -9,7 +9,7 @@ for debugging, profiling, and observing execution.

1. Build with the 'simple' trace backend:

    ./configure --trace-backend=simple
    ./configure --enable-trace-backend=simple
    make

2. Create a file with the events you want to trace:
@@ -98,12 +98,6 @@ respectively. This ensures portability between 32- and 64-bit platforms.
4. Name trace events after their function.  If there are multiple trace events
   in one function, append a unique distinguisher at the end of the name.

5. If specific trace events are going to be called a huge number of times, this
   might have a noticeable performance impact even when the trace events are
   programmatically disabled. In this case you should declare the trace event
   with the "disable" property, which will effectively disable it at compile
   time (using the "nop" backend).

== Generic interface and monitor commands ==

You can programmatically query and control the dynamic state of trace events
@@ -234,3 +228,43 @@ probes:
                      --target-type system \
                      --target-arch x86_64 \
                      <trace-events >qemu.stp

== Trace event properties ==

Each event in the "trace-events" file can be prefixed with a space-separated
list of zero or more of the following event properties.

=== "disable" ===

If a specific trace event is going to be invoked a huge number of times, this
might have a noticeable performance impact even when the event is
programmatically disabled.

In this case you should declare such event with the "disable" property. This
will effectively disable the event at compile time (by using the "nop" backend),
thus having no performance impact at all on regular builds (i.e., unless you
edit the "trace-events" file).

In addition, there might be cases where relatively complex computations must be
performed to generate values that are only used as arguments for a trace
function. In these cases you can use the macro 'TRACE_${EVENT_NAME}_ENABLED' to
guard such computations and avoid its compilation when the event is disabled:

    #include "trace.h"  /* needed for trace event prototype */
    
    void *qemu_vmalloc(size_t size)
    {
        void *ptr;
        size_t align = QEMU_VMALLOC_ALIGN;
    
        if (size < align) {
            align = getpagesize();
        }
        ptr = qemu_memalign(align, size);
        if (TRACE_QEMU_VMALLOC_ENABLED) { /* preprocessor macro */
            void *complex;
            /* some complex computations to produce the 'complex' value */
            trace_qemu_vmalloc(size, ptr, complex);
        }
        return ptr;
    }
+2 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@
#include "pixel_ops.h"
#include "qemu-timer.h"
#include "xen.h"
#include "trace.h"

//#define DEBUG_VGA
//#define DEBUG_VGA_MEM
@@ -2372,6 +2373,7 @@ int ppm_save(const char *filename, struct DisplaySurface *ds)
    int ret;
    char *linebuf, *pbuf;

    trace_ppm_save(filename, ds);
    f = fopen(filename, "wb");
    if (!f)
        return -1;
+9 −4
Original line number Diff line number Diff line
@@ -415,10 +415,8 @@ linetoh_dtrace()
    # Define an empty function for the trace event
    cat <<EOF
static inline void trace_$name($args) {
    if (QEMU_${nameupper}_ENABLED()) {
    QEMU_${nameupper}($argnames);
}
}
EOF
}

@@ -519,7 +517,7 @@ linetostap_end_dtrace()
# Process stdin by calling begin, line, and end functions for the backend
convert()
{
    local begin process_line end str disable
    local begin process_line end str name NAME enabled
    begin="lineto$1_begin_$backend"
    process_line="lineto$1_$backend"
    end="lineto$1_end_$backend"
@@ -534,8 +532,15 @@ convert()
        # Process the line.  The nop backend handles disabled lines.
        if has_property "$str" "disable"; then
            "lineto$1_nop" "$str"
            enabled=0
        else
            "$process_line" "$str"
            enabled=1
        fi
        if [ "$1" = "h" ]; then
            name=$(get_name "$str")
            NAME=$(echo $name | tr '[:lower:]' '[:upper:]')
            echo "#define TRACE_${NAME}_ENABLED ${enabled}"
        fi
    done

Loading