Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 /*
|
Chris@0
|
4 * This file is part of the Symfony package.
|
Chris@0
|
5 *
|
Chris@0
|
6 * (c) Fabien Potencier <fabien@symfony.com>
|
Chris@0
|
7 *
|
Chris@0
|
8 * For the full copyright and license information, please view the LICENSE
|
Chris@0
|
9 * file that was distributed with this source code.
|
Chris@0
|
10 */
|
Chris@0
|
11
|
Chris@0
|
12 namespace Symfony\Component\HttpKernel\DataCollector;
|
Chris@0
|
13
|
Chris@0
|
14 use Symfony\Component\HttpFoundation\Request;
|
Chris@0
|
15 use Symfony\Component\HttpFoundation\Response;
|
Chris@0
|
16
|
Chris@0
|
17 /**
|
Chris@0
|
18 * MemoryDataCollector.
|
Chris@0
|
19 *
|
Chris@0
|
20 * @author Fabien Potencier <fabien@symfony.com>
|
Chris@0
|
21 */
|
Chris@0
|
22 class MemoryDataCollector extends DataCollector implements LateDataCollectorInterface
|
Chris@0
|
23 {
|
Chris@0
|
24 public function __construct()
|
Chris@0
|
25 {
|
Chris@14
|
26 $this->reset();
|
Chris@0
|
27 }
|
Chris@0
|
28
|
Chris@0
|
29 /**
|
Chris@0
|
30 * {@inheritdoc}
|
Chris@0
|
31 */
|
Chris@0
|
32 public function collect(Request $request, Response $response, \Exception $exception = null)
|
Chris@0
|
33 {
|
Chris@0
|
34 $this->updateMemoryUsage();
|
Chris@0
|
35 }
|
Chris@0
|
36
|
Chris@0
|
37 /**
|
Chris@0
|
38 * {@inheritdoc}
|
Chris@0
|
39 */
|
Chris@14
|
40 public function reset()
|
Chris@14
|
41 {
|
Chris@17
|
42 $this->data = [
|
Chris@14
|
43 'memory' => 0,
|
Chris@14
|
44 'memory_limit' => $this->convertToBytes(ini_get('memory_limit')),
|
Chris@17
|
45 ];
|
Chris@14
|
46 }
|
Chris@14
|
47
|
Chris@14
|
48 /**
|
Chris@14
|
49 * {@inheritdoc}
|
Chris@14
|
50 */
|
Chris@0
|
51 public function lateCollect()
|
Chris@0
|
52 {
|
Chris@0
|
53 $this->updateMemoryUsage();
|
Chris@0
|
54 }
|
Chris@0
|
55
|
Chris@0
|
56 /**
|
Chris@0
|
57 * Gets the memory.
|
Chris@0
|
58 *
|
Chris@0
|
59 * @return int The memory
|
Chris@0
|
60 */
|
Chris@0
|
61 public function getMemory()
|
Chris@0
|
62 {
|
Chris@0
|
63 return $this->data['memory'];
|
Chris@0
|
64 }
|
Chris@0
|
65
|
Chris@0
|
66 /**
|
Chris@0
|
67 * Gets the PHP memory limit.
|
Chris@0
|
68 *
|
Chris@0
|
69 * @return int The memory limit
|
Chris@0
|
70 */
|
Chris@0
|
71 public function getMemoryLimit()
|
Chris@0
|
72 {
|
Chris@0
|
73 return $this->data['memory_limit'];
|
Chris@0
|
74 }
|
Chris@0
|
75
|
Chris@0
|
76 /**
|
Chris@0
|
77 * Updates the memory usage data.
|
Chris@0
|
78 */
|
Chris@0
|
79 public function updateMemoryUsage()
|
Chris@0
|
80 {
|
Chris@0
|
81 $this->data['memory'] = memory_get_peak_usage(true);
|
Chris@0
|
82 }
|
Chris@0
|
83
|
Chris@0
|
84 /**
|
Chris@0
|
85 * {@inheritdoc}
|
Chris@0
|
86 */
|
Chris@0
|
87 public function getName()
|
Chris@0
|
88 {
|
Chris@0
|
89 return 'memory';
|
Chris@0
|
90 }
|
Chris@0
|
91
|
Chris@0
|
92 private function convertToBytes($memoryLimit)
|
Chris@0
|
93 {
|
Chris@0
|
94 if ('-1' === $memoryLimit) {
|
Chris@0
|
95 return -1;
|
Chris@0
|
96 }
|
Chris@0
|
97
|
Chris@0
|
98 $memoryLimit = strtolower($memoryLimit);
|
Chris@0
|
99 $max = strtolower(ltrim($memoryLimit, '+'));
|
Chris@0
|
100 if (0 === strpos($max, '0x')) {
|
Chris@17
|
101 $max = \intval($max, 16);
|
Chris@0
|
102 } elseif (0 === strpos($max, '0')) {
|
Chris@17
|
103 $max = \intval($max, 8);
|
Chris@0
|
104 } else {
|
Chris@0
|
105 $max = (int) $max;
|
Chris@0
|
106 }
|
Chris@0
|
107
|
Chris@0
|
108 switch (substr($memoryLimit, -1)) {
|
Chris@0
|
109 case 't': $max *= 1024;
|
Chris@14
|
110 // no break
|
Chris@0
|
111 case 'g': $max *= 1024;
|
Chris@14
|
112 // no break
|
Chris@0
|
113 case 'm': $max *= 1024;
|
Chris@14
|
114 // no break
|
Chris@0
|
115 case 'k': $max *= 1024;
|
Chris@0
|
116 }
|
Chris@0
|
117
|
Chris@0
|
118 return $max;
|
Chris@0
|
119 }
|
Chris@0
|
120 }
|