protected function triggerBakeEvent($eventName, $func) { foreach ($this->getProcessors() as $proc) { $start = microtime(true); $func($proc); $end = microtime(true); $elapsed = ($end - $start) * 1000.0; if ($elapsed > 5) { $message = "[{$eventName} for {$proc->getName()}]"; $this->logger->info(PieCrustBaker::formatTimed($start, $message)); } } }
protected function bakeFile($path, $rootDir, $rootDirLength) { // Start timing this. $start = microtime(true); // Figure out the root-relative path. $relative = substr($path, $rootDirLength); // Figure out if a previously baked file has overridden this one. // This can happen for example when a theme's file (baked via a // special mount point) is overridden in the user's website (baked // via the first normal root directory). $isOverridden = false; foreach ($this->bakedFiles as $bakedFile) { if ($bakedFile['relative_input'] == $relative) { $isOverridden = true; } } if ($isOverridden) { $this->bakedFiles[$path] = array('relative_input' => $relative, 'was_baked' => false, 'was_overridden' => true); $this->logger->info(PieCrustBaker::formatTimed($start, $relative) . ' [not baked, overridden]'); return; } // Get the processing tree for that file. $builder = new ProcessingTreeBuilder($rootDir, $this->tmpDir, $this->bakeDir, $this->getProcessors()); $treeRoot = $builder->build($relative); // Add an entry in the baked files' metadata. $bakeDir = $this->bakeDir; $treeLeaves = $treeRoot->getLeaves(); $this->bakedFiles[$path] = array('relative_input' => $relative, 'relative_outputs' => array_map(function ($n) { return $n->getPath(); }, $treeLeaves), 'outputs' => array_map(function ($n) use($bakeDir) { return $bakeDir . $n->getPath(); }, $treeLeaves), 'was_baked' => false, 'was_overridden' => false); // See if we should force bake the file. $forceBake = !$this->parameters['smart']; if (!$forceBake) { foreach ($this->parameters['force_patterns'] as $p) { if (preg_match($p, $relative)) { $forceBake = true; break; } } } if ($forceBake) { $treeRoot->setState(ProcessingTreeNode::STATE_DIRTY, true); } // Bake! $runner = new ProcessingTreeRunner($rootDir, $this->tmpDir, $this->bakeDir, $this->logger); if ($runner->bakeSubTree($treeRoot)) { $this->bakedFiles[$path]['was_baked'] = true; $this->logger->info(PieCrustBaker::formatTimed($start, $relative)); } }