[sysprof/wip/chergert/sysprof-3] tests: add decode-only test



commit f46601855a26a9d88de8a5370b87724f17b24832
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]