Changeset 623 in svn for branches/1.3


Ignore:
Timestamp:
2009-07-05T10:41:16+02:00 (6 years ago)
Author:
Xuefer
Message:

merged r514-r539 from trunk

Location:
branches/1.3
Files:
30 edited

Legend:

Unmodified
Added
Removed
  • branches/1.3

  • branches/1.3/Decompiler.class.php

    r394 r623  
    2929    if (is_array($src)) {
    3030        die_error('array str');
    31         $src = new Decompiler_Array($src);
    32         return $src->__toString($indent);
     31        $src = new Decompiler_Array($src, false, $indent);
     32        return $src->__toString();
    3333    }
    3434
     
    165165    }
    166166
    167     function __toString($indent)
    168     {
    169         return $this->obj->__toString($indent);
     167    function __toString()
     168    {
     169        return $this->obj->__toString();
    170170    }
    171171}
     
    258258{
    259259    var $needExport = false;
    260 
    261     function Decompiler_Array($value = array(), $needexport = false)
     260    var $indent = '';
     261
     262    function Decompiler_Array($value = array(), $needexport = false, $indent = '')
    262263    {
    263264        $this->value = $value;
    264265        $this->needExport = $needexport;
    265     }
    266 
    267     function __toString($indent)
     266        $this->indent = $indent;
     267    }
     268
     269    function __toString()
    268270    {
    269271        $exp = "array(";
    270         $indent .= INDENT;
     272        $indent = $this->indent . INDENT;
    271273        $assoclen = 0;
    272274        $multiline = 0;
     
    335337    var $iskey;
    336338
    337     function __toString($indent)
     339    function __toString()
    338340    {
    339341        return 'foreach (' . '';
  • branches/1.3/admin/common-zh-simplified-utf-8.lang.php

    r604 r623  
    2424        'Compiling'
    2525        => '编译中',
    26         '%'
    27         => '%',
     26        '% Free'
     27        => '% 剩余',
     28        '% Used'
     29        => '% 已用',
    2830        'Hits'
    2931        => '命中',
     32        'Hits 24H'
     33        => '24H 分布',
     34        'Hits/H'
     35        => '命中/H',
     36        'Hits/S'
     37        => '命中/S',
    3038        'Misses'
    3139        => '错过',
     
    6977        'GC'
    7078        => 'GC',
     79        'Legends:'
     80        => '图例:',
     81        'Used Blocks'
     82        => '已用块',
     83        'Free Blocks'
     84        => '未用块',
     85        'Total'
     86        => '总共',
    7187        'Cache'
    7288        => '缓冲区',
  • branches/1.3/admin/common-zh-traditional-utf-8.lang.php

    r604 r623  
    2424        'Compiling'
    2525        => '編譯中',
    26         '%'
    27         => '%',
     26        '% Free'
     27        => '% 剩余',
     28        '% Used'
     29        => '% 已用',
    2830        'Hits'
    2931        => '命中',
     32        'Hits 24H'
     33        => '24H 分布',
     34        'Hits/H'
     35        => '命中/H',
     36        'Hits/S'
     37        => '命中/S',
    3038        'Misses'
    3139        => '錯過',
     
    6977        'GC'
    7078        => 'GC',
     79        'Legends:'
     80        => '图例:',
     81        'Used Blocks'
     82        => '已用块',
     83        'Free Blocks'
     84        => '未用块',
     85        'Total'
     86        => '总共',
    7187        'Cache'
    7288        => '快取',
  • branches/1.3/admin/common.php

    r607 r623  
    109109    $lang = 'en-us';
    110110}
     111if (!isset($usage_graph_width) && !isset($free_graph_width)) {
     112    $usage_graph_width = 120;
     113}
     114$graph_width = isset($free_graph_width) ? $free_graph_width : $usage_graph_width;
    111115
    112116?>
  • branches/1.3/admin/config.php.example

    r604 r623  
    1212$show_todo_strings = false;
    1313
     14// width of graph for free or usage blocks
     15$usage_graph_width = 120;
     16// do not define both with
     17// $free_graph_width = 120;
     18
    1419// this function is detected by xcache.tpl.php, and enabled if function_exists
    1520// this ob filter is applied for the cache list, not the whole page
     
    1722{
    1823    $sep = DIRECTORY_SEPARATOR;
    19     $o = str_replace($_SERVER['DOCUMENT_ROOT'],  "{DOCROOT}$sep", $o);
     24    $o = str_replace($_SERVER['DOCUMENT_ROOT'],  "{DOCROOT}" . (substr($d, -1) == $sep ? $sep : ""), $o);
    2025    $xcachedir = realpath(dirname(__FILE__) . "$sep..$sep");
    2126    $o = str_replace($xcachedir . $sep, "{XCache}$sep", $o);
  • branches/1.3/admin/header.tpl.php

    r604 r623  
    1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    22<html xmlns="http://www.w3.org/1999/xhtml">
    33<head>
  • branches/1.3/admin/help-en.lang.php

    r604 r623  
    44<dt><?php echo _T('Size'); ?>: </dt><dd>Cache Size, Size of the cache (or cache chunk), in bytes</dd>
    55<dt><?php echo _T('Avail'); ?>: </dt><dd>Available Memory, free memory in bytes of this cache</dd>
    6 <dt><?php echo _T('%'); ?>: </dt><dd>Percent, A bar shows how much memory available in percent</dd>
     6<dt><?php echo _T('% Used'); ?>: </dt><dd>Percent, A bar shows how much memory available in percent, and memory blocks status</dd>
    77<dt><?php echo _T('Clear'); ?>: </dt><dd>Clear Button, Press the button to clean this cache</dd>
    88<dt><?php echo _T('Compiling'); ?>: </dt><dd>Compiling flag, "yes" if the cache is busy compiling php script</dd>
    99<dt><?php echo _T('Hits'); ?>: </dt><dd>Cache Hits, hit=a var/php is loaded from this cache</dd>
     10<dt><?php echo _T('Hits/H'); ?>: </dt><dd>Average Hits per Hour. Only last 24 hours is logged</dd>
     11<dt><?php echo _T('Hits 24H'); ?>: </dt><dd>Hits 24 Hours. Hits graph of last 24 hours</dd>
     12<dt><?php echo _T('Hits/S'); ?>: </dt><dd>Average Hits per Second. Only last 5 seconds is logged</dd>
    1013<dt><?php echo _T('Misses'); ?>: </dt><dd>Cache Misses, miss=a var/php is requested but not in the cache</dd>
    1114<dt><?php echo _T('Clogs'); ?>: </dt><dd>Compiling Clogs, clog=compiling is needed but avoided to wait(be blocked) when the cache is busy compiling already</dd>
  • branches/1.3/admin/help-zh-simplified-utf-8.lang.php

    r604 r623  
    44<dt><?php echo _T('Size'); ?>: </dt><dd>共享内存区大小, 单位: 字节</dd>
    55<dt><?php echo _T('Avail'); ?>: </dt><dd>可用内存, 对应共享内存区的剩余内存字节数</dd>
    6 <dt><?php echo _T('%'); ?>: </dt><dd>百分比, 条状显示可用内存的比例</dd>
     6<dt><?php echo _T('% Used'); ?>: </dt><dd>百分比, 条状显示可用内存的比例, 以及显示分配块状态</dd>
    77<dt><?php echo _T('Clear'); ?>: </dt><dd>清除按钮, 点击按钮清除对应共享内存区的数据</dd>
    88<dt><?php echo _T('Compiling'); ?>: </dt><dd>编译标记, 当共享内存区正在编译 php 脚本时标记为 "yes"</dd>
    99<dt><?php echo _T('Hits'); ?>: </dt><dd>共享内存命中次数, 命中=从该共享内存载入php或者变量</dd>
     10<dt><?php echo _T('Hits/H'); ?>: </dt><dd>每小时命中次数. 只统计最后 24 小时</dd>
     11<dt><?php echo _T('Hits 24H'); ?>: </dt><dd>24 小时命中分布图. 图表现是最后 24 小时的命中次数</dd>
     12<dt><?php echo _T('Hits/S'); ?>: </dt><dd>每秒命中次数. 只统计最后 5 秒</dd>
    1013<dt><?php echo _T('Misses'); ?>: </dt><dd>共享内存错过次数, 错过=请求的php或者变量并不在该共享内存内</dd>
    1114<dt><?php echo _T('Clogs'); ?>: </dt><dd>编译阻塞跳过, 阻塞=当需该共享内存区负责编译时, 其他进程/现成无法访问此共享内存. 跳过=XCache 自动判断阻塞的共享内存区自动跳过阻塞等待, 直接使用非共享内存方式继续处理请求</dd>
  • branches/1.3/admin/help-zh-traditional-utf-8.lang.php

    r604 r623  
    44<dt><?php echo _T('Size'); ?>: </dt><dd>共享記憶體區大小,單位:位元</dd>
    55<dt><?php echo _T('Avail'); ?>: </dt><dd>可用記憶體,對應共享記憶體區的剩餘記憶體位元數</dd>
    6 <dt><?php echo _T('%'); ?>: </dt><dd>百分比,條狀顯示可用記憶體的比例</dd>
     6<dt><?php echo _T('% Used'); ?>: </dt><dd>百分比,條狀顯示可用記憶體的比例</dd>
    77<dt><?php echo _T('Clear'); ?>: </dt><dd>清除按鈕,點擊按鈕清除對應共享記憶體區的資料</dd>
    88<dt><?php echo _T('Compiling'); ?>: </dt><dd>編譯標記,當共享記憶體區正在編譯 php 指令時標記為 "yes"</dd>
  • branches/1.3/admin/xcache.css

    r604 r623  
    11input, table { font-family: sans-serif; }
    22input { font-size: 12px; }
    3 table { border-collapse: collapse; font-size: 11px; }
     3table { border-collapse: collapse; font-size: 11px; margin: 0; margin-bottom: 10px; }
     4table caption, h2 { font-size: 16px; font-weight: bold; text-align: left; padding-top: 20px; margin-bottom: 2px; }
     5table { white-space: pre; }
    46table.cycles { border: 1px solid black; margin-top: 5px; margin-bottom: 5px; }
    57table.cycles .col1 { background-color: #f5f5f5; }
     
    1719.button { }
    1820span.sortarrow { color: white; text-decoration: none; }
    19 .freeblocks { float: left; margin-right: 4px;}
    20 .freeblocks td { text-align: right; }
    2121form {margin: 0; padding: 0}
    22 .percent { border: 1px solid black; width: 80%; height: 20px; }
    23 .percent div { font-size: 1px; line-height: 1px; width: 100%;}
    24 .percent .pavail { background: blue; }
    25 .switcher, h1, h2 { text-align: center; display: block; }
     22
     23.percent { height: 3px; margin-bottom: 1px; border: 1px solid gray; }
     24.percent div { float: left; height: 100%; }
     25.pvalue { background: limegreen; }
     26
     27.blocksgraph { height: 16px; }
     28.blocksgraph div { float: left; height: 3px; width: 4px; border: solid gray; border-width: 0 0px 1px 0; }
     29.blocksgraph { border: 1px solid gray; border-bottom: 0px; }
     30
     31.hitsgraph { height: 20px; margin: auto; }
     32.hitsgraph div { float: left; width: 2px; height: 100%; }
     33.hitsgraph div:hover { background: gray; }
     34.hitsgraph div div { float: none; width: 100%; }
     35.hitsgraph div div.barf { border: 0px solid gray; border-width: 1px 0 0 0; }
     36.hitsgraph div div.barv { border: 0px solid gray; border-width: 0 0 1px 0; }
     37.hitsgraph div div.barf.active { border-color: yellow; }
     38.hitsgraph div div.barv.active { border-color: yellow; }
     39
     40.switcher, h1 { text-align: center; display: block; }
    2641.switcher * { color: blue; }
    2742.switcher a.active { font-weight: bold; font-size: 130%; color: black; }
     
    3146dt { font-weight: bold; clear: both; float: left; width: 100px; text-align: right; margin: 0; }
    3247dd { margin: 0; }
     48.blockarea { overflow: hidden; _width: 1px; }
     49div.legend { float: left; border: 1px solid gray; font: 12px/12px monospace; }
     50div.legendtitle { float: left; padding: 2px; padding-right: 10px; font: 12px/12px monospace; }
  • branches/1.3/admin/xcache.php

    r604 r623  
    7373
    7474    return '0 s';
     75}
     76
     77function freeblock_to_graph($freeblocks, $size)
     78{
     79    global $graph_width, $usage_graph_width, $free_graph_width;
     80
     81    // cached in static variable
     82    static $graph_initial;
     83    if (!isset($graph_initial)) {
     84        $graph_initial = array_fill(0, $graph_width, 0);
     85    }
     86    $graph = $graph_initial;
     87    foreach ($freeblocks as $b) {
     88        $begin = $b['offset'] / $size * $graph_width;
     89        $end = ($b['offset'] + $b['size']) / $size * $graph_width;
     90
     91        if ((int) $begin == (int) $end) {
     92            $v = $end - $begin;
     93            $graph[(int) $v] += $v - (int) $v;
     94        }
     95        else {
     96            $graph[(int) $begin] += 1 - ($begin - (int) $begin);
     97            $graph[(int) $end] += $end - (int) $end;
     98            for ($i = (int) $begin + 1, $e = (int) $end; $i < $e; $i ++) {
     99                $graph[$i] += 1;
     100            }
     101        }
     102    }
     103    $html = array();
     104    $c = 255;
     105    foreach ($graph as $k => $v) {
     106        if (!isset($free_graph_width)) {
     107            $v = 1 - $v;
     108        }
     109        $v = (int) ($v * $c);
     110        $r = $g = $c - $v;
     111        $b = $c;
     112        $html[] = '<div style="background: rgb(' . "$r,$g,$b" . ')"></div>';
     113    }
     114    return implode('', $html);
     115}
     116
     117function calc_total(&$total, $data)
     118{
     119    foreach ($data as $k => $v) {
     120        switch ($k) {
     121        case 'type':
     122        case 'cache_name':
     123        case 'cacheid':
     124        case 'free_blocks':
     125            continue 2;
     126        }
     127        if (!isset($total[$k])) {
     128            $total[$k] = $v;
     129        }
     130        else {
     131            switch ($k) {
     132            case 'his_by_hour':
     133            case 'his_by_second':
     134                foreach ($data[$k] as $kk => $vv) {
     135                    $total[$k][$kk] += $vv;
     136                }
     137                break;
     138
     139            default:
     140                $total[$k] += $v;
     141            }
     142        }
     143    }
     144}
     145
     146function array_avg($a)
     147{
     148    if (count($a) == 0) {
     149        return '';
     150    }
     151    return array_sum($a) / count($a);
     152}
     153
     154function bar_hits_percent($v, $percent, $active)
     155{
     156    $r = 220 + (int) ($percent * 25);
     157    $g = $b = 220 - (int) ($percent * 220);
     158    $percent = (int) ($percent * 100);
     159    $a = $active ? ' active' : '';
     160    return '<div title="' . $v . '">'
     161        . '<div class="barf' . $a . '" style="height: ' . (100 - $percent) . '%"></div>'
     162        . '<div class="barv' . $a . '" style="background: rgb(' . "$r,$g,$b" . '); height: ' . $percent . '%"></div>'
     163        . '</div>';
     164}
     165
     166function hits_to_graph($hits)
     167{
     168    $max = 0;
     169    foreach ($hits as $v) {
     170        if ($max < $v) {
     171            $max = $v;
     172        }
     173    }
     174    if (!$max) {
     175        return '';
     176    }
     177    $t = (time() / (60 * 60)) % 24;
     178    $html = array();
     179    foreach ($hits as $i => $v) {
     180        $html[] = bar_hits_percent($v, $v / $max, $i == $t);
     181    }
     182    return implode('', $html);
    75183}
    76184
     
    130238        $cacheid = (int) (isset($_POST['cacheid']) ? $_POST['cacheid'] : 0);
    131239        if (isset($_POST['clearcache'])) {
    132             xcache_clear_cache($type, $cacheid);
     240            $count = xcache_count($type);
     241            if ($cacheid == $count) {
     242                for ($cacheid = 0; $cacheid < $count; $cacheid ++) {
     243                    xcache_clear_cache($type, $cacheid);
     244                }
     245            }
     246            else {
     247                xcache_clear_cache($type, $cacheid);
     248            }
    133249        }
    134250    }
     
    138254// {{{ load info/list
    139255$cacheinfos = array();
     256$total = array();
    140257for ($i = 0; $i < $pcnt; $i ++) {
    141258    $data = xcache_info(XC_TYPE_PHP, $i);
     
    147264    $data['cacheid'] = $i;
    148265    $cacheinfos[] = $data;
    149 }
     266    if ($pcnt >= 2) {
     267        calc_total($total, $data);
     268    }
     269}
     270
     271if ($pcnt >= 2) {
     272    $total['type'] = XC_TYPE_PHP;
     273    $total['cache_name'] = _T('Total');
     274    $total['cacheid'] = $pcnt;
     275    $total['gc'] = null;
     276    $total['istotal'] = true;
     277    $cacheinfos[] = $total;
     278}
     279
     280$total = array();
    150281for ($i = 0; $i < $vcnt; $i ++) {
    151282    $data = xcache_info(XC_TYPE_VAR, $i);
     
    157288    $data['cacheid'] = $i;
    158289    $cacheinfos[] = $data;
     290    if ($pcnt >= 2) {
     291        calc_total($total, $data);
     292    }
     293}
     294
     295if ($vcnt >= 2) {
     296    $total['type'] = XC_TYPE_VAR;
     297    $total['cache_name'] = _T('Total');
     298    $total['cacheid'] = $vcnt;
     299    $total['gc'] = null;
     300    $total['istotal'] = true;
     301    $cacheinfos[] = $total;
    159302}
    160303// }}}
     
    171314    }
    172315    foreach ($cacheinfos as $i => $c) {
     316        if (!empty($c['istotal'])) {
     317            continue;
     318        }
    173319        if ($c['type'] == $type && isset($c['cache_list'])) {
    174320            foreach ($c['cache_list'] as $e) {
  • branches/1.3/admin/xcache.tpl.php

    r604 r623  
    11<?php include("header.tpl.php"); ?>
    2 <a href="help.php" target="_blank" id="help"><?php echo _T("Help") ?> &raquo;</a>
    3 <span class="switcher"><?php echo switcher("type", $types); ?></span>
     2<div id="help">
     3    <a href="help.php"><?php echo _T("Help") ?> &raquo;</a>
     4</div>
     5<div class="switcher"><?php echo switcher("type", $types); ?></div>
    46<?php
    57$a = new Cycle('class="col1"', 'class="col2"');
    68$b = new Cycle('class="col1"', 'class="col2"');
    79?>
    8 <?php echo _T('Caches'); ?>:
    910<table cellspacing="0" cellpadding="4" class="cycles">
    10     <col />
    11     <col align="right" />
    12     <col align="right" />
    13     <col align="right" />
    14     <col />
    15     <col />
    16     <col align="right" />
     11    <caption><?php echo _T('Caches'); ?></caption>
     12    <col />
     13    <col align="right" />
     14    <col align="right" />
     15    <col align="right" />
     16    <col />
     17    <col />
     18    <col align="right" />
     19    <col align="right" />
     20    <col align="right" />
     21    <col />
    1722    <col align="right" />
    1823    <col align="right" />
     
    2833        <th><?php echo _T('Size'); ?></th>
    2934        <th><?php echo _T('Avail'); ?></th>
    30         <th><?php echo _T('%'); ?></th>
     35        <th><?php echo _T(isset($free_graph_width) ? '% Free' : '% Used'); ?></th>
    3136        <th><?php echo _T('Clear'); ?></th>
    3237        <th><?php echo _T('Compiling'); ?></th>
    3338        <th><?php echo _T('Hits'); ?></th>
     39        <th><?php echo _T('Hits/H'); ?></th>
     40        <th><?php echo _T('Hits 24H'); ?></th>
     41        <th><?php echo _T('Hits/S'); ?></th>
    3442        <th><?php echo _T('Misses'); ?></th>
    3543        <th><?php echo _T('Clogs'); ?></th>
     
    4856        echo "
    4957        <tr ", $a->next(), ">";
    50         $pavail = (int) ($ci['avail'] / $ci['size'] * 100);
    51         $pused = 100 - $pavail;
     58        $pvalue = (int) ($ci['avail'] / $ci['size'] * 100);
     59        $pempty = 100 - $pvalue;
     60        if (!isset($free_graph_width)) {
     61            // swap
     62            $tmp = $pvalue;
     63            $pvalue = $pempty;
     64            $pempty = $tmp;
     65        }
     66
     67        $w = $graph_width;
     68        if (empty($ci['istotal'])) {
     69            $graph = freeblock_to_graph($ci['free_blocks'], $ci['size']);
     70            $blocksgraph = "<div class=\"blocksgraph\" style=\"width: {$w}px\">{$graph}</div>";
     71        }
     72        else {
     73            $blocksgraph = '';
     74        }
    5275
    5376        $ci_slots = size($ci['slots']);
     
    5578        $ci_avail = size($ci['avail']);
    5679        $ci = number_formats($ci, $numkeys);
    57         $ci['compiling']    = $ci['type'] == $type_php ? ($ci['compiling'] ? 'yes' : 'no') : '-';
    58         $ci['can_readonly'] = $ci['can_readonly'] ? 'yes' : 'no';
     80
     81        $hits_avg_h     = number_format(array_avg($ci['hits_by_hour']), 2);
     82        $hits_avg_s     = number_format(array_avg($ci['hits_by_second']), 2);
     83        $hits_graph_h   = hits_to_graph($ci['hits_by_hour']);
     84        $hits_graph_h_w = count($ci['hits_by_hour']) * 2;
     85
     86        if (!empty($ci['istotal'])) {
     87            $ci['compiling']    = '-';
     88            $ci['can_readonly'] = '-';
     89        }
     90        else {
     91            $ci['compiling']    = $ci['type'] == $type_php ? ($ci['compiling'] ? 'yes' : 'no') : '-';
     92            $ci['can_readonly'] = $ci['can_readonly'] ? 'yes' : 'no';
     93        }
    5994        echo <<<EOS
    6095        <th>{$ci['cache_name']}</th>
     
    6297        <td title="{$ci['size']}">{$ci_size}</td>
    6398        <td title="{$ci['avail']}">{$ci_avail}</td>
    64         <td title="{$pavail} %"><div class="percent"><div style="height: {$pused}%" class="pused">&nbsp;</div><div style="height: {$pavail}%" class="pavail">&nbsp;</div></div></td>
    65         <td>
    66             <form method="post">
    67                 <div>
    68                     <input type="hidden" name="type" value="{$ci['type']}">
    69                     <input type="hidden" name="cacheid" value="{$ci['cacheid']}">
    70                     <input type="submit" name="clearcache" value="{$l_clear}" class="submit" onclick="return confirm('{$l_clear_confirm}');" />
    71                 </div>
    72             </form>
    73         </td>
     99        <td title="{$pvalue} %"
     100            ><div class="percent" style="width: {$w}px"
     101                ><div style="width: {$pvalue}%" class="pvalue"></div
     102                ><div style="width: {$pempty}%" class="pempty"></div
     103            ></div
     104        >{$blocksgraph}</td>
     105        <td
     106            ><form method="post" action=""
     107                ><div
     108                    ><input type="hidden" name="type" value="{$ci['type']}"
     109                    /><input type="hidden" name="cacheid" value="{$ci['cacheid']}"
     110                    /><input type="submit" name="clearcache" value="{$l_clear}" class="submit" onclick="return confirm('{$l_clear_confirm}');"
     111                /></div
     112            ></form
     113        ></td>
    74114        <td>{$ci['compiling']}</td>
    75115        <td>{$ci['hits']}</td>
     116        <td>{$hits_avg_h}</td>
     117        <td><div class="hitsgraph" style="width: {$hits_graph_h_w}px">{$hits_graph_h}</div></td>
     118        <td>{$hits_avg_s}</td>
    76119        <td>{$ci['misses']}</td>
    77120        <td>{$ci['clogs']}</td>
     
    89132    <?php } ?>
    90133</table>
    91 <div>
    92     <?php echo _T('Free Blocks'); ?>:
     134<div class="blockarea legends">
     135    <div class="legendtitle"><?php echo _T('Legends:'); ?></div>
     136    <div class="legend pvalue">&nbsp;&nbsp;</div>
     137    <div class="legendtitle"><?php echo _T(isset($free_graph_width) ? '% Free' : '% Used'); ?></div>
     138    <div class="legend" style="background: rgb(0,0,255)">&nbsp;&nbsp;</div>
     139    <div class="legendtitle"><?php echo _T(isset($free_graph_width) ? 'Free Blocks' : 'Used Blocks'); ?></div>
     140    <div class="legend" style="background: rgb(255,0,0)">&nbsp;&nbsp;</div>
     141    <div class="legendtitle"><?php echo _T('Hits'); ?></div>
    93142</div>
    94 <?php
    95 foreach ($cacheinfos as $i => $ci) {
    96     $b->reset();
    97 ?>
    98 <table cellspacing="0" cellpadding="4" class="cycles freeblocks">
    99     <tr>
    100         <th><?php echo $ci['cache_name']; ?> <?php echo _T("size"); ?><br><?php echo _T("offset"); ?></th>
    101     <?php
    102     foreach ($ci['free_blocks'] as $block) {
    103         $size   = size($block['size']);
    104         $offset = size($block['offset']);
    105 
    106         $c = $b->next();
    107         echo "
    108         <td $c><nobr>$size<br>$offset</nobr></td>";
    109     }
    110     ?>
    111 
    112     </tr>
    113 </table>
    114 <?php
    115 }
    116 ?>
    117 <div style="clear: both">&nbsp;</div>
    118143<?php
    119144
     
    125150    foreach (array('Cached' => $cachelist['cache_list'], 'Deleted' => $cachelist['deleted_list']) as $listname => $entries) {
    126151        $a->reset();
    127         echo "
    128         <caption>", _T("{$cachelist['type_name']} $listname"), "</caption>";
    129152        ?>
    130153
    131154    <form action="" method="post">
    132     <table cellspacing="0" cellpadding="4" class="cycles entrys" width="100%">
     155    <table cellspacing="0" cellpadding="4" class="cycles entries" width="100%">
     156        <caption><?php echo _T("{$cachelist['type_name']} $listname"); ?></caption>
    133157        <col />
    134158        <col />
  • branches/1.3/coverager.c

    r617 r623  
    470470
    471471    if (cfg_get_string("xcache.coveragedump_directory", &xc_coveragedump_dir) == SUCCESS && xc_coveragedump_dir) {
     472        xc_coveragedump_dir = pestrdup(xc_coveragedump_dir, 1);
    472473        int len = strlen(xc_coveragedump_dir);
    473474        if (len) {
     
    477478        }
    478479        if (!strlen(xc_coveragedump_dir)) {
     480            pefree(xc_coveragedump_dir, 1);
    479481            xc_coveragedump_dir = NULL;
    480482        }
     
    490492    }
    491493    if (xc_coveragedump_dir) {
     494        pefree(xc_coveragedump_dir, 1);
    492495        xc_coveragedump_dir = NULL;
    493496    }
  • branches/1.3/coverager/config.php.example

    r604 r623  
    2222{
    2323    $sep = DIRECTORY_SEPARATOR;
    24     $o = str_replace($_SERVER['DOCUMENT_ROOT'],  "{DOCROOT}$sep", $o);
     24    $o = str_replace($_SERVER['DOCUMENT_ROOT'],  "{DOCROOT}" . (substr($d, -1) == $sep ? $sep : ""), $o);
    2525    $xcachedir = realpath(dirname(__FILE__) . "$sep..$sep");
    2626    $o = str_replace($xcachedir . $sep, "{XCache}$sep", $o);
  • branches/1.3/coverager/coverager.css

    r615 r623  
    33th { font-size: 12px; }
    44table { border-collapse: collapse; }
     5table.center { margin-left: auto; margin-right: auto; }
     6table\-center { text-align: center; }
    57table.cycles { border: 1px solid black; margin-top: 5px; margin-bottom: 5px; }
    68table.cycles .col1 { background-color: #f5f5f5; }
     
    5557.lineCov   { background-color: #F0F0F0; }
    5658.lineNoCov { background-color: #ffe0e0; }
     59div.code {
     60    border: 1px solid gray;
     61    font-size: 12px;
     62}
    5763pre.code {
    5864    font-family: monospace;
    5965    font-size: 12px;
    6066    white-space: pre;
    61     border: 1px solid gray;
     67    padding: 0; margin: 0;
    6268}
    6369
  • branches/1.3/coverager/coverager.php

    r615 r623  
    114114                $lines = explode('<br />', $lines);
    115115                $last = array_pop($lines);
     116                $lines[count($lines) - 1] .= $last;
    116117                $filecov = sprint_cov($fileinfo['cov'], $lines, false);
    117                 $filecov .= $last;
    118118                unset($source);
    119119            }
     
    325325        }
    326326        if (isset($cov[$offs])) {
    327             $lines[$l] = sprintf("<li class=\"line%sCov\"> %s\t%s\n</li>"
     327            $lines[$l] = sprintf("<li class=\"line%sCov\"><pre class=\"code\"> %s\t%s\n</pre></li>"
    328328                    , $cov[$offs] ? '' : 'No'
    329329                    , $cov[$offs]
     
    331331        }
    332332        else {
    333             $lines[$l] = "<li>\t$line\n</li>";
     333            $lines[$l] = "<li><pre class=\"code\">\t$line\n</pre></li>";
    334334        }
    335335    }
  • branches/1.3/coverager/coverager.tpl.php

    r600 r623  
    1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    22<html xmlns="http://www.w3.org/1999/xhtml">
    33<head>
     
    5656    $l_tds = _T("TODO");
    5757    return <<<EOS
    58     <table align="center" cellpadding="2" cellspacing="0" border="0" class="cycles">
     58<div class="table-center">
     59    <table cellpadding="2" cellspacing="0" border="0" class="cycles center">
    5960    <tr>
    6061        <th>{$l_dir}</th><th>{$l_per}</th><th>{$l_hit}</th><th>{$l_lns}</th><th>{$l_tds}</th>
     
    105106    return <<<EOS
    106107    </table>
     108</div>
    107109EOS;
    108110}
     
    117119    $l_lns = _T("Lines");
    118120    return <<<EOS
    119     <br>
    120     <table align="center" cellpadding="2" cellspacing="0" border="0" class="cycles">
     121<div class="center-table">
     122    <table cellpadding="2" cellspacing="0" border="0" class="cycles center">
    121123    <tr>
    122124        <th>{$l_fil}</th><th>{$l_per}</th><th>{$l_hit}</th><th>{$l_lns}</th>
     
    162164    return <<<EOS
    163165    </table>
     166</div>
    164167EOS;
    165168}
     
    172175    $path_html = htmlspecialchars($path);
    173176    echo <<<EOS
    174     <a href="?">$l_root</a> $path<br />
     177    <div>
     178        <a href="?">$l_root</a> $path<br />
     179    </div>
    175180EOS;
    176181    echo dir_head($dirinfo);
     
    199204    $dir_html = htmlspecialchars($dir);
    200205    echo <<<EOS
    201     <a href="?">$l_root</a> <a href="?path={$dir_url}">{$dir_html}</a>/<strong>{$filename}</strong><br />
     206    <div>
     207        <a href="?">$l_root</a> <a href="?path={$dir_url}">{$dir_html}</a>/<strong>{$filename}</strong><br />
     208    </div>
    202209EOS;
    203210
     
    209216        $tplfile_html = htmlspecialchars($tplfile);
    210217        echo <<<EOS
    211         <a href="#tpl">{$tplfile_html}</a><br />
     218        <div>
     219            <a href="#tpl">{$tplfile_html}</a><br />
     220        </div>
    212221EOS;
    213222    }
     
    216225    }
    217226    echo <<<EOS
    218     <pre class="code"><ol>{$filecov}</ol></pre>
     227    <div class="code">
     228        <ol>{$filecov}</ol>
     229    </div>
    219230EOS;
    220231    if ($tplfile) {
    221232        echo <<<EOS
    222233    <a name="tpl">{$tplfile}</a>
    223     <pre class="code"><ol>{$tplcov}</ol></pre>
     234    <div class="code">
     235        <ol>{$tplcov}</ol>
     236    </div>
    224237EOS;
    225238    }
  • branches/1.3/mkopcode_spec.awk

    r394 r623  
    1515            exit
    1616        }
    17         printf "\tOPSPEC(%10s, %10s, %10s, %10s)\n", array[1], array[2], array[3], array[4]
     17        comment = "";
     18        if (match($0, /\/\* (\d+) \*\//, comments)) {
     19            comment = comments[1];
     20        }
     21        printf "\tOPSPEC(%10s, %10s, %10s, %10s)%s\n", array[1], array[2], array[3], array[4], comment;
    1822        next
    1923    }
  • branches/1.3/phpdc.phpr

    r604 r623  
    1313}
    1414
    15 $dc = &new Decompiler();
     15$dc = new Decompiler();
    1616if (isset($argv[1])) {
    1717    $dc->decompileFile($argv[1]);
  • branches/1.3/processor/hashtable.m4

    r622 r623  
    123123                fprintf(stderr, "$2:\"");
    124124                xc_dprint_str_len(BUCKET_KEY_S(b), BUCKET_KEY_SIZE(b));
    125                 fprintf(stderr, "\" %d:h=%lu", BUCKET_KEY_SIZE(b), b->h);
     125                fprintf(stderr, "\" %d:h=%lu ", BUCKET_KEY_SIZE(b), b->h);
    126126            ')
    127127            if (sizeof(void *) == sizeof($2)) {
  • branches/1.3/processor/processor.m4

    r622 r623  
    211211                dnl fprintf(stderr, "copy from %p to %p\n", src[0], dst[0]);
    212212            ')
    213             IFDPRINT(`INDENT()`'fprintf(stderr, "[%p]", src[0]);')
     213            IFDPRINT(`INDENT()`'fprintf(stderr, "[%p] ", src[0]);')
    214214            STRUCT_P_EX(zval, dst[0], src[0], `[0]', `', ` ')
    215215            FIXPOINTER_EX(zval, dst[0])
     
    475475    IFCOPY(`
    476476        switch (src->opcode) {
     477#ifdef ZEND_GOTO
     478            case ZEND_GOTO:
     479#endif
    477480            case ZEND_JMP:
    478481                dst->op1.u.jmp_addr = processor->active_opcodes_dst + (src->op1.u.jmp_addr - processor->active_opcodes_src);
  • branches/1.3/processor/struct.m4

    r394 r623  
    6060
    6161        IFDPRINT(`
    62             fprintf(stderr, "%s", " {\n");
     62            fprintf(stderr, "%s", "{\n");
    6363            indent ++;
    6464        ')
     
    146146    DBG(`$0($*)')
    147147    if (src->$2) {
    148         IFDPRINT(`INDENT()`'fprintf(stderr, "$1:$2");')
     148        IFDPRINT(`INDENT()`'fprintf(stderr, "$1:$2 ");')
    149149        STRUCT_P_EX(`$1', `dst->$2', `src->$2', `$2', `$3')
    150150    }
     
    160160    DBG(`$0($*)')
    161161    assert(sizeof($1) == sizeof(src->$2));
    162     IFDPRINT(`INDENT()`'fprintf(stderr, "$1:$2");')
     162    IFDPRINT(`INDENT()`'fprintf(stderr, "$1:$2 ");')
    163163    STRUCT_P_EX(`$1', `dst->$2', `src->$2', `$2', `$3', `&')
    164164    DONE(`$2')
  • branches/1.3/run-xcachetest

    r604 r623  
    1919if test -z "$TEST_PHP_USER" ; then
    2020    TEST_PHP_USER="$PHP_SRC/tests"
    21     for i in Zend ZendEngine2 ext/standard/tests ext/reflection/tests ; do
     21    for i in Zend ZendEngine2 ext/standard/tests ext/reflection/tests ext/spl/tests; do
    2222        if test -d "$PHP_SRC/$i" ; then
    2323            TEST_PHP_USER="$TEST_PHP_USER,$PHP_SRC/$i"
  • branches/1.3/utils.c

    r622 r623  
    144144#ifdef ZEND_ENGINE_2_1
    145145        switch (opline->opcode) {
     146#ifdef ZEND_GOTO
     147            case ZEND_GOTO:
     148#endif
    146149            case ZEND_JMP:
    147150                opline->op1.u.opline_num = opline->op1.u.jmp_addr - op_array->opcodes;
     
    194197#ifdef ZEND_ENGINE_2_1
    195198        switch (opline->opcode) {
     199#ifdef ZEND_GOTO
     200            case ZEND_GOTO:
     201#endif
    196202            case ZEND_JMP:
    197203                assert(opline->op1.u.opline_num < op_array->last);
     
    294300    while (opline < end) {
    295301        switch (opline->opcode) {
     302#ifdef ZEND_GOTO
     303            case ZEND_GOTO:
     304#endif
    296305            case ZEND_JMP:
    297306                next = begin + opline->op1.u.opline_num;
  • branches/1.3/utils.h

    r622 r623  
    8080typedef struct {
    8181    int alloc;
    82     int orig_user_error_handler_error_reporting;
    8382    char *filename;
    8483
     
    9897    Bucket    *tmp_internal_function_tail;
    9998    Bucket    *tmp_internal_class_tail;
     99
     100#ifdef E_STRICT
     101    int orig_user_error_handler_error_reporting;
     102#endif
    100103} xc_sandbox_t;
    101104
  • branches/1.3/xcache-test.ini

    r622 r623  
    1 auto_globals_jit = Off
    21memory_limit = 256M
    32
  • branches/1.3/xcache.c

    r622 r623  
    8787
    8888static zend_bool xc_initized = 0;
     89static time_t xc_init_time = 0;
     90static long unsigned xc_init_instance_id = 0;
     91#ifdef ZTS
     92static long unsigned xc_init_instance_subid = 0;
     93#endif
    8994static zend_compile_file_t *origin_compile_file = NULL;
    9095static zend_compile_file_t *old_compile_file = NULL;
     
    247252/* }}} */
    248253#endif
     254static inline zend_uint advance_wrapped(zend_uint val, zend_uint count) /* {{{ */
     255{
     256    if (val + 1 >= count) {
     257        return 0;
     258    }
     259    return val + 1;
     260}
     261/* }}} */
     262static void xc_counters_inc(time_t *curtime, zend_uint *curslot, time_t period, zend_ulong *counters, zend_uint count TSRMLS_DC) /* {{{ */
     263{
     264    time_t n = XG(request_time) / period;
     265    if (*curtime != n) {
     266        zend_uint target_slot = n % count;
     267        if (n - *curtime > period) {
     268            memset(counters, 0, sizeof(counters[0]) * count);
     269        }
     270        else {
     271            zend_uint slot;
     272            for (slot = advance_wrapped(*curslot, count);
     273                    slot != target_slot;
     274                    slot = advance_wrapped(slot, count)) {
     275                counters[slot] = 0;
     276            }
     277            counters[target_slot] = 0;
     278        }
     279        *curtime = n;
     280        *curslot = target_slot;
     281    }
     282    counters[*curslot] ++;
     283}
     284/* }}} */
     285static void xc_cache_hit_dmz(xc_cache_t *cache TSRMLS_DC) /* {{{ */
     286{
     287    cache->hits ++;
     288
     289    xc_counters_inc(&cache->hits_by_hour_cur_time
     290            , &cache->hits_by_hour_cur_slot, 60 * 60
     291            , cache->hits_by_hour
     292            , sizeof(cache->hits_by_hour) / sizeof(cache->hits_by_hour[0])
     293            TSRMLS_CC);
     294
     295    xc_counters_inc(&cache->hits_by_second_cur_time
     296            , &cache->hits_by_second_cur_slot
     297            , 1
     298            , cache->hits_by_second
     299            , sizeof(cache->hits_by_second) / sizeof(cache->hits_by_second[0])
     300            TSRMLS_CC);
     301}
     302/* }}} */
    249303
    250304/* helper function that loop through each entry */
     
    311365    int i, c;
    312366
    313     if (!xc_php_ttl || !xc_php_gc_interval) {
     367    if (!xc_php_ttl || !xc_php_gc_interval || !xc_php_caches) {
    314368        return;
    315369    }
     
    324378    int i, c;
    325379
    326     if (!xc_var_gc_interval) {
     380    if (!xc_var_gc_interval || !xc_var_caches) {
    327381        return;
    328382    }
     
    372426    int i, c;
    373427
    374     for (i = 0, c = xc_php_hcache.size; i < c; i ++) {
    375         xc_gc_deletes_one(xc_php_caches[i] TSRMLS_CC);
    376     }
    377 
    378     for (i = 0, c = xc_var_hcache.size; i < c; i ++) {
    379         xc_gc_deletes_one(xc_var_caches[i] TSRMLS_CC);
     428    if (xc_php_caches) {
     429        for (i = 0, c = xc_php_hcache.size; i < c; i ++) {
     430            xc_gc_deletes_one(xc_php_caches[i] TSRMLS_CC);
     431        }
     432    }
     433
     434    if (xc_var_caches) {
     435        for (i = 0, c = xc_var_hcache.size; i < c; i ++) {
     436            xc_gc_deletes_one(xc_var_caches[i] TSRMLS_CC);
     437        }
    380438    }
    381439}
     
    385443static void xc_fillinfo_dmz(int cachetype, xc_cache_t *cache, zval *return_value TSRMLS_DC) /* {{{ */
    386444{
    387     zval *blocks;
     445    zval *blocks, *hits;
     446    int i;
    388447    const xc_block_t *b;
    389448#ifndef NDEBUG
     
    417476        add_assoc_null_ex(return_value, ZEND_STRS("gc"));
    418477    }
     478    MAKE_STD_ZVAL(hits);
     479    array_init(hits);
     480    for (i = 0; i < sizeof(cache->hits_by_hour) / sizeof(cache->hits_by_hour[0]); i ++) {
     481        add_next_index_long(hits, (long) cache->hits_by_hour[i]);
     482    }
     483    add_assoc_zval_ex(return_value, ZEND_STRS("hits_by_hour"), hits);
     484
     485    MAKE_STD_ZVAL(hits);
     486    array_init(hits);
     487    for (i = 0; i < sizeof(cache->hits_by_second) / sizeof(cache->hits_by_second[0]); i ++) {
     488        add_next_index_long(hits, (long) cache->hits_by_second[i]);
     489    }
     490    add_assoc_zval_ex(return_value, ZEND_STRS("hits_by_second"), hits);
    419491
    420492    MAKE_STD_ZVAL(blocks);
     
    640712static void xc_entry_unholds(TSRMLS_D) /* {{{ */
    641713{
    642     xc_entry_unholds_real(XG(php_holds), xc_php_caches, xc_php_hcache.size TSRMLS_CC);
    643     xc_entry_unholds_real(XG(var_holds), xc_var_caches, xc_var_hcache.size TSRMLS_CC);
     714    if (xc_php_caches) {
     715        xc_entry_unholds_real(XG(php_holds), xc_php_caches, xc_php_hcache.size TSRMLS_CC);
     716    }
     717
     718    if (xc_var_caches) {
     719        xc_entry_unholds_real(XG(var_holds), xc_var_caches, xc_var_hcache.size TSRMLS_CC);
     720    }
    644721}
    645722/* }}} */
     
    914991            TRACE("found %s, catch it", stored_xce->name.str.val);
    915992            xc_entry_hold_php_dmz(stored_xce TSRMLS_CC);
    916             cache->hits ++;
     993            xc_cache_hit_dmz(cache);
    917994            break;
    918995        }
     
    12221299    xc_shm_t *shm;
    12231300    int i;
    1224     if (!xc_initized) {
    1225         return 0;
    1226     }
    1227     for (i = 0; i < xc_php_hcache.size; i ++) {
    1228         shm = xc_php_caches[i]->shm;
    1229         if (shm->handlers->is_readwrite(shm, p)) {
    1230             return 1;
    1231         }
    1232     }
    1233     for (i = 0; i < xc_var_hcache.size; i ++) {
    1234         shm = xc_var_caches[i]->shm;
    1235         if (shm->handlers->is_readwrite(shm, p)) {
    1236             return 1;
     1301
     1302    if (xc_php_caches) {
     1303        for (i = 0; i < xc_php_hcache.size; i ++) {
     1304            shm = xc_php_caches[i]->shm;
     1305            if (shm->handlers->is_readwrite(shm, p)) {
     1306                return 1;
     1307            }
     1308        }
     1309    }
     1310
     1311    if (xc_var_caches) {
     1312        for (i = 0; i < xc_var_hcache.size; i ++) {
     1313            shm = xc_var_caches[i]->shm;
     1314            if (shm->handlers->is_readwrite(shm, p)) {
     1315                return 1;
     1316            }
    12371317        }
    12381318    }
     
    12441324    xc_shm_t *shm;
    12451325    int i;
    1246     if (!xc_initized) {
    1247         return 0;
    1248     }
    1249     for (i = 0; i < xc_php_hcache.size; i ++) {
    1250         shm = xc_php_caches[i]->shm;
    1251         if (shm->handlers->is_readonly(shm, p)) {
    1252             return 1;
    1253         }
    1254     }
    1255     for (i = 0; i < xc_var_hcache.size; i ++) {
    1256         shm = xc_var_caches[i]->shm;
    1257         if (shm->handlers->is_readonly(shm, p)) {
    1258             return 1;
     1326
     1327    if (xc_php_caches) {
     1328        for (i = 0; i < xc_php_hcache.size; i ++) {
     1329            shm = xc_php_caches[i]->shm;
     1330            if (shm->handlers->is_readonly(shm, p)) {
     1331                return 1;
     1332            }
     1333        }
     1334    }
     1335
     1336    if (xc_var_caches) {
     1337        for (i = 0; i < xc_var_hcache.size; i ++) {
     1338            shm = xc_var_caches[i]->shm;
     1339            if (shm->handlers->is_readonly(shm, p)) {
     1340                return 1;
     1341            }
    12591342        }
    12601343    }
     
    15151598        XG(internal_table_copied) = 1;
    15161599    }
    1517     if (xc_php_hcache.size && !XG(php_holds)) {
     1600    if (xc_php_caches && !XG(php_holds)) {
    15181601        XG(php_holds) = calloc(xc_php_hcache.size, sizeof(xc_stack_t));
    15191602        for (i = 0; i < xc_php_hcache.size; i ++) {
     
    15221605    }
    15231606
    1524     if (xc_initized && xc_var_hcache.size && !XG(var_holds)) {
     1607    if (xc_var_caches && !XG(var_holds)) {
    15251608        XG(var_holds) = calloc(xc_var_hcache.size, sizeof(xc_stack_t));
    15261609        for (i = 0; i < xc_var_hcache.size; i ++) {
     
    16751758    }
    16761759
    1677 #define STR "WWW-authenticate: Basic Realm=\"XCache Administration\""
     1760#define STR "HTTP/1.0 401 Unauthorized"
    16781761    sapi_add_header_ex(STR, sizeof(STR) - 1, 1, 1 TSRMLS_CC);
    16791762#undef STR
    1680 #define STR "HTTP/1.0 401 Unauthorized"
     1763#define STR "WWW-authenticate: Basic Realm=\"XCache Administration\""
    16811764    sapi_add_header_ex(STR, sizeof(STR) - 1, 1, 1 TSRMLS_CC);
    16821765#undef STR
     
    18841967    } LEAVE_LOCK(xce.cache);
    18851968    if (found) {
    1886         xce.cache->hits ++;
     1969        xc_cache_hit_dmz(xce.cache TSRMLS_CC);
    18871970    }
    18881971    else {
     
    19652048    } LEAVE_LOCK(xce.cache);
    19662049    if (found) {
    1967         xce.cache->hits ++;
     2050        xc_cache_hit_dmz(xce.cache TSRMLS_CC);
    19682051    }
    19692052    else {
     
    20982181}
    20992182/* }}} */
     2183#ifdef HAVE_XCACHE_DPRINT
     2184/* {{{ proto bool  xcache_dprint(mixed value)
     2185   Prints variable (or value) internal struct (debug only) */
     2186PHP_FUNCTION(xcache_dprint)
     2187{
     2188    zval *value;
     2189
     2190    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &value) == FAILURE) {
     2191        return;
     2192    }
     2193    xc_dprint_zval(value, 0 TSRMLS_CC);
     2194}
     2195/* }}} */
     2196#endif
    21002197/* {{{ proto string xcache_asm(string filename)
    21012198 */
     
    23232420    PHP_FE(xcache_isset,             NULL)
    23242421    PHP_FE(xcache_unset,             NULL)
     2422#ifdef HAVE_XCACHE_DPRINT
     2423    PHP_FE(xcache_dprint,            NULL)
     2424#endif
    23252425    {NULL, NULL,                     NULL}
    23262426};
     
    24602560    php_info_print_table_row(2, "Modules Built", XCACHE_MODULES);
    24612561    php_info_print_table_row(2, "Readonly Protection", xc_readonly_protection ? "enabled" : "N/A");
     2562    ptr = php_format_date("Y-m-d H:i:s", sizeof("Y-m-d H:i:s") - 1, xc_init_time, 1 TSRMLS_CC);
     2563    php_info_print_table_row(2, "Cache Init Time", ptr);
     2564    efree(ptr);
     2565
     2566#ifdef ZTS
     2567    snprintf(buf, sizeof(buf), "%lu.%lu", xc_init_instance_id, xc_init_instance_subid);
     2568#else
     2569    snprintf(buf, sizeof(buf), "%lu", xc_init_instance_id);
     2570#endif
     2571    php_info_print_table_row(2, "Cache Instance Id", buf);
    24622572
    24632573    if (xc_php_size) {
     
    26942804        }
    26952805        xc_initized = 1;
     2806        xc_init_time = time(NULL);
     2807        xc_init_instance_id = getpid();
     2808#ifdef ZTS
     2809        xc_init_instance_subid = tsrm_thread_id();
     2810#endif
    26962811    }
    26972812
  • branches/1.3/xcache.h

    r622 r623  
    220220    time_t     last_gc_deletes;
    221221    time_t     last_gc_expires;
     222
     223    time_t     hits_by_hour_cur_time;
     224    zend_uint  hits_by_hour_cur_slot;
     225    zend_ulong hits_by_hour[24];
     226    time_t     hits_by_second_cur_time;
     227    zend_uint  hits_by_second_cur_slot;
     228    zend_ulong hits_by_second[5];
    222229} xc_cache_t;
    223230/* }}} */
  • branches/1.3/xcache.ini

    r604 r623  
    2323; to disable: xcache.size=0
    2424; to enable : xcache.size=64M etc (any size > 0) and your system mmap allows
    25 xcache.size  =                0M
     25xcache.size  =               60M
    2626; set to cpu count (cat /proc/cpuinfo |grep -c processor)
    2727xcache.count =                 1
     
    3434
    3535; same as aboves but for variable cache
    36 xcache.var_size  =            0M
     36xcache.var_size  =            4M
    3737xcache.var_count =             1
    3838xcache.var_slots =            8K
Note: See TracChangeset for help on using the changeset viewer.