Clean up GPU back-pressure with remote CALayers

If a CAOpenGLLayer is attached to a NSView that is completely occluded
or isn't in the window hierarchy, then when we ask that layer to draw, it
will not draw, or will draw after a long delay. This optimization can be a
problem if we need to renderer to continue to produce frames, e.g, for
tab capture.

Fix this issue by having the frame acknowledgement from the browser
to the GPU process (which currently informs the GPU process of the
CGL renderer ID) inform the GPU process of the occlusion status of the
NSView being drawn to. Use this information in the GPU process to force
the CAOpenGLLayer to draw as soon as a new frame arrives.

Add the same timeout mechanism as is in the IOSurface drawing path
to limit CoreAnimation's throttling (based on GPU back-pressure) to
6 fps, to avoid having the renderer block indefinitely. This is something
of a hack, but is an unfortunate necessity.

Note that this change assumes that calling setNeedsDisplay and then
displayIfNeeded will result in the CALayer being draw except in the
case where the CALayer is backing a NSView that is not in the window
hierarchy. This exception only happens during tab capture of a
backgrounded tab, and the contents not drawn are actually never seen,
so it is safe to skip the draw entirely.

Also, wrap some Mac-only IPCs and structures #if defined(OS_MACOSX).

BUG=312462

Review URL: https://codereview.chromium.org/636003002

Cr-Commit-Position: refs/heads/master@{#298828}
12 files changed