aboutsummaryrefslogtreecommitdiffstats
path: root/debug_toolbar/panels/profiling.py
diff options
context:
space:
mode:
Diffstat (limited to 'debug_toolbar/panels/profiling.py')
-rw-r--r--debug_toolbar/panels/profiling.py47
1 files changed, 2 insertions, 45 deletions
diff --git a/debug_toolbar/panels/profiling.py b/debug_toolbar/panels/profiling.py
index f4d32c4..eacd62c 100644
--- a/debug_toolbar/panels/profiling.py
+++ b/debug_toolbar/panels/profiling.py
@@ -2,16 +2,8 @@ from __future__ import absolute_import, division, unicode_literals
from django.utils.translation import ugettext_lazy as _
from django.utils.safestring import mark_safe
-from django.utils.six.moves import cStringIO
from debug_toolbar.panels import Panel
-try:
- from line_profiler import LineProfiler, show_func
- DJ_PROFILE_USE_LINE_PROFILER = True
-except ImportError:
- DJ_PROFILE_USE_LINE_PROFILER = False
-
-
import cProfile
from pstats import Stats
from colorsys import hsv_to_rgb
@@ -43,7 +35,6 @@ class FunctionCall(object):
self.id = id
self.parent_ids = parent_ids
self.hsv = hsv
- self._line_stats_text = None
def parent_classes(self):
return self.parent_classes
@@ -127,18 +118,6 @@ class FunctionCall(object):
def indent(self):
return 16 * self.depth
- def line_stats_text(self):
- if self._line_stats_text is None and DJ_PROFILE_USE_LINE_PROFILER:
- lstats = self.statobj.line_stats
- if self.func in lstats.timings:
- out = cStringIO()
- fn, lineno, name = self.func
- show_func(fn, lineno, name, lstats.timings[self.func], lstats.unit, stream=out)
- self._line_stats_text = out.getvalue()
- else:
- self._line_stats_text = False
- return self._line_stats_text
-
class ProfilingPanel(Panel):
"""
@@ -148,37 +127,17 @@ class ProfilingPanel(Panel):
template = 'debug_toolbar/panels/profiling.html'
- def _unwrap_closure_and_profile(self, func):
- if not hasattr(func, '__code__'):
- return
- self.line_profiler.add_function(func)
- if func.__closure__:
- for cell in func.__closure__:
- if hasattr(cell.cell_contents, '__code__'):
- self._unwrap_closure_and_profile(cell.cell_contents)
-
def process_view(self, request, view_func, view_args, view_kwargs):
self.profiler = cProfile.Profile()
args = (request,) + view_args
- if DJ_PROFILE_USE_LINE_PROFILER:
- self.line_profiler = LineProfiler()
- self._unwrap_closure_and_profile(view_func)
- self.line_profiler.enable_by_count()
- out = self.profiler.runcall(view_func, *args, **view_kwargs)
- self.line_profiler.disable_by_count()
- else:
- self.line_profiler = None
- out = self.profiler.runcall(view_func, *args, **view_kwargs)
- return out
+ return self.profiler.runcall(view_func, *args, **view_kwargs)
def add_node(self, func_list, func, max_depth, cum_time=0.1):
func_list.append(func)
func.has_subfuncs = False
if func.depth < max_depth:
for subfunc in func.subfuncs():
- if (subfunc.stats[3] >= cum_time or
- (hasattr(self.stats, 'line_stats') and
- (subfunc.func in self.stats.line_stats.timings))):
+ if subfunc.stats[3] >= cum_time:
func.has_subfuncs = True
self.add_node(func_list, subfunc, max_depth, cum_time=cum_time)
@@ -188,8 +147,6 @@ class ProfilingPanel(Panel):
# Could be delayed until the panel content is requested (perf. optim.)
self.profiler.create_stats()
self.stats = DjangoDebugToolbarStats(self.profiler)
- if DJ_PROFILE_USE_LINE_PROFILER:
- self.stats.line_stats = self.line_profiler.get_stats()
self.stats.calc_callees()
root = FunctionCall(self.stats, self.stats.get_root_func(), depth=0)