getRevisionParserOutput. * Caching behavior may be defined by subclasses. * * @note No audience checks are applied. * * @internal */ class PoolWorkArticleView extends PoolCounterWork { /** @var ParserOptions */ protected $parserOptions; /** @var RevisionRecord */ protected $revision; /** @var RevisionRenderer */ private $renderer; /** @var LoggerSpi */ protected $loggerSpi; /** * @param string $workKey * @param RevisionRecord $revision Revision to render * @param ParserOptions $parserOptions ParserOptions to use for the parse * @param RevisionRenderer $revisionRenderer * @param LoggerSpi $loggerSpi */ public function __construct( string $workKey, RevisionRecord $revision, ParserOptions $parserOptions, RevisionRenderer $revisionRenderer, LoggerSpi $loggerSpi ) { parent::__construct( 'ArticleView', $workKey ); $this->revision = $revision; $this->parserOptions = $parserOptions; $this->renderer = $revisionRenderer; $this->loggerSpi = $loggerSpi; } /** * @return Status */ public function doWork() { return $this->renderRevision(); } /** * Render the given revision. * * @see ParserOutputAccess::renderRevision * * @param ?ParserOutput $previousOutput previously-cached output for this * page (used by Parsoid for selective updates) * @param bool $doSample Whether to collect statistics on this render * @param string $sourceLabel the source label to use on the statistics * @return Status with the value being a ParserOutput or null */ public function renderRevision( ?ParserOutput $previousOutput = null, bool $doSample = false, string $sourceLabel = '' ): Status { $renderedRevision = $this->renderer->getRenderedRevision( $this->revision, $this->parserOptions, null, [ 'audience' => RevisionRecord::RAW, 'previous-output' => $previousOutput, ] ); $parserOutput = $renderedRevision->getRevisionParserOutput(); if ( $doSample ) { $stats = MediaWikiServices::getInstance()->getStatsFactory(); $content = $this->revision->getContent( SlotRecord::MAIN ); $labels = [ 'source' => $sourceLabel, 'type' => $previousOutput === null ? 'full' : 'selective', 'reason' => $this->parserOptions->getRenderReason(), 'parser' => $this->parserOptions->getUseParsoid() ? 'parsoid' : 'legacy', 'opportunistic' => 'false', 'wiki' => WikiMap::getCurrentWikiId(), 'model' => $content ? $content->getModel() : 'unknown', ]; $stats ->getCounter( 'ParserCache_selective_total' ) ->setLabels( $labels ) ->increment(); $stats ->getCounter( 'ParserCache_selective_cpu_seconds' ) ->setLabels( $labels ) ->incrementBy( $parserOutput->getTimeProfile( 'cpu' ) ); } return Status::newGood( $parserOutput ); } /** * @param Status $status * @return Status */ public function error( $status ) { return $status; } } /** @deprecated class alias since 1.42 */ class_alias( PoolWorkArticleView::class, 'PoolWorkArticleView' );