         @lineNumberDecorationsByScreenRow[row] ?= {}
         @lineNumberDecorationsByScreenRow[row][decoration.id] = decoration
 
+  updateHighlightState: (decoration, range) ->
+    return unless @hasRequiredMeasurements()
+
+    properties = decoration.getProperties()
+    range = range.copy()
+    startRow = @computeStartRow()
+    endRow = @computeEndRow()
+
+    if range.start.row < startRow
+      range.start.row = startRow
+      range.start.column = 0
+    if range.end.row >= endRow
+      range.end.row = endRow
+      range.end.column = 0
+
+    return if range.isEmpty()
+
+    highlightState = @state.content.highlights[decoration.id] ?= {
+      flashCount: 0
+      flashDuration: null
+      flashClass: null
+    }
+    highlightState.class = properties.class
+    highlightState.deprecatedRegionClass = properties.deprecatedRegionClass
+    highlightState.regions = @buildHighlightRegions(range)
+
   observeCursor: (cursor) ->
     didChangePositionDisposable = cursor.onDidChangePosition =>
       @pauseCursorBlinking()

      @updateDecorations()
      @updateLinesState()
      @updateCursorsState()
      @updateHighlightsState()
      @updateLineNumbersState()
      @updateOverlaysState()


      @updateDecorations()
      @updateLinesState()
      @updateCursorsState()
      @updateLineNumbersState()

  didStartScrolling: ->
