Commit a6e074f7 authored by Robert Bradshaw's avatar Robert Bradshaw

Turn of profiling by default, rename macro.

parent b22b91af
...@@ -1062,14 +1062,11 @@ class FuncDefNode(StatNode, BlockNode): ...@@ -1062,14 +1062,11 @@ class FuncDefNode(StatNode, BlockNode):
is_getbuffer_slot = (self.entry.name == "__getbuffer__" and is_getbuffer_slot = (self.entry.name == "__getbuffer__" and
self.entry.scope.is_c_class_scope) self.entry.scope.is_c_class_scope)
if code.globalstate.directives['profile'] is None:
profile = 'inline' not in self.modifiers and not lenv.nogil
else:
profile = code.globalstate.directives['profile'] profile = code.globalstate.directives['profile']
if profile and lenv.nogil:
error(self.pos, "Cannot profile nogil function.")
if profile: if profile:
code.globalstate.use_utility_code(trace_utility_code) if lenv.nogil:
error(self.pos, "Cannot profile nogil function.")
code.globalstate.use_utility_code(profile_utility_code)
# Generate C code for header and body of function # Generate C code for header and body of function
code.enter_cfunc_scope() code.enter_cfunc_scope()
...@@ -5791,22 +5788,22 @@ proto=""" ...@@ -5791,22 +5788,22 @@ proto="""
# Note that cPython ignores PyTrace_EXCEPTION, # Note that cPython ignores PyTrace_EXCEPTION,
# but maybe some other profilers don't. # but maybe some other profilers don't.
trace_utility_code = UtilityCode(proto=""" profile_utility_code = UtilityCode(proto="""
#ifndef CYTHON_TRACING #ifndef CYTHON_PROFILE
#define CYTHON_TRACING 1 #define CYTHON_PROFILE 1
#endif #endif
#ifndef CYTHON_TRACING_REUSE_FRAME #ifndef CYTHON_PROFILE_REUSE_FRAME
#define CYTHON_TRACING_REUSE_FRAME 0 #define CYTHON_PROFILE_REUSE_FRAME 0
#endif #endif
#if CYTHON_TRACING #if CYTHON_PROFILE
#include "compile.h" #include "compile.h"
#include "frameobject.h" #include "frameobject.h"
#include "traceback.h" #include "traceback.h"
#if CYTHON_TRACING_REUSE_FRAME #if CYTHON_PROFILE_REUSE_FRAME
#define CYTHON_FRAME_MODIFIER static #define CYTHON_FRAME_MODIFIER static
#define CYTHON_FRAME_DEL #define CYTHON_FRAME_DEL
#else #else
...@@ -5846,7 +5843,7 @@ static int __Pyx_TraceSetupAndCall(PyCodeObject** code, PyFrameObject** frame, c ...@@ -5846,7 +5843,7 @@ static int __Pyx_TraceSetupAndCall(PyCodeObject** code, PyFrameObject** frame, c
#define __Pyx_TraceCall(funcname, srcfile, firstlineno) #define __Pyx_TraceCall(funcname, srcfile, firstlineno)
#define __Pyx_TraceException() #define __Pyx_TraceException()
#define __Pyx_TraceReturn(result) #define __Pyx_TraceReturn(result)
#endif /* CYTHON_TRACING */ #endif /* CYTHON_PROFILE */
""" """
% { % {
"FRAME": Naming.frame_cname, "FRAME": Naming.frame_cname,
...@@ -5854,14 +5851,14 @@ static int __Pyx_TraceSetupAndCall(PyCodeObject** code, PyFrameObject** frame, c ...@@ -5854,14 +5851,14 @@ static int __Pyx_TraceSetupAndCall(PyCodeObject** code, PyFrameObject** frame, c
}, },
impl = """ impl = """
#if CYTHON_TRACING #if CYTHON_PROFILE
static int __Pyx_TraceSetupAndCall(PyCodeObject** code, static int __Pyx_TraceSetupAndCall(PyCodeObject** code,
PyFrameObject** frame, PyFrameObject** frame,
const char *funcname, const char *funcname,
const char *srcfile, const char *srcfile,
int firstlineno) { int firstlineno) {
if (*frame == NULL || !CYTHON_TRACING_REUSE_FRAME) { if (*frame == NULL || !CYTHON_PROFILE_REUSE_FRAME) {
if (*code == NULL) { if (*code == NULL) {
*code = __Pyx_createFrameCodeObject(funcname, srcfile, firstlineno); *code = __Pyx_createFrameCodeObject(funcname, srcfile, firstlineno);
if (*code == NULL) return 0; if (*code == NULL) return 0;
...@@ -5921,7 +5918,7 @@ bad: ...@@ -5921,7 +5918,7 @@ bad:
return py_code; return py_code;
} }
#endif /* CYTHON_TRACING */ #endif /* CYTHON_PROFILE */
""" % { """ % {
'EMPTY_TUPLE' : Naming.empty_tuple, 'EMPTY_TUPLE' : Naming.empty_tuple,
'EMPTY_BYTES' : Naming.empty_bytes, 'EMPTY_BYTES' : Naming.empty_bytes,
......
...@@ -67,11 +67,11 @@ option_defaults = { ...@@ -67,11 +67,11 @@ option_defaults = {
'wraparound' : True, 'wraparound' : True,
'c99_complex' : False, # Don't use macro wrappers for complex arith, not sure what to name this... 'c99_complex' : False, # Don't use macro wrappers for complex arith, not sure what to name this...
'callspec' : "", 'callspec' : "",
'profile': None, 'profile': False,
} }
# Override types possibilities above, if needed # Override types possibilities above, if needed
option_types = { 'profile': bool } option_types = {}
for key, val in option_defaults.items(): for key, val in option_defaults.items():
if key not in option_types: if key not in option_types:
......
...@@ -13,4 +13,4 @@ bad_c_struct_T252 ...@@ -13,4 +13,4 @@ bad_c_struct_T252
missing_baseclass_in_predecl_T262 missing_baseclass_in_predecl_T262
# Not yet enabled # Not yet enabled
profile_test # profile_test
# cython: profile = True
__doc__ = u""" __doc__ = u"""
>>> import os, tempfile, cProfile as profile, pstats >>> import os, tempfile, cProfile as profile, pstats
>>> statsfile = tempfile.mkstemp()[1] >>> statsfile = tempfile.mkstemp()[1]
...@@ -9,9 +11,7 @@ __doc__ = u""" ...@@ -9,9 +11,7 @@ __doc__ = u"""
>>> short_stats['f_cdef'] >>> short_stats['f_cdef']
100 100
>>> short_stats['f_inline'] >>> short_stats['f_inline']
Traceback (most recent call last): 100
...
KeyError: 'f_inline'
>>> short_stats['f_inline_prof'] >>> short_stats['f_inline_prof']
100 100
>>> short_stats['f_noprof'] >>> short_stats['f_noprof']
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment