oprofile 0.9.6
Copy in the rest of the oprofile 0.9.6 tree so we have a source
copy to match the prebuilt binaries that are checked into
external/.
Change-Id: Iaac327571d5d583594a4194973bf256569061048
diff --git a/gui/Makefile.am b/gui/Makefile.am
new file mode 100644
index 0000000..ba5e27c
--- /dev/null
+++ b/gui/Makefile.am
@@ -0,0 +1,43 @@
+SUBDIRS = ui
+
+dist_sources = \
+ oprof_start.cpp \
+ oprof_start_config.cpp \
+ oprof_start_util.cpp \
+ oprof_start_main.cpp \
+ oprof_start.h \
+ oprof_start_config.h \
+ oprof_start_util.h
+
+EXTRA_DIST = $(dist_sources)
+
+if have_qt
+
+AM_CPPFLAGS = \
+ @QT_INCLUDES@ \
+ -I ${top_srcdir}/libop \
+ -I ${top_srcdir}/libutil++ \
+ -I ${top_srcdir}/libutil
+
+AM_CXXFLAGS = @OP_CXXFLAGS@
+
+bin_PROGRAMS = oprof_start
+
+oprof_start_SOURCES = $(dist_sources)
+nodist_oprof_start_SOURCES = oprof_start.moc.cpp
+oprof_start_LDADD = \
+ ../libutil++/libutil++.a \
+ ../libop/libop.a \
+ ../libutil/libutil.a \
+ ui/liboprof_start.a \
+ @QT_LDFLAGS@ \
+ @QT_LIB@ \
+ @X_LIBS@
+
+oprof_start.moc.cpp: ${top_srcdir}/gui/oprof_start.h
+ $(MOC) -o $@ ${top_srcdir}/gui/oprof_start.h
+
+clean-local:
+ rm -f oprof_start.moc.cpp
+
+endif
diff --git a/gui/Makefile.in b/gui/Makefile.in
new file mode 100644
index 0000000..251b9f1
--- /dev/null
+++ b/gui/Makefile.in
@@ -0,0 +1,669 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@have_qt_TRUE@bin_PROGRAMS = oprof_start$(EXEEXT)
+subdir = gui
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/binutils.m4 \
+ $(top_srcdir)/m4/builtinexpect.m4 \
+ $(top_srcdir)/m4/cellspubfdsupport.m4 \
+ $(top_srcdir)/m4/compileroption.m4 \
+ $(top_srcdir)/m4/configmodule.m4 \
+ $(top_srcdir)/m4/copyifchange.m4 $(top_srcdir)/m4/docbook.m4 \
+ $(top_srcdir)/m4/extradirs.m4 $(top_srcdir)/m4/findkernel.m4 \
+ $(top_srcdir)/m4/kerneloption.m4 \
+ $(top_srcdir)/m4/kernelversion.m4 \
+ $(top_srcdir)/m4/mallocattribute.m4 \
+ $(top_srcdir)/m4/poptconst.m4 \
+ $(top_srcdir)/m4/precompiledheader.m4 $(top_srcdir)/m4/qt.m4 \
+ $(top_srcdir)/m4/resultyn.m4 $(top_srcdir)/m4/sstream.m4 \
+ $(top_srcdir)/m4/typedef.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(bin_PROGRAMS)
+am__oprof_start_SOURCES_DIST = oprof_start.cpp oprof_start_config.cpp \
+ oprof_start_util.cpp oprof_start_main.cpp oprof_start.h \
+ oprof_start_config.h oprof_start_util.h
+am__objects_1 = oprof_start.$(OBJEXT) oprof_start_config.$(OBJEXT) \
+ oprof_start_util.$(OBJEXT) oprof_start_main.$(OBJEXT)
+@have_qt_TRUE@am_oprof_start_OBJECTS = $(am__objects_1)
+@have_qt_TRUE@nodist_oprof_start_OBJECTS = oprof_start.moc.$(OBJEXT)
+oprof_start_OBJECTS = $(am_oprof_start_OBJECTS) \
+ $(nodist_oprof_start_OBJECTS)
+@have_qt_TRUE@oprof_start_DEPENDENCIES = ../libutil++/libutil++.a \
+@have_qt_TRUE@ ../libop/libop.a ../libutil/libutil.a \
+@have_qt_TRUE@ ui/liboprof_start.a
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(oprof_start_SOURCES) $(nodist_oprof_start_SOURCES)
+DIST_SOURCES = $(am__oprof_start_SOURCES_DIST)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-exec-recursive install-info-recursive \
+ install-recursive installcheck-recursive installdirs-recursive \
+ pdf-recursive ps-recursive uninstall-info-recursive \
+ uninstall-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BFD_LIBS = @BFD_LIBS@
+BUILD_JVMPI_AGENT_FALSE = @BUILD_JVMPI_AGENT_FALSE@
+BUILD_JVMPI_AGENT_TRUE = @BUILD_JVMPI_AGENT_TRUE@
+BUILD_JVMTI_AGENT_FALSE = @BUILD_JVMTI_AGENT_FALSE@
+BUILD_JVMTI_AGENT_TRUE = @BUILD_JVMTI_AGENT_TRUE@
+CAT_ENTRY_END = @CAT_ENTRY_END@
+CAT_ENTRY_START = @CAT_ENTRY_START@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATE = @DATE@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DOCBOOK_ROOT = @DOCBOOK_ROOT@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXTRA_CFLAGS_MODULE = @EXTRA_CFLAGS_MODULE@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAVA_HOMEDIR = @JAVA_HOMEDIR@
+KINC = @KINC@
+KSRC = @KSRC@
+KVERS = @KVERS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBERTY_LIBS = @LIBERTY_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MOC = @MOC@
+MODINSTALLDIR = @MODINSTALLDIR@
+OBJEXT = @OBJEXT@
+OPROFILE_DIR = @OPROFILE_DIR@
+OPROFILE_MODULE_ARCH = @OPROFILE_MODULE_ARCH@
+OP_CFLAGS = @OP_CFLAGS@
+OP_CXXFLAGS = @OP_CXXFLAGS@
+OP_DOCDIR = @OP_DOCDIR@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POPT_LIBS = @POPT_LIBS@
+PTRDIFF_T_TYPE = @PTRDIFF_T_TYPE@
+QT_INCLUDES = @QT_INCLUDES@
+QT_LDFLAGS = @QT_LDFLAGS@
+QT_LIB = @QT_LIB@
+QT_VERSION = @QT_VERSION@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZE_T_TYPE = @SIZE_T_TYPE@
+STRIP = @STRIP@
+UIC = @UIC@
+VERSION = @VERSION@
+XML_CATALOG = @XML_CATALOG@
+XSLTPROC = @XSLTPROC@
+XSLTPROC_FLAGS = @XSLTPROC_FLAGS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+have_qt_FALSE = @have_qt_FALSE@
+have_qt_TRUE = @have_qt_TRUE@
+have_xsltproc_FALSE = @have_xsltproc_FALSE@
+have_xsltproc_TRUE = @have_xsltproc_TRUE@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+kernel_support_FALSE = @kernel_support_FALSE@
+kernel_support_TRUE = @kernel_support_TRUE@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+topdir = @topdir@
+SUBDIRS = ui
+dist_sources = \
+ oprof_start.cpp \
+ oprof_start_config.cpp \
+ oprof_start_util.cpp \
+ oprof_start_main.cpp \
+ oprof_start.h \
+ oprof_start_config.h \
+ oprof_start_util.h
+
+EXTRA_DIST = $(dist_sources)
+@have_qt_TRUE@AM_CPPFLAGS = \
+@have_qt_TRUE@ @QT_INCLUDES@ \
+@have_qt_TRUE@ -I ${top_srcdir}/libop \
+@have_qt_TRUE@ -I ${top_srcdir}/libutil++ \
+@have_qt_TRUE@ -I ${top_srcdir}/libutil
+
+@have_qt_TRUE@AM_CXXFLAGS = @OP_CXXFLAGS@
+@have_qt_TRUE@oprof_start_SOURCES = $(dist_sources)
+@have_qt_TRUE@nodist_oprof_start_SOURCES = oprof_start.moc.cpp
+@have_qt_TRUE@oprof_start_LDADD = \
+@have_qt_TRUE@ ../libutil++/libutil++.a \
+@have_qt_TRUE@ ../libop/libop.a \
+@have_qt_TRUE@ ../libutil/libutil.a \
+@have_qt_TRUE@ ui/liboprof_start.a \
+@have_qt_TRUE@ @QT_LDFLAGS@ \
+@have_qt_TRUE@ @QT_LIB@ \
+@have_qt_TRUE@ @X_LIBS@
+
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .cpp .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign gui/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --foreign gui/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ if test -f $$p \
+ || test -f $$p1 \
+ ; then \
+ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+ else :; fi; \
+ done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+ rm -f "$(DESTDIR)$(bindir)/$$f"; \
+ done
+
+clean-binPROGRAMS:
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f $$p $$f"; \
+ rm -f $$p $$f ; \
+ done
+oprof_start$(EXEEXT): $(oprof_start_OBJECTS) $(oprof_start_DEPENDENCIES)
+ @rm -f oprof_start$(EXEEXT)
+ $(CXXLINK) $(oprof_start_LDFLAGS) $(oprof_start_OBJECTS) $(oprof_start_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oprof_start.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oprof_start.moc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oprof_start_config.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oprof_start_main.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oprof_start_util.Po@am__quote@
+
+.cpp.o:
+@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+ list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(mkdir_p) "$(distdir)/$$subdir" \
+ || exit 1; \
+ distdir=`$(am__cd) $(distdir) && pwd`; \
+ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+ (cd $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$top_distdir" \
+ distdir="$$distdir/$$subdir" \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(PROGRAMS)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(bindir)"; do \
+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+@have_qt_FALSE@clean-local:
+clean: clean-recursive
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool clean-local \
+ mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-libtool distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-info-am
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
+ clean clean-binPROGRAMS clean-generic clean-libtool \
+ clean-local clean-recursive ctags ctags-recursive distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-recursive distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-binPROGRAMS \
+ install-data install-data-am install-exec install-exec-am \
+ install-info install-info-am install-man install-strip \
+ installcheck installcheck-am installdirs installdirs-am \
+ maintainer-clean maintainer-clean-generic \
+ maintainer-clean-recursive mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool mostlyclean-recursive \
+ pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \
+ uninstall-binPROGRAMS uninstall-info-am
+
+
+@have_qt_TRUE@oprof_start.moc.cpp: ${top_srcdir}/gui/oprof_start.h
+@have_qt_TRUE@ $(MOC) -o $@ ${top_srcdir}/gui/oprof_start.h
+
+@have_qt_TRUE@clean-local:
+@have_qt_TRUE@ rm -f oprof_start.moc.cpp
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gui/oprof_start.cpp b/gui/oprof_start.cpp
new file mode 100644
index 0000000..0387136
--- /dev/null
+++ b/gui/oprof_start.cpp
@@ -0,0 +1,1071 @@
+/**
+ * @file oprof_start.cpp
+ * The GUI start main class
+ *
+ * @remark Copyright 2002 OProfile authors
+ * @remark Read the file COPYING
+ *
+ * @author Philippe Elie
+ * @author John Levon
+ */
+
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include <ctime>
+#include <cstdio>
+#include <cmath>
+#include <sstream>
+#include <iostream>
+#include <fstream>
+#include <algorithm>
+
+#include <qlineedit.h>
+#include <qlistview.h>
+#include <qcombobox.h>
+#include <qlistbox.h>
+#include <qfiledialog.h>
+#include <qbuttongroup.h>
+#include <qcheckbox.h>
+#include <qtabwidget.h>
+#include <qmessagebox.h>
+#include <qvalidator.h>
+#include <qlabel.h>
+#include <qpushbutton.h>
+#include <qheader.h>
+
+#include "config.h"
+#include "oprof_start.h"
+#include "op_config.h"
+#include "op_config_24.h"
+#include "string_manip.h"
+#include "op_cpufreq.h"
+#include "op_alloc_counter.h"
+#include "oprof_start_util.h"
+#include "file_manip.h"
+
+#include "op_hw_config.h"
+
+using namespace std;
+
+static char const * green_xpm[] = {
+"16 16 2 1",
+" c None",
+". c #00FF00",
+" ....... ",
+" ........... ",
+" ............. ",
+" ............. ",
+"............... ",
+"............... ",
+"............... ",
+"............... ",
+"............... ",
+"............... ",
+"............... ",
+" ............. ",
+" ............. ",
+" ........... ",
+" ....... ",
+" " };
+
+static char const * red_xpm[] = {
+"16 16 2 1",
+" c None",
+". c #FF0000",
+" ....... ",
+" ........... ",
+" ............. ",
+" ............. ",
+"............... ",
+"............... ",
+"............... ",
+"............... ",
+"............... ",
+"............... ",
+"............... ",
+" ............. ",
+" ............. ",
+" ........... ",
+" ....... ",
+" " };
+
+static QPixmap * green_pixmap;
+static QPixmap * red_pixmap;
+
+
+op_event_descr::op_event_descr()
+ :
+ counter_mask(0),
+ val(0),
+ unit(0),
+ min_count(0)
+{
+}
+
+
+oprof_start::oprof_start()
+ :
+ oprof_start_base(0, 0, false, 0),
+ event_count_validator(new QIntValidator(event_count_edit)),
+ current_event(0),
+ cpu_speed(op_cpu_frequency()),
+ total_nr_interrupts(0)
+{
+ green_pixmap = new QPixmap(green_xpm);
+ red_pixmap = new QPixmap(red_xpm);
+ vector<string> args;
+ args.push_back("--init");
+
+ if (do_exec_command(OP_BINDIR "/opcontrol", args))
+ exit(EXIT_FAILURE);
+
+ cpu_type = op_get_cpu_type();
+ op_nr_counters = op_get_nr_counters(cpu_type);
+
+ if (cpu_type == CPU_TIMER_INT) {
+ setup_config_tab->removePage(counter_setup_page);
+ } else {
+ fill_events();
+ }
+
+ op_interface interface = op_get_interface();
+ if (interface == OP_INTERFACE_NO_GOOD) {
+ QMessageBox::warning(this, 0, "Couldn't determine kernel"
+ " interface version");
+ exit(EXIT_FAILURE);
+ }
+ bool is_26 = interface == OP_INTERFACE_26;
+
+ if (is_26) {
+ note_table_size_edit->hide();
+ note_table_size_label->hide();
+ if (!op_file_readable("/dev/oprofile/backtrace_depth")) {
+ callgraph_depth_label->hide();
+ callgraph_depth_edit->hide();
+ }
+ } else {
+ callgraph_depth_label->hide();
+ callgraph_depth_edit->hide();
+ buffer_watershed_label->hide();
+ buffer_watershed_edit->hide();
+ cpu_buffer_size_label->hide();
+ cpu_buffer_size_edit->hide();
+ }
+
+ // setup the configuration page.
+ kernel_filename_edit->setText(config.kernel_filename.c_str());
+
+ no_vmlinux->setChecked(config.no_kernel);
+
+ buffer_size_edit->setText(QString().setNum(config.buffer_size));
+ buffer_watershed_edit->setText(QString().setNum(config.buffer_watershed));
+ cpu_buffer_size_edit->setText(QString().setNum(config.cpu_buffer_size));
+ note_table_size_edit->setText(QString().setNum(config.note_table_size));
+ callgraph_depth_edit->setText(QString().setNum(config.callgraph_depth));
+ verbose->setChecked(config.verbose);
+ separate_lib_cb->setChecked(config.separate_lib);
+ separate_kernel_cb->setChecked(config.separate_kernel);
+ separate_cpu_cb->setChecked(config.separate_cpu);
+ separate_thread_cb->setChecked(config.separate_thread);
+
+ // the unit mask check boxes
+ hide_masks();
+
+ event_count_edit->setValidator(event_count_validator);
+ QIntValidator * iv;
+ iv = new QIntValidator(OP_MIN_BUF_SIZE, OP_MAX_BUF_SIZE, buffer_size_edit);
+ buffer_size_edit->setValidator(iv);
+ iv = new QIntValidator(OP_MIN_NOTE_TABLE_SIZE, OP_MAX_NOTE_TABLE_SIZE, note_table_size_edit);
+ note_table_size_edit->setValidator(iv);
+ iv = new QIntValidator(0, INT_MAX, callgraph_depth_edit);
+ callgraph_depth_edit->setValidator(iv);
+ iv = new QIntValidator(0, INT_MAX, buffer_watershed_edit);
+ buffer_watershed_edit->setValidator(iv);
+ iv = new QIntValidator(0, OP_MAX_CPU_BUF_SIZE, cpu_buffer_size_edit);
+ cpu_buffer_size_edit->setValidator(iv);
+
+ // daemon status timer
+ startTimer(5000);
+ timerEvent(0);
+
+ resize(minimumSizeHint());
+
+ // force the pixmap re-draw
+ event_selected();
+}
+
+
+void oprof_start::fill_events()
+{
+ // we need to build the event descr stuff before loading the
+ // configuration because we use locate_event to get an event descr
+ // from its name.
+ struct list_head * pos;
+ struct list_head * events = op_events(cpu_type);
+
+ list_for_each(pos, events) {
+ struct op_event * event = list_entry(pos, struct op_event, event_next);
+
+ op_event_descr descr;
+
+ descr.counter_mask = event->counter_mask;
+ descr.val = event->val;
+ if (event->unit->num) {
+ descr.unit = event->unit;
+ } else {
+ descr.unit = 0;
+ }
+
+ descr.name = event->name;
+ descr.help_str = event->desc;
+ descr.min_count = event->min_count;
+
+ for (uint ctr = 0; ctr < op_nr_counters; ++ctr) {
+ uint count;
+
+ if (!(descr.counter_mask & (1 << ctr)))
+ continue;
+
+ if (cpu_type == CPU_RTC) {
+ count = 1024;
+ } else {
+ /* setting to cpu Hz / 2000 gives a safe value for
+ * all events, and a good one for most.
+ */
+ if (cpu_speed)
+ count = int(cpu_speed * 500);
+ else
+ count = descr.min_count * 100;
+ }
+
+ event_cfgs[descr.name].count = count;
+ event_cfgs[descr.name].umask = 0;
+ if (descr.unit)
+ event_cfgs[descr.name].umask = descr.unit->default_mask;
+ event_cfgs[descr.name].os_ring_count = 1;
+ event_cfgs[descr.name].user_ring_count = 1;
+ }
+
+ v_events.push_back(descr);
+ }
+
+ events_list->header()->hide();
+ events_list->setSorting(-1);
+
+ fill_events_listbox();
+
+ read_set_events();
+
+ // FIXME: why this ?
+ if (cpu_type == CPU_RTC)
+ events_list->setCurrentItem(events_list->firstChild());
+
+ load_config_file();
+}
+
+
+namespace {
+
+/// find the first item with the given text in column 0 or return NULL
+QListViewItem * findItem(QListView * view, char const * name)
+{
+ // Qt 2.3.1 does not have QListView::findItem()
+ QListViewItem * item = view->firstChild();
+
+ while (item && strcmp(item->text(0).latin1(), name))
+ item = item->nextSibling();
+
+ return item;
+}
+
+};
+
+
+void oprof_start::setup_default_event()
+{
+ struct op_default_event_descr descr;
+ op_default_event(cpu_type, &descr);
+
+ event_cfgs[descr.name].umask = descr.um;
+ event_cfgs[descr.name].count = descr.count;
+ event_cfgs[descr.name].user_ring_count = 1;
+ event_cfgs[descr.name].os_ring_count = 1;
+
+ QListViewItem * item = findItem(events_list, descr.name);
+ if (item)
+ item->setSelected(true);
+}
+
+
+void oprof_start::read_set_events()
+{
+ string name = get_config_filename(".oprofile/daemonrc");
+
+ ifstream in(name.c_str());
+
+ if (!in) {
+ setup_default_event();
+ return;
+ }
+
+ string str;
+
+ bool one_enabled = false;
+
+ while (getline(in, str)) {
+ string const val = split(str, '=');
+ string const name = str;
+
+ if (!is_prefix(name, "CHOSEN_EVENTS_"))
+ continue;
+
+ one_enabled = true;
+
+ // CHOSEN_EVENTS_#nr=CPU_CLK_UNHALTED:10000:0:1:1
+ vector<string> parts = separate_token(val, ':');
+
+ if (parts.size() != 5 && parts.size() != 2) {
+ cerr << "invalid configuration file\n";
+ // FIXME
+ exit(EXIT_FAILURE);
+ }
+
+ string ev_name = parts[0];
+ event_cfgs[ev_name].count =
+ op_lexical_cast<unsigned int>(parts[1]);
+
+ // CPU_CLK_UNHALTED:10000 is also valid
+ if (parts.size() == 5) {
+ event_cfgs[ev_name].umask =
+ op_lexical_cast<unsigned int>(parts[2]);
+ event_cfgs[ev_name].user_ring_count =
+ op_lexical_cast<unsigned int>(parts[3]);
+ event_cfgs[ev_name].os_ring_count =
+ op_lexical_cast<unsigned int>(parts[4]);
+ } else {
+ event_cfgs[ev_name].umask = 0;
+ event_cfgs[ev_name].user_ring_count = 1;
+ event_cfgs[ev_name].os_ring_count = 1;
+ }
+
+ QListViewItem * item = findItem(events_list, ev_name.c_str());
+ if (item)
+ item->setSelected(true);
+ }
+
+ // use default event if none set
+ if (!one_enabled)
+ setup_default_event();
+}
+
+
+void oprof_start::load_config_file()
+{
+ string name = get_config_filename(".oprofile/daemonrc");
+
+ ifstream in(name.c_str());
+ if (!in) {
+ if (!check_and_create_config_dir())
+ return;
+
+ ofstream out(name.c_str());
+ if (!out) {
+ QMessageBox::warning(this, 0, "Unable to open configuration "
+ "file ~/.oprofile/daemonrc");
+ }
+ return;
+ }
+
+ in >> config;
+}
+
+
+// user request a "normal" exit so save the config file.
+void oprof_start::accept()
+{
+ // record the previous settings
+ record_selected_event_config();
+
+ save_config();
+
+ QDialog::accept();
+}
+
+
+void oprof_start::closeEvent(QCloseEvent *)
+{
+ accept();
+}
+
+
+void oprof_start::timerEvent(QTimerEvent *)
+{
+ static time_t last = time(0);
+
+ daemon_status dstat;
+
+ flush_profiler_data_btn->setEnabled(dstat.running);
+ stop_profiler_btn->setEnabled(dstat.running);
+ start_profiler_btn->setEnabled(!dstat.running);
+ reset_sample_files_btn->setEnabled(!dstat.running);
+
+ if (!dstat.running) {
+ daemon_label->setText("Profiler is not running.");
+ return;
+ }
+
+ ostringstream ss;
+ ss << "Profiler running:";
+
+ time_t curr = time(0);
+ total_nr_interrupts += dstat.nr_interrupts;
+
+ if (curr - last)
+ ss << " (" << dstat.nr_interrupts / (curr - last) << " interrupts / second, total " << total_nr_interrupts << ")";
+
+ daemon_label->setText(ss.str().c_str());
+
+ last = curr;
+}
+
+
+void oprof_start::fill_events_listbox()
+{
+ setUpdatesEnabled(false);
+
+ for (vector<op_event_descr>::reverse_iterator cit = v_events.rbegin();
+ cit != v_events.rend(); ++cit) {
+ new QListViewItem(events_list, cit->name.c_str());
+ }
+
+ setUpdatesEnabled(true);
+ update();
+}
+
+
+void oprof_start::display_event(op_event_descr const & descr)
+{
+ setUpdatesEnabled(false);
+
+ setup_unit_masks(descr);
+ os_ring_count_cb->setEnabled(true);
+ user_ring_count_cb->setEnabled(true);
+ event_count_edit->setEnabled(true);
+
+ event_setting & cfg = event_cfgs[descr.name];
+
+ os_ring_count_cb->setChecked(cfg.os_ring_count);
+ user_ring_count_cb->setChecked(cfg.user_ring_count);
+ QString count_text;
+ count_text.setNum(cfg.count);
+ event_count_edit->setText(count_text);
+ event_count_validator->setRange(descr.min_count, max_perf_count());
+
+ setUpdatesEnabled(true);
+ update();
+}
+
+
+bool oprof_start::is_selectable_event(QListViewItem * item)
+{
+ if (item->isSelected())
+ return true;
+
+ selected_events.insert(item);
+
+ bool ret = false;
+ if (alloc_selected_events())
+ ret = true;
+
+ selected_events.erase(item);
+
+ return ret;
+}
+
+
+void oprof_start::draw_event_list()
+{
+ QListViewItem * cur;
+ for (cur = events_list->firstChild(); cur; cur = cur->nextSibling()) {
+ if (is_selectable_event(cur))
+ cur->setPixmap(0, *green_pixmap);
+ else
+ cur->setPixmap(0, *red_pixmap);
+ }
+}
+
+
+bool oprof_start::alloc_selected_events() const
+{
+ vector<op_event const *> events;
+
+ set<QListViewItem *>::const_iterator it;
+ for (it = selected_events.begin(); it != selected_events.end(); ++it)
+ events.push_back(find_event_by_name((*it)->text(0).latin1(),0,0));
+
+ size_t * map =
+ map_event_to_counter(&events[0], events.size(), cpu_type);
+
+ if (!map)
+ return false;
+
+ free(map);
+ return true;
+}
+
+void oprof_start::event_selected()
+{
+ // The deal is simple: QT lack of a way to know what item was the last
+ // (de)selected item so we record a set of selected items and diff
+ // it in the appropriate way with the previous list of selected items.
+
+ set<QListViewItem *> current_selection;
+ QListViewItem * cur;
+ for (cur = events_list->firstChild(); cur; cur = cur->nextSibling()) {
+ if (cur->isSelected())
+ current_selection.insert(cur);
+ }
+
+ // First remove the deselected item.
+ vector<QListViewItem *> new_deselected;
+ set_difference(selected_events.begin(), selected_events.end(),
+ current_selection.begin(), current_selection.end(),
+ back_inserter(new_deselected));
+ vector<QListViewItem *>::const_iterator it;
+ for (it = new_deselected.begin(); it != new_deselected.end(); ++it)
+ selected_events.erase(*it);
+
+ // Now try to add the newly selected item if enough HW resource exists
+ vector<QListViewItem *> new_selected;
+ set_difference(current_selection.begin(), current_selection.end(),
+ selected_events.begin(), selected_events.end(),
+ back_inserter(new_selected));
+ for (it = new_selected.begin(); it != new_selected.end(); ++it) {
+ selected_events.insert(*it);
+ if (!alloc_selected_events()) {
+ (*it)->setSelected(false);
+ selected_events.erase(*it);
+ } else {
+ current_event = *it;
+ }
+ }
+
+ draw_event_list();
+
+ if (current_event)
+ display_event(locate_event(current_event->text(0).latin1()));
+}
+
+
+void oprof_start::event_over(QListViewItem * item)
+{
+ op_event_descr const & descr = locate_event(item->text(0).latin1());
+
+ string help_str = descr.help_str.c_str();
+ if (!is_selectable_event(item)) {
+ help_str += " conflicts with:";
+
+ set<QListViewItem *>::const_iterator it;
+ for (it = selected_events.begin();
+ it != selected_events.end(); ) {
+ QListViewItem * temp = *it;
+ selected_events.erase(it++);
+ if (is_selectable_event(item)) {
+ help_str += " ";
+ help_str += temp->text(0).latin1();
+ }
+ selected_events.insert(temp);
+ }
+ }
+
+ event_help_label->setText(help_str.c_str());
+}
+
+
+/// select the kernel image filename
+void oprof_start::choose_kernel_filename()
+{
+ string name = kernel_filename_edit->text().latin1();
+ string result = do_open_file_or_dir(name, false);
+
+ if (!result.empty())
+ kernel_filename_edit->setText(result.c_str());
+}
+
+
+// this record the current selected event setting in the event_cfg[] stuff.
+// FIXME: need validation?
+void oprof_start::record_selected_event_config()
+{
+ if (!current_event)
+ return;
+
+ string name(current_event->text(0).latin1());
+
+ event_setting & cfg = event_cfgs[name];
+ op_event_descr const & curr = locate_event(name);
+
+ cfg.count = event_count_edit->text().toUInt();
+ cfg.os_ring_count = os_ring_count_cb->isChecked();
+ cfg.user_ring_count = user_ring_count_cb->isChecked();
+ cfg.umask = get_unit_mask(curr);
+}
+
+
+// validate and save the configuration (The qt validator installed
+// are not sufficient to do the validation)
+bool oprof_start::record_config()
+{
+ config.kernel_filename = kernel_filename_edit->text().latin1();
+ config.no_kernel = no_vmlinux->isChecked();
+
+ uint temp = buffer_size_edit->text().toUInt();
+ if (temp < OP_MIN_BUF_SIZE || temp > OP_MAX_BUF_SIZE) {
+ ostringstream error;
+
+ error << "buffer size out of range: " << temp
+ << " valid range is [" << OP_MIN_BUF_SIZE << ", "
+ << OP_MAX_BUF_SIZE << "]";
+
+ QMessageBox::warning(this, 0, error.str().c_str());
+
+ return false;
+ }
+ config.buffer_size = temp;
+
+ temp = buffer_watershed_edit->text().toUInt();
+ // watershed above half of buffer size make little sense.
+ if (temp > config.buffer_size / 2) {
+ ostringstream error;
+
+ error << "buffer watershed out of range: " << temp
+ << " valid range is [0 (use default), buffer size/2] "
+ << "generally 0.25 * buffer size is fine";
+
+ QMessageBox::warning(this, 0, error.str().c_str());
+
+ return false;
+ }
+ config.buffer_watershed = temp;
+
+ temp = cpu_buffer_size_edit->text().toUInt();
+ if ((temp != 0 && temp < OP_MIN_CPU_BUF_SIZE) ||
+ temp > OP_MAX_CPU_BUF_SIZE) {
+ ostringstream error;
+
+ error << "cpu buffer size out of range: " << temp
+ << " valid range is [" << OP_MIN_CPU_BUF_SIZE << ", "
+ << OP_MAX_CPU_BUF_SIZE << "] (size = 0: use default)";
+
+ QMessageBox::warning(this, 0, error.str().c_str());
+
+ return false;
+ }
+ config.cpu_buffer_size = temp;
+
+ temp = note_table_size_edit->text().toUInt();
+ if (temp < OP_MIN_NOTE_TABLE_SIZE || temp > OP_MAX_NOTE_TABLE_SIZE) {
+ ostringstream error;
+
+ error << "note table size out of range: " << temp
+ << " valid range is [" << OP_MIN_NOTE_TABLE_SIZE << ", "
+ << OP_MAX_NOTE_TABLE_SIZE << "]";
+
+ QMessageBox::warning(this, 0, error.str().c_str());
+
+ return false;
+ }
+ config.note_table_size = temp;
+
+ temp = callgraph_depth_edit->text().toUInt();
+ if (temp > INT_MAX) {
+ ostringstream error;
+
+ error << "callgraph depth out of range: " << temp
+ << " valid range is [" << 0 << ", "
+ << INT_MAX << "]";
+
+ QMessageBox::warning(this, 0, error.str().c_str());
+
+ return false;
+ }
+ config.callgraph_depth = temp;
+
+ config.verbose = verbose->isChecked();
+ config.separate_lib = separate_lib_cb->isChecked();
+ config.separate_kernel = separate_kernel_cb->isChecked();
+ config.separate_cpu = separate_cpu_cb->isChecked();
+ config.separate_thread = separate_thread_cb->isChecked();
+
+ return true;
+}
+
+
+void oprof_start::get_unit_mask_part(op_event_descr const & descr, uint num,
+ bool selected, uint & mask)
+{
+ if (!selected)
+ return;
+ if (num >= descr.unit->num)
+ return;
+
+ if (descr.unit->unit_type_mask == utm_bitmask)
+ mask |= descr.unit->um[num].value;
+ else
+ mask = descr.unit->um[num].value;
+}
+
+
+// return the unit mask selected through the unit mask check box
+uint oprof_start::get_unit_mask(op_event_descr const & descr)
+{
+ uint mask = 0;
+
+ if (!descr.unit)
+ return 0;
+
+ // mandatory mask is transparent for user.
+ if (descr.unit->unit_type_mask == utm_mandatory) {
+ mask = descr.unit->default_mask;
+ return mask;
+ }
+
+ get_unit_mask_part(descr, 0, check0->isChecked(), mask);
+ get_unit_mask_part(descr, 1, check1->isChecked(), mask);
+ get_unit_mask_part(descr, 2, check2->isChecked(), mask);
+ get_unit_mask_part(descr, 3, check3->isChecked(), mask);
+ get_unit_mask_part(descr, 4, check4->isChecked(), mask);
+ get_unit_mask_part(descr, 5, check5->isChecked(), mask);
+ get_unit_mask_part(descr, 6, check6->isChecked(), mask);
+ get_unit_mask_part(descr, 7, check7->isChecked(), mask);
+ get_unit_mask_part(descr, 8, check8->isChecked(), mask);
+ get_unit_mask_part(descr, 9, check9->isChecked(), mask);
+ get_unit_mask_part(descr, 10, check10->isChecked(), mask);
+ get_unit_mask_part(descr, 11, check11->isChecked(), mask);
+ get_unit_mask_part(descr, 12, check12->isChecked(), mask);
+ get_unit_mask_part(descr, 13, check13->isChecked(), mask);
+ get_unit_mask_part(descr, 14, check14->isChecked(), mask);
+ get_unit_mask_part(descr, 15, check15->isChecked(), mask);
+ return mask;
+}
+
+
+void oprof_start::hide_masks()
+{
+ check0->hide();
+ check1->hide();
+ check2->hide();
+ check3->hide();
+ check4->hide();
+ check5->hide();
+ check6->hide();
+ check7->hide();
+ check8->hide();
+ check9->hide();
+ check10->hide();
+ check11->hide();
+ check12->hide();
+ check13->hide();
+ check14->hide();
+ check15->hide();
+}
+
+
+void oprof_start::setup_unit_masks(op_event_descr const & descr)
+{
+ op_unit_mask const * um = descr.unit;
+
+ hide_masks();
+
+ if (!um || um->unit_type_mask == utm_mandatory)
+ return;
+
+ event_setting & cfg = event_cfgs[descr.name];
+
+ unit_mask_group->setExclusive(um->unit_type_mask == utm_exclusive);
+
+ for (size_t i = 0; i < um->num ; ++i) {
+ QCheckBox * check = 0;
+ switch (i) {
+ case 0: check = check0; break;
+ case 1: check = check1; break;
+ case 2: check = check2; break;
+ case 3: check = check3; break;
+ case 4: check = check4; break;
+ case 5: check = check5; break;
+ case 6: check = check6; break;
+ case 7: check = check7; break;
+ case 8: check = check8; break;
+ case 9: check = check9; break;
+ case 10: check = check10; break;
+ case 11: check = check11; break;
+ case 12: check = check12; break;
+ case 13: check = check13; break;
+ case 14: check = check14; break;
+ case 15: check = check15; break;
+ }
+ check->setText(um->um[i].desc);
+ if (um->unit_type_mask == utm_exclusive)
+ check->setChecked(cfg.umask == um->um[i].value);
+ else
+ check->setChecked(cfg.umask & um->um[i].value);
+
+ check->show();
+ }
+ unit_mask_group->setMinimumSize(unit_mask_group->sizeHint());
+ setup_config_tab->setMinimumSize(setup_config_tab->sizeHint());
+}
+
+
+uint oprof_start::max_perf_count() const
+{
+ return cpu_type == CPU_RTC ? OP_MAX_RTC_COUNT : OP_MAX_PERF_COUNT;
+}
+
+
+void oprof_start::on_flush_profiler_data()
+{
+ vector<string> args;
+ args.push_back("--dump");
+
+ if (daemon_status().running)
+ do_exec_command(OP_BINDIR "/opcontrol", args);
+ else
+ QMessageBox::warning(this, 0, "The profiler is not started.");
+}
+
+
+// user is happy of its setting.
+void oprof_start::on_start_profiler()
+{
+ // save the current settings
+ record_selected_event_config();
+
+ bool one_enable = false;
+
+ QListViewItem * cur;
+ for (cur = events_list->firstChild(); cur; cur = cur->nextSibling()) {
+ if (!cur->isSelected())
+ continue;
+
+ // the missing reference is intended: gcc 2.91.66 can compile
+ // "op_event_descr const & descr = ..." w/o a warning
+ op_event_descr const descr =
+ locate_event(cur->text(0).latin1());
+
+ event_setting & cfg = event_cfgs[cur->text(0).latin1()];
+
+ one_enable = true;
+
+ if (!cfg.os_ring_count && !cfg.user_ring_count) {
+ QMessageBox::warning(this, 0, "You must select to "
+ "profile at least one of user binaries/kernel");
+ return;
+ }
+
+ if (cfg.count < descr.min_count ||
+ cfg.count > max_perf_count()) {
+ ostringstream out;
+
+ out << "event " << descr.name << " count of range: "
+ << cfg.count << " must be in [ "
+ << descr.min_count << ", "
+ << max_perf_count()
+ << "]";
+
+ QMessageBox::warning(this, 0, out.str().c_str());
+ return;
+ }
+
+ if (descr.unit &&
+ descr.unit->unit_type_mask == utm_bitmask &&
+ cfg.umask == 0) {
+ ostringstream out;
+
+ out << "event " << descr.name << " invalid unit mask: "
+ << cfg.umask << endl;
+
+ QMessageBox::warning(this, 0, out.str().c_str());
+ return;
+ }
+ }
+
+ if (one_enable == false && cpu_type != CPU_TIMER_INT) {
+ QMessageBox::warning(this, 0, "No counters enabled.\n");
+ return;
+ }
+
+ if (daemon_status().running) {
+ // gcc 2.91 work around
+ int user_choice = 0;
+ user_choice =
+ QMessageBox::warning(this, 0,
+ "Profiler already started:\n\n"
+ "stop and restart it?",
+ "&Restart", "&Cancel", 0, 0, 1);
+
+ if (user_choice == 1)
+ return;
+
+ // this flush profiler data also.
+ on_stop_profiler();
+ }
+
+ vector<string> args;
+
+ // save_config validate and setup the config
+ if (save_config()) {
+ // now actually start
+ args.push_back("--start");
+ if (config.verbose)
+ args.push_back("--verbose");
+ do_exec_command(OP_BINDIR "/opcontrol", args);
+ }
+
+ total_nr_interrupts = 0;
+ timerEvent(0);
+}
+
+
+bool oprof_start::save_config()
+{
+ if (!record_config())
+ return false;
+
+ vector<string> args;
+
+ // saving config is done by running opcontrol --setup with appropriate
+ // setted parameters so we use the same config file as command line
+ // tools
+
+ args.push_back("--setup");
+
+ bool one_enabled = false;
+
+ vector<string> tmpargs;
+ tmpargs.push_back("--setup");
+
+ QListViewItem * cur;
+ for (cur = events_list->firstChild(); cur; cur = cur->nextSibling()) {
+ if (!cur->isSelected())
+ continue;
+
+ event_setting & cfg = event_cfgs[cur->text(0).latin1()];
+
+ op_event_descr const & descr =
+ locate_event(cur->text(0).latin1());
+
+ one_enabled = true;
+
+ string arg = "--event=" + descr.name;
+ arg += ":" + op_lexical_cast<string>(cfg.count);
+ arg += ":" + op_lexical_cast<string>(cfg.umask);
+ arg += ":" + op_lexical_cast<string>(cfg.os_ring_count);
+ arg += ":" + op_lexical_cast<string>(cfg.user_ring_count);
+
+ tmpargs.push_back(arg);
+ }
+
+ // only set counters if at least one is enabled
+ if (one_enabled)
+ args = tmpargs;
+
+ if (config.no_kernel) {
+ args.push_back("--no-vmlinux");
+ } else {
+ args.push_back("--vmlinux=" + config.kernel_filename);
+ }
+
+ args.push_back("--buffer-size=" +
+ op_lexical_cast<string>(config.buffer_size));
+
+ if (op_get_interface() == OP_INTERFACE_24) {
+ args.push_back("--note-table-size=" +
+ op_lexical_cast<string>(config.note_table_size));
+ } else {
+ args.push_back("--buffer-watershed=" +
+ op_lexical_cast<string>(config.buffer_watershed));
+ args.push_back("--cpu-buffer-size=" +
+ op_lexical_cast<string>(config.cpu_buffer_size));
+ if (op_file_readable("/dev/oprofile/backtrace_depth")) {
+ args.push_back("--callgraph=" +
+ op_lexical_cast<string>(config.callgraph_depth));
+ }
+ }
+
+ string sep = "--separate=";
+
+ if (config.separate_lib)
+ sep += "library,";
+ if (config.separate_kernel)
+ sep += "kernel,";
+ if (config.separate_cpu)
+ sep += "cpu,";
+ if (config.separate_thread)
+ sep += "thread,";
+
+ if (sep == "--separate=")
+ sep += "none";
+ args.push_back(sep);
+
+ // 2.95 work-around, it didn't like return !do_exec_command()
+ bool ret = !do_exec_command(OP_BINDIR "/opcontrol", args);
+ return ret;
+}
+
+
+// flush and stop the profiler if it was started.
+void oprof_start::on_stop_profiler()
+{
+ vector<string> args;
+ args.push_back("--shutdown");
+
+ if (daemon_status().running)
+ do_exec_command(OP_BINDIR "/opcontrol", args);
+ else
+ QMessageBox::warning(this, 0, "The profiler is already stopped.");
+
+ timerEvent(0);
+}
+
+
+void oprof_start::on_separate_kernel_cb_changed(int state)
+{
+ if (state == 2)
+ separate_lib_cb->setChecked(true);
+}
+
+void oprof_start::on_reset_sample_files()
+{
+ int ret = QMessageBox::warning(this, 0, "Are you sure you want to "
+ "reset your last profile session ?", "Yes", "No", 0, 0, 1);
+ if (!ret) {
+ vector<string> args;
+ args.push_back("--reset");
+ if (!do_exec_command(OP_BINDIR "/opcontrol", args))
+ // the next timer event will overwrite the message
+ daemon_label->setText("Last profile session reseted.");
+ else
+ QMessageBox::warning(this, 0,
+ "Can't reset profiling session.");
+ }
+}
+
+
+/// function object for matching against name
+class event_name_eq {
+ string name_;
+public:
+ explicit event_name_eq(string const & s) : name_(s) {}
+ bool operator()(op_event_descr const & d) const {
+ return d.name == name_;
+ }
+};
+
+
+// helper to retrieve an event descr through its name.
+op_event_descr const & oprof_start::locate_event(string const & name) const
+{
+ return *(find_if(v_events.begin(), v_events.end(), event_name_eq(name)));
+}
diff --git a/gui/oprof_start.h b/gui/oprof_start.h
new file mode 100644
index 0000000..c2910ee
--- /dev/null
+++ b/gui/oprof_start.h
@@ -0,0 +1,164 @@
+/**
+ * @file oprof_start.h
+ * The GUI start main class
+ *
+ * @remark Copyright 2002 OProfile authors
+ * @remark Read the file COPYING
+ *
+ * @author Philippe Elie
+ * @author John Levon
+ */
+
+#ifndef OPROF_START_H
+#define OPROF_START_H
+
+#include <vector>
+#include <map>
+#include <set>
+
+#include "ui/oprof_start.base.h"
+#include "oprof_start_config.h"
+
+#include "op_events.h"
+
+class QIntValidator;
+class QListViewItem;
+class QTimerEvent;
+
+/// a struct describing a particular event type
+struct op_event_descr {
+ op_event_descr();
+
+ /// bit mask of allowed counters
+ uint counter_mask;
+ /// hardware event number
+ u32 val;
+ /// unit mask values if applicable
+ op_unit_mask const * unit;
+ /// name of event
+ std::string name;
+ /// description of event
+ std::string help_str;
+ /// minimum counter value
+ uint min_count;
+};
+
+class oprof_start : public oprof_start_base
+{
+ Q_OBJECT
+
+public:
+ oprof_start();
+
+protected slots:
+ /// select the kernel image filename
+ void choose_kernel_filename();
+ /// flush profiler
+ void on_flush_profiler_data();
+ /// start profiler
+ void on_start_profiler();
+ /// stop profiler
+ void on_stop_profiler();
+ /// events selection change
+ void event_selected();
+ /// the mouse is over an event
+ void event_over(QListViewItem *);
+ /// state of separate_kernel_cb changed
+ void on_separate_kernel_cb_changed(int);
+ /// reset sample files
+ void on_reset_sample_files();
+
+ /// close the dialog
+ void accept();
+
+ /// WM hide event
+ void closeEvent(QCloseEvent * e);
+
+ /// timer event
+ void timerEvent(QTimerEvent * e);
+
+private:
+ /// the counter combo has been activated
+ void fill_events_listbox();
+
+ /// fill the event details and gui setup
+ void fill_events();
+
+ /// find an event description by name
+ op_event_descr const & locate_event(std::string const & name) const;
+
+ /// update config on user change
+ void record_selected_event_config();
+ /// update config and validate
+ bool record_config();
+
+ /// calculate unit mask for given event and unit mask part
+ void get_unit_mask_part(op_event_descr const & descr, uint num, bool selected, uint & mask);
+ /// calculate unit mask for given event
+ uint get_unit_mask(op_event_descr const & descr);
+ /// set the unit mask widgets for given event
+ void setup_unit_masks(op_event_descr const & descr);
+
+ /// return the maximum perf counter value for the current cpu type
+ uint max_perf_count() const;
+
+ /// show an event's settings
+ void display_event(op_event_descr const & descrp);
+
+ /// hide unit mask widgets
+ void hide_masks(void);
+
+ /// read the events set in daemonrc
+ void read_set_events();
+ /// use the default event
+ void setup_default_event();
+ /// load the extra config file
+ void load_config_file();
+ /// save the config
+ bool save_config();
+
+ /// redraw the event list by changing icon status
+ void draw_event_list();
+
+ /// return true if item is selectable or already selected
+ bool is_selectable_event(QListViewItem * item);
+
+ /// try to alloc counters for the selected_events
+ bool alloc_selected_events() const;
+
+ /// validator for event count
+ QIntValidator* event_count_validator;
+
+ /// all available events for this hardware
+ std::vector<op_event_descr> v_events;
+
+ /// current event configs for each counter
+ typedef std::map<std::string, event_setting> event_setting_map;
+ event_setting_map event_cfgs;
+
+ /// The currently selected events. We must track this because
+ /// with multiple selection listbox QT doesn't allow to know
+ /// what is the last selected item. events_selected() update it
+ std::set<QListViewItem *> selected_events;
+ QListViewItem * current_event;
+
+ /// current config
+ config_setting config;
+
+ /// the expansion of "~" directory
+ std::string user_dir;
+
+ /// CPU type
+ op_cpu cpu_type;
+
+ /// CPU speed in MHz
+ double cpu_speed;
+
+ /// total number of available HW counters
+ uint op_nr_counters;
+
+ /// Total number of samples for this run
+ unsigned long total_nr_interrupts;
+};
+
+#endif // OPROF_START_H
diff --git a/gui/oprof_start_config.cpp b/gui/oprof_start_config.cpp
new file mode 100644
index 0000000..b120af4
--- /dev/null
+++ b/gui/oprof_start_config.cpp
@@ -0,0 +1,112 @@
+/**
+ * @file oprof_start_config.cpp
+ * GUI startup config management
+ *
+ * @remark Copyright 2002 OProfile authors
+ * @remark Read the file COPYING
+ *
+ * @author John Levon
+ * @author Philippe Elie
+ */
+
+#include <stdio.h>
+
+#include <sstream>
+#include <fstream>
+#include <iomanip>
+#include <sys/utsname.h>
+
+#include "string_manip.h"
+#include "oprof_start_config.h"
+#include "op_config.h"
+#include "op_config_24.h"
+
+using namespace std;
+
+event_setting::event_setting()
+ :
+ count(0),
+ umask(0),
+ os_ring_count(0),
+ user_ring_count(0)
+{
+}
+
+
+config_setting::config_setting()
+ :
+ buffer_size(OP_DEFAULT_BUF_SIZE),
+ note_table_size(OP_DEFAULT_NOTE_SIZE),
+ no_kernel(false),
+ verbose(false),
+ separate_lib(false),
+ separate_kernel(false),
+ separate_cpu(false),
+ separate_thread(false),
+ callgraph_depth(0),
+ buffer_watershed(0),
+ cpu_buffer_size(0)
+{
+ struct utsname info;
+
+ /* Guess path to vmlinux based on kernel currently running. */
+ if (uname(&info)) {
+ perror("oprof_start: Unable to determine OS release.");
+ } else {
+ string const version(info.release);
+ string const vmlinux_path("/lib/modules/" + version
+ + "/build/vmlinux");
+ kernel_filename = vmlinux_path;
+ }
+}
+
+
+void config_setting::load(istream & in)
+{
+ buffer_size = OP_DEFAULT_BUF_SIZE;
+ note_table_size = OP_DEFAULT_NOTE_SIZE;
+
+ string str;
+
+ while (getline(in, str)) {
+ string val = split(str, '=');
+ if (str == "BUF_SIZE") {
+ buffer_size = op_lexical_cast<unsigned int>(val);
+ if (buffer_size < OP_DEFAULT_BUF_SIZE)
+ buffer_size = OP_DEFAULT_BUF_SIZE;
+ } else if (str == "NOTE_SIZE") {
+ note_table_size = op_lexical_cast<unsigned int>(val);
+ if (note_table_size < OP_DEFAULT_NOTE_SIZE)
+ note_table_size = OP_DEFAULT_NOTE_SIZE;
+ } else if (str == "VMLINUX") {
+ if (val == "none") {
+ kernel_filename = "";
+ no_kernel = true;
+ } else if (!val.empty()) {
+ no_kernel = false;
+ kernel_filename = val;
+ }
+ } else if (str == "SEPARATE_LIB") {
+ separate_lib = op_lexical_cast<bool>(val);
+ } else if (str == "SEPARATE_KERNEL") {
+ separate_kernel = op_lexical_cast<bool>(val);
+ } else if (str == "SEPARATE_CPU") {
+ separate_cpu = op_lexical_cast<bool>(val);
+ } else if (str == "SEPARATE_THREAD") {
+ separate_thread = op_lexical_cast<bool>(val);
+ } else if (str == "CALLGRAPH") {
+ callgraph_depth = op_lexical_cast<unsigned int>(val);
+ } else if (str == "BUF_WATERSHED") {
+ buffer_watershed = op_lexical_cast<unsigned int>(val);
+ } else if (str == "CPU_BUF_SIZE") {
+ cpu_buffer_size = op_lexical_cast<unsigned int>(val);
+ }
+ }
+}
+
+
+istream & operator>>(istream & in, config_setting & object)
+{
+ object.load(in);
+ return in;
+}
diff --git a/gui/oprof_start_config.h b/gui/oprof_start_config.h
new file mode 100644
index 0000000..07b25d8
--- /dev/null
+++ b/gui/oprof_start_config.h
@@ -0,0 +1,56 @@
+/**
+ * @file oprof_start_config.h
+ * GUI startup config management
+ *
+ * @remark Copyright 2002 OProfile authors
+ * @remark Read the file COPYING
+ *
+ * @author John Levon
+ * @author Philippe Elie
+ */
+
+#ifndef OPROF_START_CONFIG_H
+#define OPROF_START_CONFIG_H
+
+#include <sys/types.h>
+#include <string>
+#include <iosfwd>
+
+/// Store the setup of one event
+struct event_setting {
+
+ event_setting();
+
+ uint count;
+ uint umask;
+ bool os_ring_count;
+ bool user_ring_count;
+};
+
+/**
+ * Store the general configuration of the profiler.
+ * There is no save(), instead opcontrol --setup must be
+ * called. This uses opcontrol's daemonrc file.
+ */
+struct config_setting {
+ config_setting();
+
+ void load(std::istream & in);
+
+ uint buffer_size;
+ uint note_table_size;
+ std::string kernel_filename;
+ bool no_kernel;
+ bool verbose;
+ bool separate_lib;
+ bool separate_kernel;
+ bool separate_cpu;
+ bool separate_thread;
+ uint callgraph_depth;
+ uint buffer_watershed;
+ uint cpu_buffer_size;
+};
+
+std::istream & operator>>(std::istream & in, config_setting & object);
+
+#endif // ! OPROF_START_CONFIG_H
diff --git a/gui/oprof_start_main.cpp b/gui/oprof_start_main.cpp
new file mode 100644
index 0000000..44da5de
--- /dev/null
+++ b/gui/oprof_start_main.cpp
@@ -0,0 +1,27 @@
+/**
+ * @file oprof_start_main.cpp
+ * main routine for GUI start
+ *
+ * @remark Copyright 2002 OProfile authors
+ * @remark Read the file COPYING
+ *
+ * @author Philippe Elie
+ * @author John Levon
+ */
+
+#include <qapplication.h>
+
+#include "oprof_start.h"
+
+int main(int argc, char* argv[])
+{
+ QApplication a(argc, argv);
+
+ oprof_start* dlg = new oprof_start();
+
+ a.setMainWidget(dlg);
+
+ dlg->show();
+
+ return a.exec();
+}
diff --git a/gui/oprof_start_util.cpp b/gui/oprof_start_util.cpp
new file mode 100644
index 0000000..d293431
--- /dev/null
+++ b/gui/oprof_start_util.cpp
@@ -0,0 +1,331 @@
+/**
+ * @file oprof_start_util.cpp
+ * Miscellaneous helpers for the GUI start
+ *
+ * @remark Copyright 2002 OProfile authors
+ * @remark Read the file COPYING
+ *
+ * @author Philippe Elie
+ * @author John Levon
+ */
+
+#include <dirent.h>
+#include <unistd.h>
+#include <glob.h>
+
+#include <cerrno>
+#include <vector>
+#include <cmath>
+#include <sstream>
+#include <iostream>
+#include <fstream>
+#include <cstdlib>
+
+#include <qfiledialog.h>
+#include <qmessagebox.h>
+
+#include "op_file.h"
+#include "file_manip.h"
+#include "child_reader.h"
+#include "op_libiberty.h"
+
+#include "oprof_start.h"
+#include "oprof_start_util.h"
+
+using namespace std;
+
+namespace {
+
+// return the ~ expansion suffixed with a '/'
+string const get_config_dir()
+{
+ return "/root";
+}
+
+string daemon_pid;
+
+} // namespace anon
+
+daemon_status::daemon_status()
+ : running(false),
+ nr_interrupts(0)
+{
+ int HZ;
+ if (!daemon_pid.empty()) {
+ string proc_filename = string("/proc/") + daemon_pid + "/exe";
+ string const exec = op_realpath(proc_filename);
+ if (exec == proc_filename)
+ daemon_pid.erase();
+ else
+ running = true;
+ }
+
+ if (daemon_pid.empty()) {
+ DIR * dir;
+ struct dirent * dirent;
+
+ if (!(dir = opendir("/proc"))) {
+ perror("oprofiled: /proc directory could not be opened. ");
+ exit(EXIT_FAILURE);
+ }
+
+ while ((dirent = readdir(dir))) {
+ string const exec =
+ op_realpath(string("/proc/")
+ + dirent->d_name + "/exe");
+ string const name = op_basename(exec);
+ if (name != "oprofiled")
+ continue;
+
+ daemon_pid = dirent->d_name;
+ running = true;
+ }
+
+ closedir(dir);
+ }
+
+ HZ = sysconf(_SC_CLK_TCK);
+ if (HZ == -1) {
+ perror("oprofiled: Unable to determine clock ticks per second. ");
+ exit(EXIT_FAILURE);
+ }
+
+ if (daemon_pid.empty())
+ return;
+
+ nr_interrupts = 0;
+
+ switch (op_get_interface()) {
+ case OP_INTERFACE_24:
+ {
+ ifstream ifs3("/proc/sys/dev/oprofile/nr_interrupts");
+ if (ifs3)
+ ifs3 >> nr_interrupts;
+ }
+ break;
+ case OP_INTERFACE_26:
+ {
+ static unsigned int old_sum_interrupts;
+ unsigned int sum_interrupts = 0;
+ glob_t file_names;
+
+ file_names.gl_offs = 0;
+ glob("/dev/oprofile/stats/cpu*/sample_received",
+ GLOB_DOOFFS, NULL, &file_names);
+
+ for (size_t i = 0; i < file_names.gl_pathc; ++i) {
+ ifstream ifs3(file_names.gl_pathv[i]);
+ if (ifs3) {
+ unsigned int file_interrupts;
+ ifs3 >> file_interrupts;
+ sum_interrupts += file_interrupts;
+ }
+ }
+ if (old_sum_interrupts > sum_interrupts)
+ // occur if we stop/restart daemon.
+ old_sum_interrupts = 0;
+ nr_interrupts = sum_interrupts - old_sum_interrupts;
+ old_sum_interrupts = sum_interrupts;
+ globfree(&file_names);
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+
+/**
+ * get_config_filename - get absolute filename of file in user $HOME
+ * @param filename the relative filename
+ *
+ * Get the absolute path of a file in a user's home directory.
+ */
+string const get_config_filename(string const & filename)
+{
+ return get_config_dir() + "/" + filename;
+}
+
+
+/**
+ * check_and_create_config_dir - make sure config dir is accessible
+ *
+ * Returns %true if the dir is accessible.
+ */
+bool check_and_create_config_dir()
+{
+ string dir = get_config_filename(".oprofile");
+
+ char * name = xstrdup(dir.c_str());
+
+ if (create_dir(name)) {
+ ostringstream out;
+ out << "unable to create " << dir << " directory ";
+ out << "cause: " << strerror(errno);
+ QMessageBox::warning(0, 0, out.str().c_str());
+
+ free(name);
+
+ return false;
+ }
+
+ free(name);
+ return true;
+}
+
+
+/**
+ * format - re-format a string
+ * @param orig string to format
+ * @param maxlen width of line
+ *
+ * Re-formats a string to fit into a certain width,
+ * breaking lines at spaces between words.
+ *
+ * Returns the formatted string
+ */
+string const format(string const & orig, uint const maxlen)
+{
+ string text(orig);
+
+ istringstream ss(text);
+ vector<string> lines;
+
+ string oline;
+ string line;
+
+ while (getline(ss, oline)) {
+ if (line.size() + oline.size() < maxlen) {
+ lines.push_back(line + oline);
+ line.erase();
+ } else {
+ lines.push_back(line);
+ line.erase();
+ string s;
+ string word;
+ istringstream oss(oline);
+ while (oss >> word) {
+ if (line.size() + word.size() > maxlen) {
+ lines.push_back(line);
+ line.erase();
+ }
+ line += word + " ";
+ }
+ }
+ }
+
+ if (line.size())
+ lines.push_back(line);
+
+ string ret;
+
+ for(vector<string>::const_iterator it = lines.begin(); it != lines.end(); ++it)
+ ret += *it + "\n";
+
+ return ret;
+}
+
+
+/**
+ * do_exec_command - execute a command
+ * @param cmd command name
+ * @param args arguments to command
+ *
+ * Execute a command synchronously. An error message is shown
+ * if the command returns a non-zero status, which is also returned.
+ *
+ * The arguments are verified and will refuse to execute if they contain
+ * shell metacharacters.
+ */
+int do_exec_command(string const & cmd, vector<string> const & args)
+{
+ ostringstream err;
+ bool ok = true;
+
+ // verify arguments
+ for (vector<string>::const_iterator cit = args.begin();
+ cit != args.end(); ++cit) {
+ if (verify_argument(*cit))
+ continue;
+
+ QMessageBox::warning(0, 0,
+ string(
+ "Could not execute: Argument \"" + *cit +
+ "\" contains shell metacharacters.\n").c_str());
+ return EINVAL;
+ }
+
+ child_reader reader(cmd, args);
+ if (reader.error())
+ ok = false;
+
+ if (ok)
+ reader.get_data(cout, err);
+
+ int ret = reader.terminate_process();
+ if (ret) {
+ string error = reader.error_str() + "\n";
+ error += "Failed: \n" + err.str() + "\n";
+ string cmdline = cmd;
+ for (vector<string>::const_iterator cit = args.begin();
+ cit != args.end(); ++cit) {
+ cmdline += " " + *cit + " ";
+ }
+ error += "\n\nCommand was :\n\n" + cmdline + "\n";
+
+ QMessageBox::warning(0, 0, format(error, 50).c_str());
+ }
+
+ return ret;
+}
+
+
+/**
+ * do_open_file_or_dir - open file/directory
+ * @param base_dir directory to start at
+ * @param dir_only directory or filename to select
+ *
+ * Select a file or directory. The selection is returned;
+ * an empty string if the selection was cancelled.
+ */
+string const do_open_file_or_dir(string const & base_dir, bool dir_only)
+{
+ QString result;
+
+ if (dir_only) {
+ result = QFileDialog::getExistingDirectory(base_dir.c_str(), 0,
+ "open_file_or_dir", "Get directory name", true);
+ } else {
+ result = QFileDialog::getOpenFileName(base_dir.c_str(), 0, 0,
+ "open_file_or_dir", "Get filename");
+ }
+
+ if (result.isNull())
+ return string();
+ else
+ return result.latin1();
+}
+
+/**
+ * verify_argument - check string for potentially dangerous characters
+ *
+ * This function returns false if the string contains dangerous shell
+ * metacharacters.
+ *
+ * WWW Security FAQ dangerous chars:
+ *
+ * & ; ` ' \ " | * ? ~ < > ^ ( ) [ ] { } $ \n \r
+ *
+ * David Wheeler: ! #
+ *
+ * We allow '-' because we disallow whitespace. We allow ':' and '='
+ */
+bool verify_argument(string const & str)
+{
+ if (str.find_first_not_of(
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "abcdefghijklmnopqrstuvwxyz0123456789_:=-+%,./")
+ != string::npos)
+ return false;
+ return true;
+}
diff --git a/gui/oprof_start_util.h b/gui/oprof_start_util.h
new file mode 100644
index 0000000..cce646d
--- /dev/null
+++ b/gui/oprof_start_util.h
@@ -0,0 +1,39 @@
+/**
+ * @file oprof_start_util.h
+ * Miscellaneous helpers for the GUI start
+ *
+ * @remark Copyright 2002 OProfile authors
+ * @remark Read the file COPYING
+ *
+ * @author Philippe Elie
+ * @author John Levon
+ */
+
+#ifndef OPROF_START_UTIL_H
+#define OPROF_START_UTIL_H
+
+#include <cmath>
+#include <string>
+#include <vector>
+
+/// Store various daemon status data
+struct daemon_status {
+ /// fill various data member according to the current daemon status
+ daemon_status();
+ bool running; ///< true if daemon is running
+ unsigned int nr_interrupts; ///< nr_interrupts from profiling start
+};
+
+inline double ratio(double x1, double x2)
+{
+ return fabs(((x1 - x2) / x2)) * 100;
+}
+
+std::string const get_config_filename(std::string const & filename);
+bool check_and_create_config_dir();
+std::string const format(std::string const & orig, uint const maxlen);
+int do_exec_command(std::string const & cmd, std::vector<std::string> const & args = std::vector<std::string>());
+std::string const do_open_file_or_dir(std::string const & base_dir, bool dir_only);
+bool verify_argument(std::string const & str);
+
+#endif // OPROF_START_UTIL_H
diff --git a/gui/ui/Makefile.am b/gui/ui/Makefile.am
new file mode 100644
index 0000000..387ef4e
--- /dev/null
+++ b/gui/ui/Makefile.am
@@ -0,0 +1,24 @@
+EXTRA_DIST = oprof_start.base.ui
+
+if have_qt
+
+AM_CPPFLAGS = @QT_INCLUDES@
+
+AM_CXXFLAGS = @OP_CXXFLAGS@
+
+noinst_LIBRARIES = liboprof_start.a
+nodist_liboprof_start_a_SOURCES = oprof_start.base.cpp oprof_start.base.moc.cpp
+
+oprof_start.base.h: oprof_start.base.ui
+ $(UIC) -o $@ $<
+
+oprof_start.base.cpp: oprof_start.base.h oprof_start.base.ui
+ $(UIC) -o $@ -impl $^
+
+oprof_start.base.moc.cpp: oprof_start.base.h
+ $(MOC) -o $@ $<
+
+clean-local:
+ rm -f oprof_start.base.h oprof_start.base.cpp oprof_start.base.moc.cpp
+
+endif
diff --git a/gui/ui/Makefile.in b/gui/ui/Makefile.in
new file mode 100644
index 0000000..020db85
--- /dev/null
+++ b/gui/ui/Makefile.in
@@ -0,0 +1,493 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = gui/ui
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/binutils.m4 \
+ $(top_srcdir)/m4/builtinexpect.m4 \
+ $(top_srcdir)/m4/cellspubfdsupport.m4 \
+ $(top_srcdir)/m4/compileroption.m4 \
+ $(top_srcdir)/m4/configmodule.m4 \
+ $(top_srcdir)/m4/copyifchange.m4 $(top_srcdir)/m4/docbook.m4 \
+ $(top_srcdir)/m4/extradirs.m4 $(top_srcdir)/m4/findkernel.m4 \
+ $(top_srcdir)/m4/kerneloption.m4 \
+ $(top_srcdir)/m4/kernelversion.m4 \
+ $(top_srcdir)/m4/mallocattribute.m4 \
+ $(top_srcdir)/m4/poptconst.m4 \
+ $(top_srcdir)/m4/precompiledheader.m4 $(top_srcdir)/m4/qt.m4 \
+ $(top_srcdir)/m4/resultyn.m4 $(top_srcdir)/m4/sstream.m4 \
+ $(top_srcdir)/m4/typedef.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+ARFLAGS = cru
+liboprof_start_a_AR = $(AR) $(ARFLAGS)
+liboprof_start_a_LIBADD =
+@have_qt_TRUE@nodist_liboprof_start_a_OBJECTS = \
+@have_qt_TRUE@ oprof_start.base.$(OBJEXT) \
+@have_qt_TRUE@ oprof_start.base.moc.$(OBJEXT)
+liboprof_start_a_OBJECTS = $(nodist_liboprof_start_a_OBJECTS)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(nodist_liboprof_start_a_SOURCES)
+DIST_SOURCES =
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BFD_LIBS = @BFD_LIBS@
+BUILD_JVMPI_AGENT_FALSE = @BUILD_JVMPI_AGENT_FALSE@
+BUILD_JVMPI_AGENT_TRUE = @BUILD_JVMPI_AGENT_TRUE@
+BUILD_JVMTI_AGENT_FALSE = @BUILD_JVMTI_AGENT_FALSE@
+BUILD_JVMTI_AGENT_TRUE = @BUILD_JVMTI_AGENT_TRUE@
+CAT_ENTRY_END = @CAT_ENTRY_END@
+CAT_ENTRY_START = @CAT_ENTRY_START@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATE = @DATE@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DOCBOOK_ROOT = @DOCBOOK_ROOT@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXTRA_CFLAGS_MODULE = @EXTRA_CFLAGS_MODULE@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAVA_HOMEDIR = @JAVA_HOMEDIR@
+KINC = @KINC@
+KSRC = @KSRC@
+KVERS = @KVERS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBERTY_LIBS = @LIBERTY_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MOC = @MOC@
+MODINSTALLDIR = @MODINSTALLDIR@
+OBJEXT = @OBJEXT@
+OPROFILE_DIR = @OPROFILE_DIR@
+OPROFILE_MODULE_ARCH = @OPROFILE_MODULE_ARCH@
+OP_CFLAGS = @OP_CFLAGS@
+OP_CXXFLAGS = @OP_CXXFLAGS@
+OP_DOCDIR = @OP_DOCDIR@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POPT_LIBS = @POPT_LIBS@
+PTRDIFF_T_TYPE = @PTRDIFF_T_TYPE@
+QT_INCLUDES = @QT_INCLUDES@
+QT_LDFLAGS = @QT_LDFLAGS@
+QT_LIB = @QT_LIB@
+QT_VERSION = @QT_VERSION@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZE_T_TYPE = @SIZE_T_TYPE@
+STRIP = @STRIP@
+UIC = @UIC@
+VERSION = @VERSION@
+XML_CATALOG = @XML_CATALOG@
+XSLTPROC = @XSLTPROC@
+XSLTPROC_FLAGS = @XSLTPROC_FLAGS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+have_qt_FALSE = @have_qt_FALSE@
+have_qt_TRUE = @have_qt_TRUE@
+have_xsltproc_FALSE = @have_xsltproc_FALSE@
+have_xsltproc_TRUE = @have_xsltproc_TRUE@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+kernel_support_FALSE = @kernel_support_FALSE@
+kernel_support_TRUE = @kernel_support_TRUE@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+topdir = @topdir@
+EXTRA_DIST = oprof_start.base.ui
+@have_qt_TRUE@AM_CPPFLAGS = @QT_INCLUDES@
+@have_qt_TRUE@AM_CXXFLAGS = @OP_CXXFLAGS@
+@have_qt_TRUE@noinst_LIBRARIES = liboprof_start.a
+@have_qt_TRUE@nodist_liboprof_start_a_SOURCES = oprof_start.base.cpp oprof_start.base.moc.cpp
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign gui/ui/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --foreign gui/ui/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstLIBRARIES:
+ -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+liboprof_start.a: $(liboprof_start_a_OBJECTS) $(liboprof_start_a_DEPENDENCIES)
+ -rm -f liboprof_start.a
+ $(liboprof_start_a_AR) liboprof_start.a $(liboprof_start_a_OBJECTS) $(liboprof_start_a_LIBADD)
+ $(RANLIB) liboprof_start.a
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oprof_start.base.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oprof_start.base.moc.Po@am__quote@
+
+.cpp.o:
+@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+@have_qt_FALSE@clean-local:
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local \
+ clean-noinstLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-libtool distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-local clean-noinstLIBRARIES ctags \
+ distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-exec install-exec-am install-info \
+ install-info-am install-man install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-info-am
+
+
+@have_qt_TRUE@oprof_start.base.h: oprof_start.base.ui
+@have_qt_TRUE@ $(UIC) -o $@ $<
+
+@have_qt_TRUE@oprof_start.base.cpp: oprof_start.base.h oprof_start.base.ui
+@have_qt_TRUE@ $(UIC) -o $@ -impl $^
+
+@have_qt_TRUE@oprof_start.base.moc.cpp: oprof_start.base.h
+@have_qt_TRUE@ $(MOC) -o $@ $<
+
+@have_qt_TRUE@clean-local:
+@have_qt_TRUE@ rm -f oprof_start.base.h oprof_start.base.cpp oprof_start.base.moc.cpp
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gui/ui/oprof_start.base.ui b/gui/ui/oprof_start.base.ui
new file mode 100644
index 0000000..4fcc43f
--- /dev/null
+++ b/gui/ui/oprof_start.base.ui
@@ -0,0 +1,1190 @@
+<!DOCTYPE UI><UI>
+<class>oprof_start_base</class>
+<widget>
+ <class>QDialog</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>oprof_start_base</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>625</width>
+ <height>735</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Start profiler</string>
+ </property>
+ <property stdset="1">
+ <name>sizeGripEnabled</name>
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QTabWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>setup_config_tab</cstring>
+ </property>
+ <widget>
+ <class>QWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>counter_setup_page</cstring>
+ </property>
+ <attribute>
+ <name>title</name>
+ <string>&Setup</string>
+ </attribute>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QGroupBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>counter_group</cstring>
+ </property>
+ <property stdset="1">
+ <name>title</name>
+ <string>Events</string>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout10</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QListView</class>
+ <column>
+ <property>
+ <name>text</name>
+ <string>Removedincode</string>
+ </property>
+ <property>
+ <name>clickable</name>
+ <bool>false</bool>
+ </property>
+ <property>
+ <name>resizeable</name>
+ <bool>true</bool>
+ </property>
+ </column>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>events_list</cstring>
+ </property>
+ <property stdset="1">
+ <name>minimumSize</name>
+ <size>
+ <width>250</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>selectionMode</name>
+ <enum>Multi</enum>
+ </property>
+ <property>
+ <name>toolTip</name>
+ <string>Available events</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout9</cstring>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>os_ring_count_cb</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Profile &kernel</string>
+ </property>
+ <property>
+ <name>toolTip</name>
+ <string>Profile kernel code</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>user_ring_count_cb</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Profile &user binaries</string>
+ </property>
+ <property>
+ <name>toolTip</name>
+ <string>Profile user libraries and applications</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout16</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel1_2</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>C&ount</string>
+ </property>
+ <property>
+ <name>buddy</name>
+ <cstring>event_count_edit</cstring>
+ </property>
+ </widget>
+ <widget>
+ <class>QLineEdit</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>event_count_edit</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ </sizepolicy>
+ </property>
+ <property>
+ <name>toolTip</name>
+ <string>Set the count value</string>
+ </property>
+ </widget>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer13_2</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Horizontal</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QButtonGroup</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>unit_mask_group</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>title</name>
+ <string>Unit mask</string>
+ </property>
+ <property>
+ <name>toolTip</name>
+ <string>Unit mask settings for this event</string>
+ </property>
+ <grid>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget row="0" column="0" >
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>check0</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>check0</string>
+ </property>
+ </widget>
+ <widget row="1" column="0" rowspan="2" colspan="2" >
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>check1</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>check1</string>
+ </property>
+ </widget>
+ <widget row="3" column="0" rowspan="2" colspan="2" >
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>check2</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>check2</string>
+ </property>
+ </widget>
+ <widget row="5" column="0" >
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>check3</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>check3</string>
+ </property>
+ </widget>
+ <widget row="6" column="0" >
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>check4</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>check4</string>
+ </property>
+ </widget>
+ <widget row="7" column="0" >
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>check5</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>check5</string>
+ </property>
+ </widget>
+ <widget row="8" column="0" rowspan="2" colspan="2" >
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>check6</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>check6</string>
+ </property>
+ </widget>
+ <widget row="10" column="0" >
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>check7</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>check7</string>
+ </property>
+ </widget>
+ <spacer row="11" column="1" >
+ <property>
+ <name>name</name>
+ <cstring>Spacer14</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Vertical</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget row="5" column="1" >
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>check11</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>check11</string>
+ </property>
+ </widget>
+ <widget row="7" column="1" >
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>check13</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>check13</string>
+ </property>
+ </widget>
+ <widget row="10" column="1" >
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>check15</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>check15</string>
+ </property>
+ </widget>
+ <widget row="4" column="1" >
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>check10</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>check10</string>
+ </property>
+ </widget>
+ <widget row="9" column="1" >
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>check14</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>check14</string>
+ </property>
+ </widget>
+ <widget row="2" column="1" >
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>check9</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>check9</string>
+ </property>
+ </widget>
+ <widget row="0" column="1" >
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>check8</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>check8</string>
+ </property>
+ </widget>
+ <widget row="6" column="1" >
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>check12</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>check12</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>event_help_label</cstring>
+ </property>
+ <property stdset="1">
+ <name>enabled</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>WinPanel</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Sunken</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string></string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget>
+ <class>QWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>configuration_page</cstring>
+ </property>
+ <attribute>
+ <name>title</name>
+ <string>&Configuration</string>
+ </attribute>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout11</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&Kernel image file</string>
+ </property>
+ <property>
+ <name>buddy</name>
+ <cstring>kernel_filename_edit</cstring>
+ </property>
+ </widget>
+ <widget>
+ <class>QLineEdit</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>kernel_filename_edit</cstring>
+ </property>
+ <property>
+ <name>toolTip</name>
+ <string>The vmlinux file of the running kernel</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>kernel_filename_tb</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>...</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>no_vmlinux</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>No kernel image</string>
+ </property>
+ <property>
+ <name>toolTip</name>
+ <string>No kernel image available. Disables kernel profiling.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout12</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout11</cstring>
+ </property>
+ <grid>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget row="0" column="1" >
+ <class>QLineEdit</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>buffer_size_edit</cstring>
+ </property>
+ <property>
+ <name>toolTip</name>
+ <string>The size of the profiler's buffers</string>
+ </property>
+ </widget>
+ <widget row="1" column="1" >
+ <class>QLineEdit</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>note_table_size_edit</cstring>
+ </property>
+ </widget>
+ <widget row="3" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cpu_buffer_size_label</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Cpu buffer size</string>
+ </property>
+ <property>
+ <name>buddy</name>
+ <cstring>cpu_buffer_size_edit</cstring>
+ </property>
+ </widget>
+ <widget row="3" column="1" >
+ <class>QLineEdit</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cpu_buffer_size_edit</cstring>
+ </property>
+ </widget>
+ <widget row="0" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>buffer_size_label</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&Buffer size</string>
+ </property>
+ <property>
+ <name>buddy</name>
+ <cstring>buffer_size_edit</cstring>
+ </property>
+ </widget>
+ <widget row="1" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>note_table_size_label</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Note Size</string>
+ </property>
+ <property>
+ <name>buddy</name>
+ <cstring>note_table_size_edit</cstring>
+ </property>
+ </widget>
+ <widget row="2" column="1" >
+ <class>QLineEdit</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>buffer_watershed_edit</cstring>
+ </property>
+ </widget>
+ <widget row="2" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>buffer_watershed_label</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Buffer watershed</string>
+ </property>
+ <property>
+ <name>buddy</name>
+ <cstring>buffer_watershed_edit</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer11</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Horizontal</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout36</cstring>
+ </property>
+ <grid>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget row="0" column="0" >
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout34</cstring>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>verbose</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&Verbose</string>
+ </property>
+ <property>
+ <name>toolTip</name>
+ <string>Very verbose output in log file</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>separate_lib_cb</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Per-application profiles</string>
+ </property>
+ <property>
+ <name>toolTip</name>
+ <string>Separate samples for each shared library. This increases the time and space overhead of OProfile.</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>separate_kernel_cb</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Per-application profiles, including kernel</string>
+ </property>
+ <property>
+ <name>toolTip</name>
+ <string>Separate samples for each shared library and kernel samples. This increases the time and space overhead of OProfile.</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>separate_cpu_cb</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Per-CPU profiles</string>
+ </property>
+ <property>
+ <name>toolTip</name>
+ <string>Separate samples for each shared library and kernel samples. This increases the time and space overhead of OProfile.</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>separate_thread_cb</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Per-thread/task profiles</string>
+ </property>
+ <property>
+ <name>toolTip</name>
+ <string>Separate samples for each shared library and kernel samples. This increases the time and space overhead of OProfile.</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout33</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>callgraph_depth_label</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>callgraph depth, zero to disable</string>
+ </property>
+ <property>
+ <name>buddy</name>
+ <cstring>callgraph_depth_edit</cstring>
+ </property>
+ </widget>
+ <widget>
+ <class>QLineEdit</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>callgraph_depth_edit</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer row="0" column="1" >
+ <property>
+ <name>name</name>
+ <cstring>Spacer12</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Horizontal</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer9</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Vertical</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>daemon_label</cstring>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>Panel</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Sunken</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string></string>
+ </property>
+ <property>
+ <name>toolTip</name>
+ <string>Current daemon status</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout37</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>start_profiler_btn</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>St&art</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>flush_profiler_data_btn</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&Flush</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>stop_profiler_btn</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Stop</string>
+ </property>
+ </widget>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer5</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Horizontal</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>reset_sample_files_btn</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Reset sample files</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>quit_and_save_btn</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Save and &quit</string>
+ </property>
+ <property stdset="1">
+ <name>autoDefault</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>start_profiler_btn</sender>
+ <signal>clicked()</signal>
+ <receiver>oprof_start_base</receiver>
+ <slot>on_start_profiler()</slot>
+ </connection>
+ <connection>
+ <sender>stop_profiler_btn</sender>
+ <signal>clicked()</signal>
+ <receiver>oprof_start_base</receiver>
+ <slot>on_stop_profiler()</slot>
+ </connection>
+ <connection>
+ <sender>flush_profiler_data_btn</sender>
+ <signal>clicked()</signal>
+ <receiver>oprof_start_base</receiver>
+ <slot>on_flush_profiler_data()</slot>
+ </connection>
+ <connection>
+ <sender>quit_and_save_btn</sender>
+ <signal>clicked()</signal>
+ <receiver>oprof_start_base</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>kernel_filename_tb</sender>
+ <signal>clicked()</signal>
+ <receiver>oprof_start_base</receiver>
+ <slot>choose_kernel_filename()</slot>
+ </connection>
+ <connection>
+ <sender>no_vmlinux</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>kernel_filename_tb</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>no_vmlinux</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>kernel_filename_edit</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>no_vmlinux</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>TextLabel1</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>separate_kernel_cb</sender>
+ <signal>stateChanged(int)</signal>
+ <receiver>oprof_start_base</receiver>
+ <slot>on_separate_kernel_cb_changed(int)</slot>
+ </connection>
+ <connection>
+ <sender>reset_sample_files_btn</sender>
+ <signal>clicked()</signal>
+ <receiver>oprof_start_base</receiver>
+ <slot>on_reset_sample_files()</slot>
+ </connection>
+ <connection>
+ <sender>events_list</sender>
+ <signal>selectionChanged()</signal>
+ <receiver>oprof_start_base</receiver>
+ <slot>event_selected()</slot>
+ </connection>
+ <connection>
+ <sender>events_list</sender>
+ <signal>currentChanged(QListViewItem*)</signal>
+ <receiver>oprof_start_base</receiver>
+ <slot>event_over(QListViewItem *)</slot>
+ </connection>
+ <connection>
+ <sender>events_list</sender>
+ <signal>onItem(QListViewItem*)</signal>
+ <receiver>oprof_start_base</receiver>
+ <slot>event_over(QListViewItem *)</slot>
+ </connection>
+ <slot access="protected">choose_kernel_filename()</slot>
+ <slot access="protected">event_over(QListViewItem *)</slot>
+ <slot access="protected">event_selected()</slot>
+ <slot access="protected">on_reset_sample_files()</slot>
+ <slot access="protected">on_flush_profiler_data()</slot>
+ <slot access="protected">on_separate_kernel_cb_changed(int)</slot>
+ <slot access="protected">on_start_profiler()</slot>
+ <slot access="protected">on_stop_profiler()</slot>
+</connections>
+<tabstops>
+ <tabstop>setup_config_tab</tabstop>
+ <tabstop>events_list</tabstop>
+ <tabstop>os_ring_count_cb</tabstop>
+ <tabstop>user_ring_count_cb</tabstop>
+ <tabstop>event_count_edit</tabstop>
+ <tabstop>check0</tabstop>
+ <tabstop>check1</tabstop>
+ <tabstop>check2</tabstop>
+ <tabstop>check3</tabstop>
+ <tabstop>check4</tabstop>
+ <tabstop>check5</tabstop>
+ <tabstop>check6</tabstop>
+ <tabstop>check7</tabstop>
+ <tabstop>check8</tabstop>
+ <tabstop>check9</tabstop>
+ <tabstop>check10</tabstop>
+ <tabstop>check11</tabstop>
+ <tabstop>check12</tabstop>
+ <tabstop>check13</tabstop>
+ <tabstop>check14</tabstop>
+ <tabstop>check15</tabstop>
+ <tabstop>start_profiler_btn</tabstop>
+ <tabstop>flush_profiler_data_btn</tabstop>
+ <tabstop>stop_profiler_btn</tabstop>
+ <tabstop>reset_sample_files_btn</tabstop>
+ <tabstop>quit_and_save_btn</tabstop>
+ <tabstop>kernel_filename_edit</tabstop>
+ <tabstop>no_vmlinux</tabstop>
+ <tabstop>buffer_size_edit</tabstop>
+ <tabstop>note_table_size_edit</tabstop>
+ <tabstop>buffer_watershed_edit</tabstop>
+ <tabstop>verbose</tabstop>
+ <tabstop>separate_lib_cb</tabstop>
+ <tabstop>separate_kernel_cb</tabstop>
+ <tabstop>separate_cpu_cb</tabstop>
+ <tabstop>separate_thread_cb</tabstop>
+ <tabstop>callgraph_depth_edit</tabstop>
+</tabstops>
+</UI>