예제 #1
0
 private function getSymbol($name)
 {
     $symbol =& $this->symbols[$name];
     if (null === $symbol) {
         $symbol = new Symbol();
         $symbol->name = $name;
         $symbol->findOrSave();
     }
     return $symbol;
 }
예제 #2
0
 static function setUpColumns($columns)
 {
     $columns->parentSymbolId = Symbol::columns()->id;
     $columns->childSymbolId = Symbol::columns()->id;
     $columns->runId = Run::columns()->id;
     parent::setUpColumns($columns);
 }
예제 #3
0
 static function setUpColumns($columns)
 {
     $columns->symbolId = Symbol::columns()->id;
     $columns->runId = Run::columns()->id;
     $columns->isInclusive = Column::INTEGER;
     parent::setUpColumns($columns);
 }
예제 #4
0
 public function showSymbol()
 {
     if (!empty($_GET['run'])) {
         $run = new Run();
         $run->name = $_GET['run'];
         $run->findSaved()->id;
         $this->runName = $run->findSaved()->id;
     }
     /** @var Symbol $symbol */
     $symbol = Symbol::statement()->where('? = ?', Symbol::columns()->name, $this->symbol)->query()->fetchRow();
     if (null === $symbol) {
         return $this->error('Symbol ? not found', $this->symbol);
     }
     $stack = new Stack();
     $database = Database::getInstance();
     $inc = RelatedStat::columns();
     $mainSymbol = new Symbol();
     $mainSymbol->name = 'main()';
     $mainSymbol->findOrSave();
     $total_wt = $database->select(Run::table())->select("SUM(?) AS total_wt", Run::columns()->wallTime)->query()->fetchRow('total_wt');
     $stack->push(Raw::create('<h2>Total: ' . $total_wt . '</h2>'));
     $statement = $database->select(RelatedStat::table())->select("SUM(?)/1000000 AS total_wt, SUM(?) AS total_ct, COUNT(DISTINCT ?) AS runs, ? AS symbol_id, ?", $inc->wallTime, $inc->calls, $inc->runId, $inc->parentSymbolId, Symbol::columns()->name)->leftJoin('? ON ? = ?', Symbol::table(), Symbol::columns()->id, $inc->parentSymbolId)->where('? = ?', $inc->childSymbolId, $symbol->id)->groupBy($inc->parentSymbolId)->order('total_wt DESC')->limit(50);
     $res = $statement->query();
     $table = new HTML();
     $stack->push(Raw::create('<h2>Parents</h2>'));
     $stack->push($table);
     foreach ($res as $row) {
         $row['percent'] = round(100 * $row['total_wt'] / $total_wt, 2);
         $row['name'] = '<a href="?symbol=' . urlencode($row['name']) . '&run=' . $_GET['run'] . '">' . $row['name'] . '</a>';
         unset($row['symbol_id']);
         $table->addRow($row);
     }
     $statement = $database->select(RelatedStat::table())->select("SUM(?)/1000000 AS total_wt, SUM(?) AS total_ct, COUNT(DISTINCT ?) AS runs, ? AS symbol_id, ?", $inc->wallTime, $inc->calls, $inc->runId, $inc->childSymbolId, Symbol::columns()->name)->leftJoin('? ON ? = ?', Symbol::table(), Symbol::columns()->id, $inc->childSymbolId)->where('? = ?', $inc->parentSymbolId, $symbol->id)->groupBy($inc->childSymbolId)->order('total_wt DESC')->limit(50);
     $res = $statement->query();
     $table = new HTML();
     $stack->push(Raw::create('<h2>Children</h2>'));
     $stack->push($table);
     foreach ($res as $row) {
         $row['percent'] = round(100 * $row['total_wt'] / $total_wt, 2);
         $row['name'] = '<a href="?symbol=' . urlencode($row['name']) . '&run=' . $_GET['run'] . '">' . $row['name'] . '</a>';
         unset($row['symbol_id']);
         $table->addRow($row);
     }
     $this->layout->setTitle($symbol->name)->pushMain($stack)->render();
 }
예제 #5
0
 public function run(Log $log = null)
 {
     /** @var \Yaoi\Database\Definition\Table[] $tables */
     $tables = array(Symbol::table(), Run::table(), RelatedStat::table(), SymbolStat::table(), Project::table(), Tag::table(), Aggregate::table(), ReportAggregate::table(), TagGroup::table());
     if (null === $log) {
         $log = Log::nil();
     }
     foreach ($tables as $table) {
         $table->migration()->setLog($log)->apply();
     }
 }
예제 #6
0
 public function listTop()
 {
     $database = Database::getInstance();
     $esc = SymbolStat::columns();
     $statement = $database->select(SymbolStat::table())->select("SUM(?) AS total_wt, SUM(?) AS total_ct, COUNT(DISTINCT ?) AS runs, ?, ?", $esc->wallTime, $esc->calls, $esc->runId, $esc->symbolId, Symbol::columns()->name)->leftJoin('? ON ? = ?', Symbol::table(), Symbol::columns()->id, $esc->symbolId)->groupBy(SymbolStat::columns()->symbolId)->order('total_wt DESC')->limit(50);
     $res = $statement->query();
     $table = new HTML();
     foreach ($res as $row) {
         $row['name'] = '<a href="?symbol=' . urlencode($row['name']) . '">' . $row['name'] . '</a>';
         unset($row['symbol_id']);
         $table->addRow($row);
     }
     $this->layout->pushMain($table)->render();
 }
예제 #7
0
 /**
  * @return $this|\Yaoi\Sql\SelectInterface|\Yaoi\Sql\UpdateInterface
  */
 public function build($statExpr)
 {
     $symbolsDerived = SymbolStat::table('s');
     $symbolsDerivedCols = SymbolStat::columns($symbolsDerived);
     $symbolCols = Symbol::columns();
     $this->expr = Database::getInstance()->statement()->select('? AS ?', $symbolCols->name, new S('function'))->from('? AS s', $statExpr)->leftJoin('? ON ? = ?', Symbol::table(), $symbolsDerivedCols->symbolId, $symbolCols->id)->groupBy('?', $symbolsDerivedCols->symbolId);
     $this->avgWtSymbols = array();
     foreach ($this->runs as $run) {
         $runXTable = SymbolStat::table($run->name);
         $runXCols = SymbolStat::columns($runXTable);
         $this->addColumns($run, $runXCols);
         $this->expr->leftJoin('? ON ? = ? AND ? = ? AND ? = ?', $runXTable, $runXCols->symbolId, $symbolsDerivedCols->symbolId, $runXCols->isInclusive, $this->isInclusive, $runXCols->runId, $run->id);
     }
     $outerExpr = Database::getInstance()->statement()->select('*')->from('? AS ss', $this->expr)->order('COALESCE(null, ?) DESC', array($this->avgWtSymbols))->limit($this->limit);
     return $outerExpr;
 }