OSDN Git Service

Merge fences when needed for accurate timestamps.
authorBrian Anderson <brianderson@google.com>
Tue, 8 Aug 2017 23:31:37 +0000 (16:31 -0700)
committerDan Stoza <stoza@google.com>
Wed, 30 Aug 2017 19:51:04 +0000 (19:51 +0000)
commitbc52c7039cc89e5cb14a8ee48fabfc70a96c0c89
treee4e0cbd952e92b1469de65faec3534153ae10dff
parent3c18afcb3f1090af7d70b5ada8f66682c5838d48
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)
libs/gui/ConsumerBase.cpp