diff --git a/framework/yii/logging/ProfileTarget.php b/framework/yii/logging/ProfileTarget.php
deleted file mode 100644
index be1d73d..0000000
--- a/framework/yii/logging/ProfileTarget.php
+++ /dev/null
@@ -1,192 +0,0 @@
-
- *
summary: list the execution time of every marked code block
- * callstack: list the mark code blocks in a hierarchical view reflecting their calling sequence.
- *
- *
- * @author Qiang Xue
- * @since 2.0
- */
-class CProfileLogRoute extends CWebLogRoute
-{
- /**
- * @var boolean whether to aggregate results according to profiling tokens.
- * If false, the results will be aggregated by categories.
- * Defaults to true. Note that this property only affects the summary report
- * that is enabled when {@link report} is 'summary'.
- */
- public $groupByToken = true;
- /**
- * @var string type of profiling report to display
- */
- private $_report = 'summary';
-
- /**
- * Initializes the route.
- * This method is invoked after the route is created by the route manager.
- */
- public function init()
- {
- $this->levels = CLogger::LEVEL_PROFILE;
- }
-
- /**
- * @return string the type of the profiling report to display. Defaults to 'summary'.
- */
- public function getReport()
- {
- return $this->_report;
- }
-
- /**
- * @param string $value the type of the profiling report to display. Valid values include 'summary' and 'callstack'.
- */
- public function setReport($value)
- {
- if ($value === 'summary' || $value === 'callstack')
- $this->_report = $value;
- else
- throw new CException(Yii::t('yii', 'CProfileLogRoute.report "{report}" is invalid. Valid values include "summary" and "callstack".',
- array('{report}' => $value)));
- }
-
- /**
- * Displays the log messages.
- * @param array $logs list of log messages
- */
- public function processLogs($logs)
- {
- $app = \Yii::$app;
- if (!($app instanceof \yii\web\Application) || $app->getRequest()->getIsAjax())
- return;
-
- if ($this->getReport() === 'summary')
- $this->displaySummary($logs);
- else
- $this->displayCallstack($logs);
- }
-
- /**
- * Displays the callstack of the profiling procedures for display.
- * @param array $logs list of logs
- */
- protected function displayCallstack($logs)
- {
- $stack = array();
- $results = array();
- $n = 0;
- foreach ($logs as $log)
- {
- if ($log[1] !== CLogger::LEVEL_PROFILE) {
- continue;
- }
- $message = $log[0];
- if (!strncasecmp($message, 'begin:', 6)) {
- $log[0] = substr($message, 6);
- $log[4] = $n;
- $stack[] = $log;
- $n++;
- } elseif (!strncasecmp($message, 'end:', 4)) {
- $token = substr($message, 4);
- if (($last = array_pop($stack)) !== null && $last[0] === $token) {
- $delta = $log[3] - $last[3];
- $results[$last[4]] = array($token, $delta, count($stack));
- } else
- {
- throw new CException(Yii::t('yii', 'CProfileLogRoute found a mismatching code block "{token}". Make sure the calls to Yii::beginProfile() and Yii::endProfile() be properly nested.',
- array('{token}' => $token)));
- }
- }
- }
- // remaining entries should be closed here
- $now = microtime(true);
- while (($last = array_pop($stack)) !== null) {
- $results[$last[4]] = array($last[0], $now - $last[3], count($stack));
- }
- ksort($results);
- $this->render('profile-callstack', $results);
- }
-
- /**
- * Displays the summary report of the profiling result.
- * @param array $logs list of logs
- */
- protected function displaySummary($logs)
- {
- $stack = array();
- foreach ($logs as $log)
- {
- if ($log[1] !== CLogger::LEVEL_PROFILE)
- continue;
- $message = $log[0];
- if (!strncasecmp($message, 'begin:', 6))
- {
- $log[0] = substr($message, 6);
- $stack[] = $log;
- } elseif (!strncasecmp($message, 'end:', 4))
- {
- $token = substr($message, 4);
- if (($last = array_pop($stack)) !== null && $last[0] === $token)
- {
- $delta = $log[3] - $last[3];
- if (!$this->groupByToken)
- $token = $log[2];
- if (isset($results[$token]))
- $results[$token] = $this->aggregateResult($results[$token], $delta);
- else
- $results[$token] = array($token, 1, $delta, $delta, $delta);
- } else
- throw new CException(Yii::t('yii', 'CProfileLogRoute found a mismatching code block "{token}". Make sure the calls to Yii::beginProfile() and Yii::endProfile() be properly nested.',
- array('{token}' => $token)));
- }
- }
-
- $now = microtime(true);
- while (($last = array_pop($stack)) !== null)
- {
- $delta = $now - $last[3];
- $token = $this->groupByToken ? $last[0] : $last[2];
- if (isset($results[$token]))
- $results[$token] = $this->aggregateResult($results[$token], $delta);
- else
- $results[$token] = array($token, 1, $delta, $delta, $delta);
- }
-
- $entries = array_values($results);
- $func = create_function('$a,$b', 'return $a[4] < $b[4] ? 1 : 0;');
- usort($entries, $func);
-
- $this->render('profile-summary', $entries);
- }
-
- /**
- * Aggregates the report result.
- * @param array $result log result for this code block
- * @param float $delta time spent for this code block
- * @return array
- */
- protected function aggregateResult($result, $delta)
- {
- list($token, $calls, $min, $max, $total) = $result;
- if ($delta < $min)
- $min = $delta;
- elseif ($delta > $max)
- $max = $delta;
- $calls++;
- $total += $delta;
- return array($token, $calls, $min, $max, $total);
- }
-}