Skip to content
Snippets Groups Projects
Commit b7429420 authored by Jess's avatar Jess
Browse files

Issue #2994550 by tedbow, tim.plunkett, gapple, johndevman, Wim Leers,...

Issue #2994550 by tedbow, tim.plunkett, gapple, johndevman, Wim Leers, neclimdul, EclipseGc, catch: Filtering block plugins by context is slow

(cherry picked from commit 2753c013)
parent f10cf17e
No related branches found
No related tags found
No related merge requests found
......@@ -17,12 +17,19 @@ class ContextHandler implements ContextHandlerInterface {
* {@inheritdoc}
*/
public function filterPluginDefinitionsByContexts(array $contexts, array $definitions) {
return array_filter($definitions, function ($plugin_definition) use ($contexts) {
$checked_requirements = [];
return array_filter($definitions, function ($plugin_definition) use ($contexts, &$checked_requirements) {
$context_definitions = $this->getContextDefinitions($plugin_definition);
if ($context_definitions) {
// Check the set of contexts against the requirements.
return $this->checkRequirements($contexts, $context_definitions);
// Generate a unique key for the current context definitions. This will
// allow calling checkRequirements() once for all plugins that have the
// same context definitions.
$context_definitions_key = hash('sha256', serialize($context_definitions));
if (!isset($checked_requirements[$context_definitions_key])) {
// Check the set of contexts against the requirements.
$checked_requirements[$context_definitions_key] = $this->checkRequirements($contexts, $context_definitions);
}
return $checked_requirements[$context_definitions_key];
}
// If this plugin doesn't need any context, it is available to use.
return TRUE;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment