diff --git a/src/serviceprofiler/PhutilServiceProfiler.php b/src/serviceprofiler/PhutilServiceProfiler.php --- a/src/serviceprofiler/PhutilServiceProfiler.php +++ b/src/serviceprofiler/PhutilServiceProfiler.php @@ -10,7 +10,9 @@ private $listeners = array(); private $events = array(); private $logSize = 0; + private $discardMode = false; + private $collectStackTraces; private function __construct() {} @@ -18,6 +20,15 @@ $this->discardMode = true; } + public function setCollectStackTraces($collect_stack_traces) { + $this->collectStackTraces = $collect_stack_traces; + return $this; + } + + public function getCollectStackTraces() { + return $this->collectStackTraces; + } + public static function getInstance() { if (empty(self::$instance)) { self::$instance = new PhutilServiceProfiler(); @@ -27,6 +38,13 @@ public function beginServiceCall(array $data) { $data['begin'] = microtime(true); + + if ($this->collectStackTraces) { + $trace = debug_backtrace(); + $trace = PhutilErrorHandler::formatStacktrace($trace); + $data['trace'] = $trace; + } + $id = $this->logSize++; $this->events[$id] = $data; foreach ($this->listeners as $listener) {