drawRenderedRow(row, cursorY, isRtl) {
    if (!DebugDrawer.config.rows) {
      return;
    }
    this.debugElements_.push(
      Blockly.utils.dom.createSvgElement(
        'rect',
        {
          'class': 'elemRenderingRect blockRenderDebug',
          'x': isRtl ? -(row.xPos + row.width) : row.xPos,
          'y': row.yPos,
          'width': row.width,
          'height': row.height,
          'stroke': 'red',
          'fill': 'none',
          'stroke-width': '1px',
        },
        this.svgRoot_,
      ),
    );

    if (Blockly.blockRendering.Types.isTopOrBottomRow(row)) {
      return;
    }

    if (DebugDrawer.config.connectedBlockBounds) {
      this.debugElements_.push(
        Blockly.utils.dom.createSvgElement(
          'rect',
          {
            'class': 'connectedBlockWidth blockRenderDebug',
            'x': isRtl ? -(row.xPos + row.widthWithConnectedBlocks) : row.xPos,
            'y': row.yPos,
            'width': row.widthWithConnectedBlocks,
            'height': row.height,
            'stroke': this.randomColour_,
            'fill': 'none',
            'stroke-width': '1px',
            'stroke-dasharray': '3,3',
          },
          this.svgRoot_,
        ),
      );
    }
  }
Draw a debug rectangle for a non-empty row.
@param {!Blockly.blockRendering.Row} row The non-empty row to render.
@param {number} cursorY The y position of the top of the row.
@param {boolean} isRtl Whether the block is rendered RTL.
@protected