core/renderer/pipeline/README.md
lynx/core/renderer/pipeline defines a versioned pixel pipeline context system.
Core goals:
PipelineContext.PipelineLifecycle state machine.PipelineOptions flags.PipelineVersion
{major, minor} version.PipelineLifecycle
PipelineContext
PipelineContextManager
TemplateAssembler.PipelineScope
RunPixelPipeline() on exit.Canonical path:
kInactivekInStyleResolvekAfterStyleResolvekInPerformLayoutkAfterPerformLayoutkUIOpFlushkStoppedNotes:
kStopped is terminal.is_state_executed is calculated per state from options flags (resolve/layout/flush). +----------------+
| kUninitialized |
+----------------+
|
v
+-----------+
| kInactive | ----------------------------------+
+-----------+ |
| |
v |
+-----------------+ |
+---------> | kInStyleResolve | ---------------------+ |
| +-----------------+ | |
| | | |
| v | |
| +--------------------+ | |
| | kAfterStyleResolve | --------------+ | |
| +--------------------+ | | |
| | | | |
| v | | |
| +-------------------+ v v v
| | kInPerformLayout | --------> +----------+
| +-------------------+ | kStopped |
| | +----------+
| v ^ ^ ^
| +---------------------+ | | |
| | kAfterPerformLayout | --------------+ | |
| +---------------------+ | |
| | | |
| v | |
| +------------+ | |
+------------ | kUIOpFlush | ------------------------+ |
+------------+ |
|
|
PipelineOptions to context.TemplateAssembler::RunPixelPipeline() advances lifecycle and conditionally executes stages:
kStopped.Observer lifecycle aligns with TemplateAssembler instance, not single context.
Public entry points:
TemplateAssembler::AddPipelineObserver(PipelineLifecycleObserver*)TemplateAssembler::RemovePipelineObserver(PipelineLifecycleObserver*)Routing:
TemplateAssembler forwards to PipelineContextManager.class MyPipelineObserver : public PipelineLifecycleObserver {
public:
void OnLifecycleChanged(const Data& data) override {
// handle state transitions
}
};
auto observer = std::make_unique<MyPipelineObserver>();
tasm->AddPipelineObserver(observer.get());
// ... pipeline runs ...
// before observer owner destruction
tasm->RemovePipelineObserver(observer.get());
PipelineLifecycleObserver::Data important fields:
prev_state, cur_state: lifecycle transition.is_state_executed: whether this stage actually executed.pipeline_version: context version.pipeline_id, pipeline_origin: request-level identity.timestamp_us: creation timestamp in microseconds.TemplateAssembler.PipelineContextManager::NotifyLifecycleChanged iterates over a copied observer snapshot.When adding or changing observer behavior, cover:
Related tests:
pipeline_context_manager_unittest.ccpipeline_context_unittest.ccpipeline_scope_unittest.cc