Author: Remi Meier <[email protected]>
Branch: nogil-unsafe-2
Changeset: r90509:3fe01091f755
Date: 2017-03-03 15:21 +0100
http://bitbucket.org/pypy/pypy/changeset/3fe01091f755/
Log: add colourful, thread-prefixed debug print
(imported from stmgc-c8 branch)
diff --git a/rpython/translator/c/src/debug_print.c
b/rpython/translator/c/src/debug_print.c
--- a/rpython/translator/c/src/debug_print.c
+++ b/rpython/translator/c/src/debug_print.c
@@ -12,15 +12,16 @@
#include <windows.h>
#endif
#include "common_header.h"
+#include "structdef.h"
#include "src/profiling.h"
#include "src/debug_print.h"
-long pypy_have_debug_prints = -1;
FILE *pypy_debug_file = NULL;
static unsigned char debug_ready = 0;
static unsigned char debug_profile = 0;
-static char *debug_start_colors_1 = "";
-static char *debug_start_colors_2 = "";
+static __thread char debug_start_colors_1[32];
+static __thread char debug_start_colors_2[28];
+__thread char pypy_debug_threadid[16] = {0};
static char *debug_stop_colors = "";
static char *debug_prefix = NULL;
@@ -90,8 +91,6 @@
pypy_debug_file = stderr;
if (isatty(2))
{
- debug_start_colors_1 = "\033[1m\033[31m";
- debug_start_colors_2 = "\033[31m";
debug_stop_colors = "\033[0m";
}
}
@@ -210,6 +209,40 @@
debug_stop_colors);
}
+
+#define bool_cas __sync_bool_compare_and_swap
+static Signed threadcounter = 0;
+
+static void _prepare_display_colors(void)
+{
+ Signed counter;
+ char *p;
+ while (1) {
+ counter = threadcounter;
+ if (bool_cas(&threadcounter, counter, counter + 1))
+ break;
+ }
+ if (debug_stop_colors[0] == 0) {
+ /* not a tty output: no colors */
+ sprintf(debug_start_colors_1, "%d# ", (int)counter);
+ sprintf(debug_start_colors_2, "%d# ", (int)counter);
+ sprintf(pypy_debug_threadid, "%d#", (int)counter);
+ }
+ else {
+ /* tty output */
+ int color = 0;
+ color = 31 + (int)(counter % 7);
+ sprintf(debug_start_colors_1, "\033[%dm%d# \033[1m",
+ color, (int)counter);
+ sprintf(debug_start_colors_2, "\033[%dm%d# ",
+ color, (int)counter);
+#ifdef RPY_STM
+ sprintf(pypy_debug_threadid, "\033[%dm%d#\033[0m",
+ color, (int)counter);
+#endif
+ }
+}
+
void pypy_debug_start(const char *category)
{
pypy_debug_ensure_opened();
@@ -229,6 +262,8 @@
/* else make this subsection active */
pypy_have_debug_prints |= 1;
}
+ if (!debug_start_colors_1[0])
+ _prepare_display_colors();
display_startstop("{", "", category, debug_start_colors_1);
}
diff --git a/rpython/translator/c/src/debug_print.h
b/rpython/translator/c/src/debug_print.h
--- a/rpython/translator/c/src/debug_print.h
+++ b/rpython/translator/c/src/debug_print.h
@@ -27,6 +27,10 @@
removed from the environment and not passed to subprocesses.
*/
+RPY_EXTERN __thread struct pypy_ExcData0 pypy_g_ExcData;
+#define pypy_have_debug_prints pypy_g_ExcData.ed_have_debug_prints
+
+
/* macros used by the generated code */
#define PYPY_HAVE_DEBUG_PRINTS (pypy_have_debug_prints & 1 ? \
(pypy_debug_ensure_opened(), 1) : 0)
@@ -48,7 +52,7 @@
RPY_EXTERN void pypy_debug_forked(long original_offset);
RPY_EXTERN long pypy_have_debug_prints_for(const char *category_prefix);
-RPY_EXTERN long pypy_have_debug_prints;
+RPY_EXTERN __thread char pypy_debug_threadid[];
RPY_EXPORTED FILE *pypy_debug_file;
#define OP_LL_READ_TIMESTAMP(val) READ_TIMESTAMP(val)
diff --git a/rpython/translator/c/test/test_standalone.py
b/rpython/translator/c/test/test_standalone.py
--- a/rpython/translator/c/test/test_standalone.py
+++ b/rpython/translator/c/test/test_standalone.py
@@ -1442,9 +1442,9 @@
def bootstrap():
rthread.gc_thread_start()
x = None
- for i in range(10000000):
+ for i in range(100000000):
x = X(x)
- if i % 10001 == 0:
+ if i % 5001 == 0:
x = None
state.lock.acquire(True)
diff --git a/rpython/translator/exceptiontransform.py
b/rpython/translator/exceptiontransform.py
--- a/rpython/translator/exceptiontransform.py
+++ b/rpython/translator/exceptiontransform.py
@@ -453,10 +453,12 @@
EXCDATA = lltype.Struct('ExcData',
('exc_type', self.lltype_of_exception_type),
('exc_value', self.lltype_of_exception_value),
+ ('have_debug_prints', lltype.Signed),
hints={'thread_local': True, 'is_excdata': True})
self.EXCDATA = EXCDATA
exc_data = lltype.malloc(EXCDATA, immortal=True)
+ exc_data.have_debug_prints = -1
null_type = lltype.nullptr(self.lltype_of_exception_type.TO)
null_value = lltype.nullptr(self.lltype_of_exception_value.TO)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit