summaryrefslogtreecommitdiff
path: root/libs/gui/BitTube.cpp
diff options
context:
space:
mode:
authorAlec Mouri <alecmouri@google.com>2020-08-05 12:50:03 -0700
committerAlec Mouri <alecmouri@google.com>2020-08-07 11:37:12 -0700
commit967d5d73fb9647846b14e3e442c374361cf99b68 (patch)
tree0d14becf2f12be5df17f023c74aef3bdcd25c840 /libs/gui/BitTube.cpp
parent6e56a84464eafee774da383f45679584ab053bf8 (diff)
downloadnative-967d5d73fb9647846b14e3e442c374361cf99b68.tar.gz
Fix refresh rate callback fan-out for choreographer
* AChoreographer receives refresh rates from DisplayManager already, so there's no need to default-enable them - AChoreographer only needs to pump an event with the latest refresh rate to wake up looper. This also ensures that AChoreographer's callbacks are entirely in-sync with DisplayManager since there's no raciness. * Instead of re-requesting a config change from SF, instead inject it in AChoreographer correctly to save on binder. Bug: 154874011 Bug: 158680912 Bug: 161406626 Test: while [ true ]; do adb shell service call SurfaceFlinger 1035 i32 1; adb shell service call SurfaceFlinger 1035 i32 0; and repeatedly rotate the home screen with auto-rotate off. Change-Id: I66abc2e28e60f06987ce3a54be294c94b77524fc
Diffstat (limited to 'libs/gui/BitTube.cpp')
-rw-r--r--libs/gui/BitTube.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/libs/gui/BitTube.cpp b/libs/gui/BitTube.cpp
index ef7a6f54d9..351af652e2 100644
--- a/libs/gui/BitTube.cpp
+++ b/libs/gui/BitTube.cpp
@@ -86,6 +86,10 @@ void BitTube::setReceiveFd(base::unique_fd&& receiveFd) {
mReceiveFd = std::move(receiveFd);
}
+void BitTube::setSendFd(base::unique_fd&& sendFd) {
+ mSendFd = std::move(sendFd);
+}
+
ssize_t BitTube::write(void const* vaddr, size_t size) {
ssize_t err, len;
do {
@@ -115,6 +119,11 @@ status_t BitTube::writeToParcel(Parcel* reply) const {
status_t result = reply->writeDupFileDescriptor(mReceiveFd);
mReceiveFd.reset();
+ if (result != NO_ERROR) {
+ return result;
+ }
+ result = reply->writeDupFileDescriptor(mSendFd);
+ mSendFd.reset();
return result;
}
@@ -126,6 +135,13 @@ status_t BitTube::readFromParcel(const Parcel* parcel) {
ALOGE("BitTube::readFromParcel: can't dup file descriptor (%s)", strerror(error));
return -error;
}
+ mSendFd.reset(dup(parcel->readFileDescriptor()));
+ if (mSendFd < 0) {
+ mSendFd.reset();
+ int error = errno;
+ ALOGE("BitTube::readFromParcel: can't dup file descriptor (%s)", strerror(error));
+ return -error;
+ }
return NO_ERROR;
}