Apple’s Technical Q&A on addressing flickering (QA1650) includes the following paragraph. (Emphasis mine.)
You must provide a color to every pixel on the screen. At the beginning of your drawing code, it is a good idea to use glClear() to initialize the color buffer. A full-screen clear of each of your color, depth, and stencil buffers (if you’re using them) at the start of a frame can also generally improve your application’s performance.
On other platforms, I’ve always found it to be an optimization to not clear the color buffer if you’re going to draw to every pixel. (Why waste time filling the color buffer if you’re just going to overwrite that clear color?)
How can a call to glClear() improve performance?
It is most likely related to tile-based rendering, which divides the whole viewport to tiles (smaller windows, can be typically of size 32×32) and these tiles are kept in faster memories. The copy operations between this smaller memory and the real framebuffer can take some time (memory operations are a lot slower than arithmetic operations). By issuing a glClear command, you are telling the hardware that you do not need previous buffer content, thus it does not need to copy the color/depth/whatever from the framebuffer to the smaller tile memory.