diff options
author | Vladimir Chtchetkine <vchtchetkine@google.com> | 2012-05-15 09:01:52 -0700 |
---|---|---|
committer | Vladimir Chtchetkine <vchtchetkine@google.com> | 2012-05-15 09:01:52 -0700 |
commit | 1129b0b97f1c204bd86ee6d19cbf3b4c2275762b (patch) | |
tree | f3d256baee1cbcde7275f6973bfe9d27b4d034eb /android/multitouch-screen.c | |
parent | 6df71197252e119baccbe4dd060935222af4f8ba (diff) | |
download | external_qemu-1129b0b97f1c204bd86ee6d19cbf3b4c2275762b.zip external_qemu-1129b0b97f1c204bd86ee6d19cbf3b4c2275762b.tar.gz external_qemu-1129b0b97f1c204bd86ee6d19cbf3b4c2275762b.tar.bz2 |
Improve FB update protocol.
As it turned out, emulator has been sending Fb updates faster than MT handler on the
device could process them. This lead to significant screen lag between the emulator
and the device. With this CL emulator will not send FB updates to the device until
the device has fully proccesed the previous FB update.
Change-Id: I9a39e9f358f87d5bd6baaa2617a79e7de59ae99e
Diffstat (limited to 'android/multitouch-screen.c')
-rw-r--r-- | android/multitouch-screen.c | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/android/multitouch-screen.c b/android/multitouch-screen.c index 155218a..36f937d 100644 --- a/android/multitouch-screen.c +++ b/android/multitouch-screen.c @@ -252,16 +252,15 @@ _on_fb_sent(void* opaque, SDKCtlDirectPacket* packet, AsyncIOState status) if (status == ASIO_STATE_SUCCEEDED) { /* Lets see if we have accumulated more changes while transmission has been * in progress. */ - if (mts_state->fb_header.w && mts_state->fb_header.h) { + if (mts_state->fb_header.w && mts_state->fb_header.h && + !mts_state->fb_transfer_in_progress) { + mts_state->fb_transfer_in_progress = 1; /* Send accumulated updates. */ if (mts_port_send_frame(mts_state->mtsp, &mts_state->fb_header, mts_state->current_fb, _on_fb_sent, mts_state, mts_state->ydir)) { mts_state->fb_transfer_in_progress = 0; } - } else { - /* Framebuffer transfer is completed, and no more updates are pending. */ - mts_state->fb_transfer_in_progress = 0; } } @@ -376,7 +375,8 @@ multitouch_opengles_fb_update(void* context, _mt_fb_common_update(mts_state, 0, 0, w, h); } -void multitouch_refresh_screen(void) +void +multitouch_refresh_screen(void) { MTSState* const mts_state = &_MTSState; @@ -393,6 +393,27 @@ void multitouch_refresh_screen(void) } void +multitouch_fb_updated(void) +{ + MTSState* const mts_state = &_MTSState; + + /* This concludes framebuffer update. */ + mts_state->fb_transfer_in_progress = 0; + + /* Lets see if we have accumulated more changes while transmission has been + * in progress. */ + if (mts_state->fb_header.w && mts_state->fb_header.h) { + mts_state->fb_transfer_in_progress = 1; + /* Send accumulated updates. */ + if (mts_port_send_frame(mts_state->mtsp, &mts_state->fb_header, + mts_state->current_fb, _on_fb_sent, mts_state, + mts_state->ydir)) { + mts_state->fb_transfer_in_progress = 0; + } + } +} + +void multitouch_init(AndroidMTSPort* mtsp) { if (!_is_mt_initialized) { |