diff options
| author | Lingfeng Yang <lfy@google.com> | 2020-05-29 18:45:54 -0700 |
|---|---|---|
| committer | Lingfeng Yang <lfy@google.com> | 2020-05-30 01:47:08 +0000 |
| commit | ce8c0591be4b1b5d0b30b9ea71357556c2d117c2 (patch) | |
| tree | bfba27118bd578544691c9e1582daa1a8adb994e | |
| parent | 6a2544969bfdb0e72aa9f70678ab4287e3ae4785 (diff) | |
| download | device_generic_goldfish-opengl-ce8c0591be4b1b5d0b30b9ea71357556c2d117c2.tar.gz device_generic_goldfish-opengl-ce8c0591be4b1b5d0b30b9ea71357556c2d117c2.tar.bz2 device_generic_goldfish-opengl-ce8c0591be4b1b5d0b30b9ea71357556c2d117c2.zip | |
asg: add a backoff to the guest
if the host is slow lets wait for it, don't priority invert
Change-Id: If680b01098c7f3918fa9dbcf6b0683ec49bbc888
| -rw-r--r-- | system/OpenglSystemCommon/AddressSpaceStream.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/system/OpenglSystemCommon/AddressSpaceStream.cpp b/system/OpenglSystemCommon/AddressSpaceStream.cpp index ce7c7209..7c0f1546 100644 --- a/system/OpenglSystemCommon/AddressSpaceStream.cpp +++ b/system/OpenglSystemCommon/AddressSpaceStream.cpp @@ -388,7 +388,12 @@ ssize_t AddressSpaceStream::speculativeRead(unsigned char* readBuffer, size_t tr ensureType1Finished(); size_t actuallyRead = 0; + size_t readIters = 0; + size_t backedOffIters = 0; + const size_t kSpeculativeReadBackoffIters = 10000000ULL; while (!actuallyRead) { + ++readIters; + uint32_t readAvail = ring_buffer_available_read( m_context.from_host_large_xfer.ring, @@ -399,6 +404,11 @@ ssize_t AddressSpaceStream::speculativeRead(unsigned char* readBuffer, size_t tr continue; } + if (readAvail && readIters > kSpeculativeReadBackoffIters) { + usleep(10); + ++backedOffIters; + } + uint32_t toRead = readAvail > trySize ? trySize : readAvail; long stepsRead = ring_buffer_view_read( @@ -413,6 +423,12 @@ ssize_t AddressSpaceStream::speculativeRead(unsigned char* readBuffer, size_t tr } } + if (backedOffIters > 0) { + ALOGE("%s: warning: backed off %zu times due to host slowness.\n", + __func__, + backedOffIters); + } + return actuallyRead; } |
