protected function _toHtml() { if (!$this->_beforeToHtml() || !Mage::getStoreConfig('dev/debug/profiler') || !Mage::helper('core')->isDevAllowed()) { return ''; } $timers = Varien_Profiler::getTimers(); #$out = '<div style="position:fixed;bottom:5px;right:5px;opacity:.1;background:white" onmouseover="this.style.opacity=1" onmouseout="this.style.opacity=.1">'; #$out = '<div style="opacity:.1" onmouseover="this.style.opacity=1" onmouseout="this.style.opacity=.1">'; $out = "<a href=\"javascript:void(0)\" onclick=\"\$('profiler_section').style.display=\$('profiler_section').style.display==''?'none':''\">[profiler]</a>"; $out .= '<div id="profiler_section" style="background:white; display:block">'; $out .= '<pre>Memory usage: real: ' . memory_get_usage(true) . ', emalloc: ' . memory_get_usage() . '</pre>'; $out .= '<table border="1" cellspacing="0" cellpadding="2" style="width:auto">'; $out .= '<tr><th>Code Profiler</th><th>Time</th><th>Cnt</th><th>Emalloc</th><th>RealMem</th></tr>'; foreach ($timers as $name => $timer) { $sum = Varien_Profiler::fetch($name, 'sum'); $count = Varien_Profiler::fetch($name, 'count'); $realmem = Varien_Profiler::fetch($name, 'realmem'); $emalloc = Varien_Profiler::fetch($name, 'emalloc'); if ($sum < 0.001 && $count < 10 && $emalloc < 10000) { continue; } $out .= '<tr>' . '<td align="left">' . $name . '</td>' . '<td>' . number_format($sum, 4) . '</td>' . '<td align="right">' . $count . '</td>' . '<td align="right">' . number_format($emalloc) . '</td>' . '<td align="right">' . number_format($realmem) . '</td>' . '</tr>'; } $out .= '</table>'; $out .= '<pre>'; $out .= print_r(Varien_Profiler::getSqlProfiler(Mage::getSingleton('core/resource')->getConnection('core_write')), 1); $out .= '</pre>'; $out .= '</div>'; return $out; }
public function getTimers() { $timers = Varien_Profiler::getTimers(); foreach ($timers as $key => $value) { $timers[$key]['sum'] = Varien_Profiler::fetch($key, 'sum'); } uasort($timers, array('self', 'compareTimers')); return $timers; }
public function logProfiler($filename) { $timers = Varien_Profiler::getTimers(); Mage::log('--------------------------------------------------', Zend_Log::DEBUG, $filename); Mage::log("Code Profiler\tTime\tCnt\tEmalloc\tRealMem", Zend_Log::DEBUG, $filename); foreach ($timers as $name => $timer) { $sum = Varien_Profiler::fetch($name, 'sum'); $count = Varien_Profiler::fetch($name, 'count'); $realmem = Varien_Profiler::fetch($name, 'realmem'); $emalloc = Varien_Profiler::fetch($name, 'emalloc'); if ($sum < 0.001 && $count < 10 && $emalloc < 10000) { continue; } Mage::log(sprintf("%s\t%s\t%s\t%s\t%s", $name, number_format($sum, 4), $count, number_format($emalloc), number_format($realmem)), Zend_Log::DEBUG, $filename); } }
/** * Displays the Varien_Profiler data to the screen. If it is not enabled, it will * indicate that it is disabled. * * @author Ben Robie <*****@*****.**> **/ function _flushProfileData() { $timers = Varien_Profiler::getTimers(); foreach ($timers as $name => $timer) { $sum = Varien_Profiler::fetch($name, 'sum'); $count = Varien_Profiler::fetch($name, 'count'); $realmem = Varien_Profiler::fetch($name, 'realmem'); $emalloc = Varien_Profiler::fetch($name, 'emalloc'); if ($sum < 0.001 && $count < 10 && $emalloc < 10000) { continue; } $output[] = array('Code Profiler' => $name, 'Time' => $sum, 'Cnt' => (string) $count, 'Emalloc' => (string) number_format($emalloc), 'RealMem' => (string) number_format($realmem)); } echo Wiz::tableOutput($output); }
public function getLabel() { return number_format(Varien_Profiler::fetch('mage', 'sum'), 2) . ' s'; }
public function logprofiler($action) { $suiteLogPath = Mage::getBaseDir('var') . DS . 'log' . DS . 'SagePaySuite'; $profilerPath = $suiteLogPath . DS . 'PROFILER'; if (!is_dir($suiteLogPath)) { mkdir($suiteLogPath, 0755); } if (!is_dir($profilerPath)) { mkdir($profilerPath, 0755); } $timers = Varien_Profiler::getTimers(); $request = $action->getRequest(); $prefix = $request->getParam('vtxcode', $request->getParam('VPSTxId', null)); $prefix = $prefix ? $prefix . '_' : ''; $longest = 0; $rows = array(); foreach ($timers as $name => $timer) { $sum = Varien_Profiler::fetch($name, 'sum'); $count = Varien_Profiler::fetch($name, 'count'); $realmem = Varien_Profiler::fetch($name, 'realmem'); $emalloc = Varien_Profiler::fetch($name, 'emalloc'); if ($sum < 0.001 && $count < 10 && $emalloc < 10000) { continue; } $rows[] = array((string) $name, (string) number_format($sum, 4), (string) $count, (string) number_format($emalloc), (string) number_format($realmem)); $thislong = strlen($name); if ($thislong > $longest) { $longest = $thislong; } } //Create table $table = new Zend_Text_Table(array('columnWidths' => array($longest, 10, 6, 12, 12), 'decorator' => 'ascii')); //Memory $preheader = new Zend_Text_Table_Row(); $real = memory_get_usage(true); $emalloc = memory_get_usage(); $preheader->appendColumn(new Zend_Text_Table_Column('real Memory usage: ' . $real . ' ' . ceil($real / 1048576) . 'MB', 'center', 1)); $preheader->appendColumn(new Zend_Text_Table_Column('emalloc Memory usage: ' . $emalloc . ' ' . ceil($emalloc / 1048576) . 'MB', 'center', 4)); $table->appendRow($preheader); //Append Header $header = new Zend_Text_Table_Row(); $header->appendColumn(new Zend_Text_Table_Column('Code Profiler', 'center')); $header->appendColumn(new Zend_Text_Table_Column('Time', 'center')); $header->appendColumn(new Zend_Text_Table_Column('Cnt', 'center')); $header->appendColumn(new Zend_Text_Table_Column('Emalloc', 'center')); $header->appendColumn(new Zend_Text_Table_Column('RealMem', 'center')); $table->appendRow($header); foreach ($rows as $row) { $table->appendRow($row); } //SQL profile $dbprofile = print_r(Varien_Profiler::getSqlProfiler(Mage::getSingleton('core/resource')->getConnection('core_write')), TRUE); $dbprofile = substr($dbprofile, 0, -4); $dbprofile = str_replace('<br>', "\n", $dbprofile); $preheaderlabel = new Zend_Text_Table_Row(); $preheaderlabel->appendColumn(new Zend_Text_Table_Column('DATABASE', 'center', 5)); $table->appendRow($preheaderlabel); $preheader = new Zend_Text_Table_Row(); $preheader->appendColumn(new Zend_Text_Table_Column($dbprofile, 'left', 5)); $table->appendRow($preheader); //Request $rqlabel = new Zend_Text_Table_Row(); $rqlabel->appendColumn(new Zend_Text_Table_Column('REQUEST', 'center', 5)); $table->appendRow($rqlabel); $inforqp = new Zend_Text_Table_Row(); $inforqp->appendColumn(new Zend_Text_Table_Column($this->_filterRequest($request), 'left', 5)); $table->appendRow($inforqp); $date = Mage::getModel('core/date')->date('Y-m-d\\.H-i-s'); $file = new SplFileObject($profilerPath . DS . $prefix . $date . '_' . $action->getFullActionName() . '.txt', 'w'); $file->fwrite($table); }
/** * * @param string $timerName * @param string $key key from the timer entry. default is 'sum' which will return an integer * @return mixed depending on $key */ public function fetch($timerName, $key = 'sum') { return Varien_Profiler::fetch($timerName, $key); }
/** * The main loop * * @return void * **/ public function startConsole() { require_once 'ShallowParser.php'; $parser = new Boris_ShallowParser(); $buf = ''; $prompt = '>> '; // Oh so infinite for (;;) { // Read the line from the CLI. If we haven't yet terminated the current statement, // add an asterisk to the prompt as a little visual hint $line = readline($buf == '' ? $prompt : str_pad('?> ', strlen($prompt), ' ', STR_PAD_LEFT)); // Add to the history if ($line == 'clear') { $this->clear(); continue; } readline_add_history($line); if ($line === false) { break; } $buf .= $line; if ($this->profiling) { Varien_Profiler::reset('test'); Varien_Profiler::start('test'); } if ($this->database) { $res = Mage::getSingleton('core/resource')->getConnection('core_read'); $profiler = $res->getProfiler(); $profiler->setEnabled(true); $profiler->clear(); } // This is some clever stuff from Boris. It parses the current command // and finds out what the heck is going on in there and if it's finished // yet. if ($statements = $parser->statements($buf)) { $buf = ''; $fromglobalfunction = false; // Then try each statement foreach ($statements as $stmt) { try { // The exciting bit $result = eval($stmt); if ($result !== 'fromglobalfunction') { $this->output($result); } else { $fromglobalfunction = true; } } catch (Exception $e) { $this->out("! " . $e->getMessage(), 'red'); continue; } } if ($this->profiling) { Varien_Profiler::stop('test'); } if ($this->database) { if ($profiler->getEnabled()) { $totalTime = $profiler->getTotalElapsedSecs(); $queryCount = $profiler->getTotalNumQueries(); $longestTime = 0; $longestQuery = null; if ($queryCount) { foreach ($profiler->getQueryProfiles() as $query) { if ($query->getElapsedSecs() > $longestTime) { $longestTime = $query->getElapsedSecs(); $this->out($query->getQuery(), "yellow", null, false); $this->outTime($query->getElapsedSecs()); } } } } } if ($this->profiling && !$fromglobalfunction) { $this->outTime(Varien_Profiler::fetch('test'), "Duration: "); } } } }