protected function RuntimeMeasurementTracker::initializeCounters in Purge 8.3
Intialize or reinitialize the counter objects.
Throws
\LogicException Thrown when $this->purgers isn't initialized.
1 call to RuntimeMeasurementTracker::initializeCounters()
- RuntimeMeasurementTracker::setPurgers in src/
Plugin/ Purge/ Purger/ RuntimeMeasurementTracker.php - Set all purger plugin instances.
File
- src/
Plugin/ Purge/ Purger/ RuntimeMeasurementTracker.php, line 61
Class
- RuntimeMeasurementTracker
- Provides the tracker that tracks RuntimeMeasurement objects for purgers.
Namespace
Drupal\purge\Plugin\Purge\PurgerCode
protected function initializeCounters() {
if (is_null($this->purgers)) {
throw new \LogicException('$this->purgers is still NULL, call ::setPurgers.');
}
// Generate state keys for participating purger plugins.
$this->stateKeys = [];
foreach ($this->purgers as $purger) {
if ($purger
->hasRuntimeMeasurement()) {
$id = $purger
->getId();
$this->stateKeys[$id] = 'purge_purger_measurement_' . $id;
}
}
// Prefetch counter values, instantiate and then associate counter objects.
if (count($this->stateKeys)) {
$values = $this->state
->getMultiple($this->stateKeys);
foreach ($this->stateKeys as $id => $key) {
if (isset($this->buffer[$key])) {
$values[$key] = $this->buffer[$key];
}
if (!isset($values[$key])) {
$values[$key] = 0.0;
}
// Instantiate (or overwrite) the counter objects and pass a closure as
// write callback. The closure writes changed values to $this->buffer.
$measurement = new RuntimeMeasurement($values[$key]);
$measurement
->disableDecrement();
$measurement
->disableIncrement();
$measurement
->setWriteCallback(function ($value) use ($key) {
$this->buffer[$key] = $value;
});
// To start and stop measurement, PurgersServiceInterface::invalidate()
// needs to access ::start() and ::stop(), so we need to add the counter
// to the purger. Once ::invalidate() did its work, this will lead to
// calls to ::setDirectly() within the counter and this in fact, will
// lead back here as that calls our write callback.
$this->purgers[$id]
->setRuntimeMeasurement($measurement);
}
}
}