@chris
prepare one more surface render on it, off screen,
once render is done,
flip the switch and display that (buffered) surface?
it's often how it is done for games and dynamic contents.
that, or, you render directly on screen but keep a buffer that is larger than the screen, so when we are scrolling, we don't see the tiles appearing (it would happen just after the boundaries of the physical screen.)
for example if screen is 800x600, you render that once in one chunk,
and then keep a buffer of 900x700 (or a little bit more). so we don't see tiles being created.
i had similar problem in a platform (side scroller a metroid like) game i did once, the game level scrolling as the player progressed, kept appearing in front of him.
once you know the screen size and the tile size, it's easy to see how many tiles you can fit on screen. you could have a loop waiting for the correct amount of tile being rendered before displaying the page.