architectureSnapshot method
Returns an aggregated architecture snapshot for this registry.
Implementation
PixaRegistryArchitectureSnapshot architectureSnapshot() {
final List<PixaRegistryHandler> handlers = <PixaRegistryHandler>[
..._fetchers.values,
..._decoders.values,
..._processors.values,
..._cacheStores.values,
];
final Map<String, PixaRuntimeContract> runtimeModules =
<String, PixaRuntimeContract>{};
var runtimeHandlers = 0;
var dartHandlers = 0;
var platformHandlers = 0;
var externalHandlers = 0;
var allHostRuntime = true;
var allBinaryMessages = true;
var allOwnedBuffers = true;
var allStreamHandles = true;
for (final PixaRegistryHandler handler in handlers) {
final PixaPluginExecutionKind kind = _executionKindFor(handler);
switch (kind) {
case PixaPluginExecutionKind.runtime:
runtimeHandlers++;
final PixaRuntimeContract contract =
(handler as PixaRuntimeDescriptor).runtime;
runtimeModules.putIfAbsent(contract.moduleId, () => contract);
allHostRuntime = allHostRuntime && contract.hostManagedRuntime;
allBinaryMessages = allBinaryMessages && contract.binaryMessages;
allOwnedBuffers = allOwnedBuffers && contract.ownedBuffers;
allStreamHandles = allStreamHandles && contract.streamHandles;
case PixaPluginExecutionKind.dart:
dartHandlers++;
case PixaPluginExecutionKind.platform:
platformHandlers++;
case PixaPluginExecutionKind.external:
externalHandlers++;
}
}
var builtInHostModules = 0;
var hostLinkedPluginModules = 0;
var assetModules = 0;
var linkableRuntimeModules = 0;
for (final PixaRuntimeContract contract in runtimeModules.values) {
switch (contract.deployment) {
case PixaRuntimeDeployment.builtInHostModule:
builtInHostModules++;
case PixaRuntimeDeployment.hostLinkedPluginModule:
hostLinkedPluginModules++;
case PixaRuntimeDeployment.assetModule:
assetModules++;
}
if (contract.canLinkIntoHostBinary) {
linkableRuntimeModules++;
}
}
return PixaRegistryArchitectureSnapshot(
fetchers: _fetchers.length,
decoders: _decoders.length,
processors: _processors.length,
cacheStores: _cacheStores.length,
videoFrameBackends: videoFrameBackends.length,
videoFrameBackendsUseRuntimeOnly: videoFrameBackends.every(
(PixaVideoFrameBackendDescriptor backend) =>
backend.executionKind == PixaPluginExecutionKind.runtime,
),
videoFrameEncodedOutputBackends: videoFrameBackends
.where(
(PixaVideoFrameBackendDescriptor backend) =>
backend.capabilities.encodedImageOutput,
)
.length,
decoderSignatureRoutes: _decoders.values.fold<int>(
0,
(int count, PixaDecoderDescriptor decoder) =>
count + decoder.signatures.length,
),
decodersWithMetadataProbe: _decoders.values
.where(
(PixaDecoderDescriptor decoder) =>
decoder.capabilities.metadataProbe,
)
.length,
decodersWithRegionDecode: _decoders.values
.where(
(PixaDecoderDescriptor decoder) =>
decoder.capabilities.regionDecode,
)
.length,
decodersWithStreamingInput: _decoders.values
.where(
(PixaDecoderDescriptor decoder) =>
decoder.capabilities.streamingInput,
)
.length,
runtimeHandlers: runtimeHandlers,
dartHandlers: dartHandlers,
platformHandlers: platformHandlers,
externalHandlers: externalHandlers,
runtimeModules: runtimeModules.length,
builtInHostModules: builtInHostModules,
hostLinkedPluginModules: hostLinkedPluginModules,
assetModules: assetModules,
linkableRuntimeModules: linkableRuntimeModules,
allRuntimeHandlersUseHostRuntime: allHostRuntime,
allRuntimeHandlersUseBinaryMessages: allBinaryMessages,
allRuntimeHandlersUseOwnedBuffers: allOwnedBuffers,
allRuntimeHandlersUseStreamHandles: allStreamHandles,
);
}