Allow the profiler to be started elsewhere and passed into
ProfilerExcimer via the configuration array. This allows the profiler to
be started in the auto_prepend_file. XHProf doesn't need this because it
has a single global profiler.
Change-Id: I348499a15d9cc42de0ba1a20afc2283b794931a3
private $realProf;
private $period;
private $realProf;
private $period;
+ /**
+ * @param array $params Associative array of parameters:
+ * - period: The sampling period
+ * - maxDepth: The maximum stack depth collected
+ * - cpuProfiler: A pre-started ExcimerProfiler instance for CPU
+ * profiling of the entire request including configuration.
+ * - realProfiler: A pre-started ExcimerProfiler instance for wall
+ * clock profiling of the entire request.
+ */
public function __construct( array $params = [] ) {
parent::__construct( $params );
$this->period = $params['period'] ?? 0.01;
$maxDepth = $params['maxDepth'] ?? 100;
public function __construct( array $params = [] ) {
parent::__construct( $params );
$this->period = $params['period'] ?? 0.01;
$maxDepth = $params['maxDepth'] ?? 100;
- $this->cpuProf = new ExcimerProfiler;
- $this->cpuProf->setEventType( EXCIMER_CPU );
- $this->cpuProf->setPeriod( $this->period );
- $this->cpuProf->setMaxDepth( $maxDepth );
-
- $this->realProf = new ExcimerProfiler;
- $this->realProf->setEventType( EXCIMER_REAL );
- $this->realProf->setPeriod( $this->period );
- $this->realProf->setMaxDepth( $maxDepth );
+ if ( isset( $params['cpuProfiler'] ) ) {
+ $this->cpuProf = $params['cpuProfiler'];
+ } else {
+ $this->cpuProf = new ExcimerProfiler;
+ $this->cpuProf->setEventType( EXCIMER_CPU );
+ $this->cpuProf->setPeriod( $this->period );
+ $this->cpuProf->setMaxDepth( $maxDepth );
+ $this->cpuProf->start();
+ }
- $this->cpuProf->start();
- $this->realProf->start();
+ if ( isset( $params['realProfiler'] ) ) {
+ $this->realProf = $params['realProfiler'];
+ } else {
+ $this->realProf = new ExcimerProfiler;
+ $this->realProf->setEventType( EXCIMER_REAL );
+ $this->realProf->setPeriod( $this->period );
+ $this->realProf->setMaxDepth( $maxDepth );
+ $this->realProf->start();
+ }
}
public function scopedProfileIn( $section ) {
}
public function scopedProfileIn( $section ) {