logRenderFrame static method

void logRenderFrame({
  1. required Object view,
  2. int? renderGeneration,
  3. String? degradationLevel,
  4. int? renderDurationUs,
  5. int? width,
  6. int? height,
  7. List<TerminalNativeSpanDelta>? nativeSpanDelta,
})

Implementation

static void logRenderFrame({
  required Object view,
  int? renderGeneration,
  String? degradationLevel,
  int? renderDurationUs,
  int? width,
  int? height,
  List<TerminalNativeSpanDelta>? nativeSpanDelta,
}) {
  if (!captureFramesEnabled) return;
  final frame = TerminalRenderFrame.inspect(view);
  logDecision(
    decisionType: 'render_frame',
    result: 'captured',
    type: 'runtime.render',
    factors: <String, Object?>{
      if (renderGeneration != null) 'renderGeneration': renderGeneration,
      if (degradationLevel != null) 'degradationLevel': degradationLevel,
      if (renderDurationUs != null) 'renderDurationUs': renderDurationUs,
      if (width != null) 'width': width,
      if (height != null) 'height': height,
      'lineCount': frame.lines.length,
      'content': frame.content,
      'plainText': frame.plainText,
      'lines': frame.lines
          .map(
            (line) => <String, Object?>{
              'raw': line.raw,
              'statePrefix': line.statePrefix,
              'plainText': line.plainText,
              'visibleWidth': line.visibleWidth,
            },
          )
          .toList(growable: false),
      if (nativeSpanDelta != null)
        'nativeSpanDelta': nativeSpanDelta
            .map(
              (line) => <String, Object?>{
                'index': line.index,
                'spans': line.spans
                    .map(
                      (span) => <String, Object?>{
                        'lineIndex': span.lineIndex,
                        'startColumn': span.startColumn,
                        'endColumn': span.endColumn,
                        'text': span.text,
                        'hasDrawable': span.hasDrawable,
                        if (span.style.fg != null)
                          'fg': _nativeColorToJson(span.style.fg!),
                        if (span.style.bg != null)
                          'bg': _nativeColorToJson(span.style.bg!),
                        if (span.style.underlineColor != null)
                          'underlineColor': _nativeColorToJson(
                            span.style.underlineColor!,
                          ),
                        'style': <String, Object?>{
                          'attrs': span.style.attrs,
                          'underline': span.style.underline.name,
                          'packedKey': span.style.packedKey,
                        },
                        'link': <String, Object?>{
                          'url': span.link.url,
                          'params': span.link.params,
                        },
                      },
                    )
                    .toList(growable: false),
              },
            )
            .toList(growable: false),
    },
  );
}