Merge fences when needed for accurate timestamps.
There's an optimization in ConsumerBase that checks the status
of the current fence before merging it with a new fence. If
the current fence has already signaled, then it just picks up
the new fence without merging.
Unfortunately, if the new fence is already signaled too, then
it's possible that it signaled long before the current fence,
which can result in an inaccurate timestamp with the current
logic.
The new logic merges the fences when the statuses of the current
and new fences are the same. If they differ, then it takes the
unsignaled fence.
This fixes the reads done timestamps in the GetFrameTimestamps
dEQP tests so that they are always monotonic and always arrive
after rendering completes.
Test: --deqp-case=dEQP-EGL*get_frame_timestamps*
Bug:
37513882
Change-Id: I345e48aae0fbb3c28c2f2c0dc035e6b0fa70df43
(cherry picked from commit
7b097e2e3d9dd9444916ddf77d75ca394e6b753e)