[sysprof] tests: add decode-only test
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [sysprof] tests: add decode-only test
- Date: Wed, 29 May 2019 22:50:21 +0000 (UTC)
commit fd949edc297c0101775f08735ac2f9b6c4a4a551
Author: Christian Hergert <chergert redhat com>
Date: Tue May 28 19:46:21 2019 -0700
tests: add decode-only test
Useful to test that we can decode symbols from a capture properly.
src/tests/meson.build | 5 +++
src/tests/test-addr-decode.c | 78 ++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 83 insertions(+)
---
diff --git a/src/tests/meson.build b/src/tests/meson.build
index f42aa69..4534f7d 100644
--- a/src/tests/meson.build
+++ b/src/tests/meson.build
@@ -23,6 +23,11 @@ test_addr_map = executable('test-addr-map',
dependencies: test_deps,
)
+test_addr_decode = executable('test-addr-decode', 'test-addr-decode.c',
+ c_args: test_cflags,
+ dependencies: test_deps,
+)
+
test_capture = executable('test-capture', 'test-capture.c',
c_args: test_cflags,
dependencies: test_deps,
diff --git a/src/tests/test-addr-decode.c b/src/tests/test-addr-decode.c
new file mode 100644
index 0000000..2a1ff4c
--- /dev/null
+++ b/src/tests/test-addr-decode.c
@@ -0,0 +1,78 @@
+#include <fcntl.h>
+#include <sysprof.h>
+
+#include "sysprof-platform.h"
+#include "sysprof-capture-symbol-resolver.h"
+
+gint
+main (gint argc,
+ gchar *argv[])
+{
+ g_autoptr(SysprofCaptureReader) reader = NULL;
+ g_autoptr(SysprofSymbolResolver) resolver = NULL;
+ g_autoptr(GError) error = NULL;
+ SysprofCaptureFrameType type;
+
+ if (argc != 2)
+ {
+ g_printerr ("usage: %s CAPTURE_FILE\n", argv[0]);
+ return 1;
+ }
+
+ if (!(reader = sysprof_capture_reader_new (argv[1], &error)))
+ {
+ g_printerr ("%s\n", error->message);
+ return 1;
+ }
+
+ resolver = sysprof_capture_symbol_resolver_new ();
+ sysprof_symbol_resolver_load (resolver, reader);
+
+ sysprof_capture_reader_reset (reader);
+
+ while (sysprof_capture_reader_peek_type (reader, &type))
+ {
+ if (type == SYSPROF_CAPTURE_FRAME_SAMPLE)
+ {
+ const SysprofCaptureSample *sample;
+ SysprofAddressContext last_context = SYSPROF_ADDRESS_CONTEXT_NONE;
+
+ if ((sample = sysprof_capture_reader_read_sample (reader)))
+ {
+ for (guint i = 0; i < sample->n_addrs; i++)
+ {
+ g_autofree gchar *name = NULL;
+ SysprofAddressContext context;
+ GQuark tag = 0;
+
+ if (sysprof_address_is_context_switch (sample->addrs[i], &context))
+ {
+ last_context = context;
+ continue;
+ }
+
+ name = sysprof_symbol_resolver_resolve_with_context (resolver,
+ sample->frame.time,
+ sample->frame.pid,
+ last_context,
+ sample->addrs[i],
+ &tag);
+
+ g_print ("%u: %s [%s]\n",
+ i,
+ name ? name : "-- missing --",
+ tag ? g_quark_to_string (tag) : "");
+ }
+
+ g_print ("======\n");
+
+ continue;
+ }
+ }
+
+ if (!sysprof_capture_reader_skip (reader))
+ break;
+ }
+
+ return 0;
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]