Fix Omnibox.CharTypedToRepaintLatency regression with D3DVsync experiment

The regression was caused by a subtle difference in how MISSED
BeginFrameArgs is generated between DelayBasedBeginFrameSource and
GpuVSyncBeginFrameSource (which is based on external BFS).

External BFS would only generate a MISSED args if it already has a
previous args (which is the case only when it already has at least
one other observer). So in many real cases it would skip issuing a
MISSED args.

In contrast, DelayBasedBeginFrameSource uses its DelayBasedTimeSource
to find the last missed frame time regardless of whether it had
another observer before.

I've slightly refactored ExternalBeginFrameSource to make it
possible to override generation of a MISSED args in a derived class.
Now GpuVSyncBeginFrameSource is able to project the last missed
frame time based on a previous args even if it was issued some time
ago.

And because GpuVSyncBeginFrameSource is now more complex I included
a unit test to cover all the special logic that it adds on top of
ExternalBeginFrameSource.

BUG=723935
CQ_INCLUDE_TRYBOTS=master.tryserver.blink:linux_trusty_blink_rel

Review-Url: https://codereview.chromium.org/2897263003
Cr-Commit-Position: refs/heads/master@{#476022}
6 files changed