public updateInteractiveBuffer()

in web/src/app/timeline/canvas/timeline_gl_row_renderer.ts [228:278]


  public updateInteractiveBuffer(
    selectedLogIndex: number,
    highlightedLogIndices: Set<number>,
    filteredLogIndices: Set<number>,
  ) {
    this.ignoreGLContextLostException(() => {
      for (const [index, revision] of this.timeline.revisions.entries()) {
        let status = SelectionStatusForShader.Default;
        if (filteredLogIndices.has(revision.logIndex)) {
          status = SelectionStatusForShader.FilteredOut;
        } else if (revision.revisionStateCssSelector !== 'inferred') {
          // When the timeline is `inferred`, there are no actual related log. shouldn't be highlighted/selected.
          if (
            selectedLogIndex !== -1 &&
            revision.logIndex === selectedLogIndex
          ) {
            status = SelectionStatusForShader.Selected;
          } else if (highlightedLogIndices.has(revision.logIndex)) {
            status = SelectionStatusForShader.Highlighted;
          }
        }
        this.revisionIntMetaBufferSource[index * 2 + 1] = status;
      }
      this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.revisionIntMetaBuffer);
      this.gl.bufferData(
        this.gl.ARRAY_BUFFER,
        this.revisionIntMetaBufferSource,
        this.gl.DYNAMIC_DRAW,
      );

      for (const [index, event] of this.timeline.events.entries()) {
        let status = SelectionStatusForShader.Default;
        if (filteredLogIndices.has(event.logIndex)) {
          status = SelectionStatusForShader.FilteredOut;
        } else {
          if (selectedLogIndex !== -1 && event.logIndex === selectedLogIndex) {
            status = SelectionStatusForShader.Selected;
          } else if (highlightedLogIndices.has(event.logIndex)) {
            status = SelectionStatusForShader.Highlighted;
          }
        }
        this.eventIntMetaBufferSource[index] = status;
      }
      this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.eventIntMetaBuffer);
      this.gl.bufferData(
        this.gl.ARRAY_BUFFER,
        this.eventIntMetaBufferSource,
        this.gl.DYNAMIC_DRAW,
      );
    });
  }