tools/profiler/php/ProfFileParser.class.php
author David Anderson <dvander@alliedmods.net>
Fri Jul 11 06:51:21 2008 +0000 (2008-07-11)
branchrefac-jit
changeset 2192 7602d7fb60d9
parent 2168 c24a6fa957db
permissions -rw-r--r--
fixed a compat regression, forgot msvc does funky things with overloaded virtual calls
dvander@2168
     1
<?php
dvander@2168
     2
dvander@2168
     3
class ProfReport
dvander@2168
     4
{
dvander@2168
     5
	public $time;
dvander@2168
     6
	public $uptime;
dvander@2168
     7
	public $items = array();
dvander@2168
     8
}
dvander@2168
     9
dvander@2168
    10
class ProfReportParser
dvander@2168
    11
{
dvander@2168
    12
	private $report;
dvander@2168
    13
	private $curtype;
dvander@2168
    14
	public $last_error;
dvander@2168
    15
dvander@2168
    16
	public function Parse($file)
dvander@2168
    17
	{
dvander@2168
    18
		$this->report = FALSE;
dvander@2168
    19
		$this->curtype = FALSE;
dvander@2168
    20
dvander@2168
    21
		if (($contents = file_get_contents($file)) === FALSE)
dvander@2168
    22
		{
dvander@2168
    23
			$this->last_error = 'File not found';
dvander@2168
    24
			return FALSE;
dvander@2168
    25
		}
dvander@2168
    26
		
dvander@2168
    27
		$xml = xml_parser_create();
dvander@2168
    28
		xml_set_object($xml, $this);
dvander@2168
    29
		xml_set_element_handler($xml, 'tag_open', 'tag_close');
dvander@2168
    30
		xml_parser_set_option($xml, XML_OPTION_CASE_FOLDING, false);
dvander@2168
    31
dvander@2168
    32
		if (!xml_parse($xml, $contents))
dvander@2168
    33
		{
dvander@2168
    34
			$this->last_error = 'Line: ' . xml_get_current_line_number($xml) . ' -- ' . xml_error_string(xml_get_error_code($xml));
dvander@2168
    35
			return FALSE;
dvander@2168
    36
		}
dvander@2168
    37
dvander@2168
    38
		return $this->report;
dvander@2168
    39
	}
dvander@2168
    40
dvander@2168
    41
	public function tag_open($parser, $tag, $attrs)
dvander@2168
    42
	{
dvander@2168
    43
		if ($tag == 'profile')
dvander@2168
    44
		{
dvander@2168
    45
			$this->report = new ProfReport();
dvander@2168
    46
			$this->report->time = $attrs['time'];
dvander@2168
    47
			$this->report->uptime = $attrs['uptime'];
dvander@2168
    48
		}
dvander@2168
    49
		else if ($tag == 'report')
dvander@2168
    50
		{
dvander@2168
    51
			$this->curtype = $attrs['name'];
dvander@2168
    52
		}
dvander@2168
    53
		else if ($tag == 'item')
dvander@2168
    54
		{
dvander@2168
    55
			if ($this->report === FALSE || $this->curtype === FALSE)
dvander@2168
    56
			{
dvander@2168
    57
				return;
dvander@2168
    58
			}
dvander@2168
    59
			$attrs['type'] = $this->curtype;
dvander@2168
    60
			$this->report->items[] = $attrs;
dvander@2168
    61
		}
dvander@2168
    62
	}
dvander@2168
    63
dvander@2168
    64
	public function tag_close($parser, $tag)
dvander@2168
    65
	{
dvander@2168
    66
		if ($tag == 'report')
dvander@2168
    67
		{
dvander@2168
    68
			$this->curtype = FALSE;
dvander@2168
    69
		}
dvander@2168
    70
	}
dvander@2168
    71
}
dvander@2168
    72
dvander@2168
    73
?>