aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Craig Tiller <ctiller@google.com>2015-01-15 15:46:39 -0800
committerGravatar Craig Tiller <ctiller@google.com>2015-01-15 15:46:39 -0800
commit297fafa078a8a43a4ddb693129b8e25b9d0bf618 (patch)
treed02a54023ea8b9b56669b36c8b287f045998c202
parentfbf4051ef2d08d53cdb486722c1111d614865d63 (diff)
Opportunistically use perftools if installed.
Allows us to collect profiles of the open source build using gprof.
-rw-r--r--.gitignore13
-rw-r--r--Makefile7
-rw-r--r--templates/Makefile.template7
-rw-r--r--test/build/perftools.c7
-rw-r--r--test/core/util/grpc_profiler.c9
5 files changed, 40 insertions, 3 deletions
diff --git a/.gitignore b/.gitignore
index 3cae07ed12..0bde146765 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,8 +1,15 @@
+# C/C++ build outputs
bins
-coverage
-deps
-*.gcno
gens
libs
objs
+
+# gcov coverage data
+coverage
+*.gcno
+
+# profiler output
+*.prof
+
+# python compiled objects
*.pyc
diff --git a/Makefile b/Makefile
index b43cb734ba..ab1ba14bb3 100644
--- a/Makefile
+++ b/Makefile
@@ -172,6 +172,13 @@ endif
OPENSSL_ALPN_CHECK_CMD = $(CC) $(CFLAGS) $(CPPFLAGS) -o /dev/null test/build/openssl-alpn.c -lssl -lcrypto -ldl $(LDFLAGS)
ZLIB_CHECK_CMD = $(CC) $(CFLAGS) $(CPPFLAGS) -o /dev/null test/build/zlib.c -lz $(LDFLAGS)
+PERFTOOLS_CHECK_CMD = $(CC) $(CFLAGS) $(CPPFLAGS) -o /dev/null test/build/perftools.c -lprofiler $(LDFLAGS)
+
+HAS_SYSTEM_PERFTOOLS = $(shell $(PERFTOOLS_CHECK_CMD) 2> /dev/null && echo true || echo false)
+ifeq ($(HAS_SYSTEM_PERFTOOLS),true)
+DEFINES += GRPC_HAVE_PERFTOOLS
+LIBS += profiler
+endif
ifndef REQUIRE_CUSTOM_LIBRARIES_$(CONFIG)
HAS_SYSTEM_OPENSSL_ALPN = $(shell $(OPENSSL_ALPN_CHECK_CMD) 2> /dev/null && echo true || echo false)
diff --git a/templates/Makefile.template b/templates/Makefile.template
index 25bc4069a1..5f20bd7f35 100644
--- a/templates/Makefile.template
+++ b/templates/Makefile.template
@@ -189,6 +189,13 @@ endif
OPENSSL_ALPN_CHECK_CMD = $(CC) $(CFLAGS) $(CPPFLAGS) -o /dev/null test/build/openssl-alpn.c -lssl -lcrypto -ldl $(LDFLAGS)
ZLIB_CHECK_CMD = $(CC) $(CFLAGS) $(CPPFLAGS) -o /dev/null test/build/zlib.c -lz $(LDFLAGS)
+PERFTOOLS_CHECK_CMD = $(CC) $(CFLAGS) $(CPPFLAGS) -o /dev/null test/build/perftools.c -lprofiler $(LDFLAGS)
+
+HAS_SYSTEM_PERFTOOLS = $(shell $(PERFTOOLS_CHECK_CMD) 2> /dev/null && echo true || echo false)
+ifeq ($(HAS_SYSTEM_PERFTOOLS),true)
+DEFINES += GRPC_HAVE_PERFTOOLS
+LIBS += profiler
+endif
ifndef REQUIRE_CUSTOM_LIBRARIES_$(CONFIG)
HAS_SYSTEM_OPENSSL_ALPN = $(shell $(OPENSSL_ALPN_CHECK_CMD) 2> /dev/null && echo true || echo false)
diff --git a/test/build/perftools.c b/test/build/perftools.c
new file mode 100644
index 0000000000..03548b4c7e
--- /dev/null
+++ b/test/build/perftools.c
@@ -0,0 +1,7 @@
+#include <gperftools/profiler.h>
+
+int main() {
+ ProfilerStart("/dev/null");
+ ProfilerStop();
+ return 0;
+}
diff --git a/test/core/util/grpc_profiler.c b/test/core/util/grpc_profiler.c
index 340b2d53b9..489d34396a 100644
--- a/test/core/util/grpc_profiler.c
+++ b/test/core/util/grpc_profiler.c
@@ -33,6 +33,15 @@
#include "test/core/util/grpc_profiler.h"
+#if GRPC_HAVE_PERFTOOLS
+#include <gperftools/profiler.h>
+
+void grpc_profiler_start(const char *filename) { ProfilerStart(filename); }
+
+void grpc_profiler_stop() { ProfilerStop(); }
+#else
+
void grpc_profiler_start(const char *filename) {}
void grpc_profiler_stop(void) {}
+#endif