architectureSnapshot method

PixaRegistryArchitectureSnapshot architectureSnapshot()

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,
  );
}