     return unless @startRow? and @endRow? and @lineHeight?
 
     visibleTiles = {}
-    for startRow in @getVisibleTileRange() by @linesPerTile()
-      endRow = Math.min(@model.getScreenLineCount(), startRow + @linesPerTile())
+    for startRow in @getVisibleTilesRange() by @tileSize
+      endRow = Math.min(@model.getScreenLineCount(), startRow + @tileSize)
 
       isNewTile = not @state.content.tiles.hasOwnProperty(startRow)
       tile = @state.content.tiles[startRow] ?= {}
       tile.top = startRow * @lineHeight - @scrollTop
-      tile.height = @linesPerTile() * @lineHeight
+      tile.height = @tileSize * @lineHeight
       tile.newlyCreated = isNewTile
       tile.display = "block"
 

        tile.display = "none"
      else
        delete @state.content.tiles[id]


  updateLinesState: (tileState, startRow, endRow) ->
    tileState.lines ?= {}

    visibleLinesCount = Math.ceil(@height / @lineHeight) + 1
    endRow = startRow + visibleLinesCount
    @endRow = Math.min(@model.getScreenLineCount(), endRow)

  updateTileSize: ->
    return unless @height? and @lineHeight? and @tileCount?

    @tileSize = Math.floor(@height / @lineHeight / @tileCount)
    @tileSize = Math.max(1, @tileSize)

  updateScrollWidth: ->
    return unless @contentWidth? and @clientWidth?
