fix an issue with vsync event delivery
vsync events were sometimes delivered to connected client who didn't request them. this happened if another client requested the delivery and that client was first in the client list. also fix the vsync test which didn't request any events as well as DisplayEventReveiver documentation which was misleading about the necessity to request vsync events. Change-Id: Ie990fda3f337f8f0042745c4b2cde67936c45686
This commit is contained in:
parent
4fb3e778ed
commit
3cf199aef6
@ -63,7 +63,9 @@ public:
|
||||
public:
|
||||
/*
|
||||
* DisplayEventReceiver creates and registers an event connection with
|
||||
* SurfaceFlinger. Events start being delivered immediately.
|
||||
* SurfaceFlinger. VSync events are disabled by default. Call setVSyncRate
|
||||
* or requestNextVsync to receive them.
|
||||
* Other events start being delivered immediately.
|
||||
*/
|
||||
DisplayEventReceiver();
|
||||
|
||||
|
@ -151,9 +151,9 @@ bool EventThread::threadLoop() {
|
||||
mLastVSyncTimestamp = timestamp;
|
||||
|
||||
// now see if we still need to report this VSYNC event
|
||||
bool reportVsync = false;
|
||||
size_t count = mDisplayEventConnections.size();
|
||||
const size_t count = mDisplayEventConnections.size();
|
||||
for (size_t i=0 ; i<count ; i++) {
|
||||
bool reportVsync = false;
|
||||
const ConnectionInfo& info(
|
||||
mDisplayEventConnections.valueAt(i));
|
||||
if (info.count >= 1) {
|
||||
@ -174,11 +174,7 @@ bool EventThread::threadLoop() {
|
||||
displayEventConnections.add(mDisplayEventConnections.keyAt(i));
|
||||
}
|
||||
}
|
||||
|
||||
if (reportVsync) {
|
||||
break;
|
||||
}
|
||||
} while (true);
|
||||
} while (!displayEventConnections.size());
|
||||
|
||||
// dispatch vsync events to listeners...
|
||||
vsync.header.type = DisplayEventReceiver::DISPLAY_EVENT_VSYNC;
|
||||
|
@ -55,6 +55,8 @@ int main(int argc, char** argv)
|
||||
loop->addFd(myDisplayEvent.getFd(), 0, ALOOPER_EVENT_INPUT, receiver,
|
||||
&myDisplayEvent);
|
||||
|
||||
myDisplayEvent.setVsyncRate(1);
|
||||
|
||||
do {
|
||||
//printf("about to poll...\n");
|
||||
int32_t ret = loop->pollOnce(-1);
|
||||
|
Loading…
Reference in New Issue
Block a user