Merge changes from topic "sf-re-2"
* changes:
libgui: add a helper for GLConsumer::getCurrentCrop
libgui: use mat4 in GLConsumer
libgui: remove unused GLConsumer methods
libgui: add more IGBC wrappers to ConsumerBase
libgui: tidy up CpuConsumer
libgui: fix and clean up CpuConsumer::unlockBuffer
libgui: fix a race in CpuConsumer::lockNextBuffer
libgui: add helper to initialize CpuConsumer::LockedBuffer
libgui: add helper to find CpuConsumer::AcquiredBuffer
diff --git a/libs/gui/FrameTimestamps.cpp b/libs/gui/FrameTimestamps.cpp
index fccca97..a379ad6 100644
--- a/libs/gui/FrameTimestamps.cpp
+++ b/libs/gui/FrameTimestamps.cpp
@@ -628,7 +628,6 @@
ALOGE("FrameEventHistoryDelta assign clobbering history.");
}
mDeltas = std::move(src.mDeltas);
- ALOGE_IF(src.mDeltas.empty(), "Source mDeltas not empty.");
return *this;
}
diff --git a/libs/vr/libbufferhubqueue/buffer_hub_queue_client.cpp b/libs/vr/libbufferhubqueue/buffer_hub_queue_client.cpp
index a5cefd9..c75c67f 100644
--- a/libs/vr/libbufferhubqueue/buffer_hub_queue_client.cpp
+++ b/libs/vr/libbufferhubqueue/buffer_hub_queue_client.cpp
@@ -31,20 +31,6 @@
namespace {
-// Polls an fd for the given events.
-Status<int> PollEvents(int fd, short events) {
- const int kTimeoutMs = 0;
- pollfd pfd{fd, events, 0};
- const int count = RETRY_EINTR(poll(&pfd, 1, kTimeoutMs));
- if (count < 0) {
- return ErrorStatus(errno);
- } else if (count == 0) {
- return ErrorStatus(ETIMEDOUT);
- } else {
- return {pfd.revents};
- }
-}
-
std::pair<int32_t, int32_t> Unstuff(uint64_t value) {
return {static_cast<int32_t>(value >> 32),
static_cast<int32_t>(value & ((1ull << 32) - 1))};
@@ -670,27 +656,7 @@
const std::shared_ptr<BufferConsumer>& buffer, size_t slot) {
ALOGD_IF(TRACE, "ConsumerQueue::AddBuffer: queue_id=%d buffer_id=%d slot=%zu",
id(), buffer->id(), slot);
- auto status = BufferHubQueue::AddBuffer(buffer, slot);
- if (!status)
- return status;
-
- // Check to see if the buffer is already signaled. This is necessary to catch
- // cases where buffers are already available; epoll edge triggered mode does
- // not fire until an edge transition when adding new buffers to the epoll
- // set. Note that we only poll the fd events because HandleBufferEvent() takes
- // care of checking the translated buffer events.
- auto poll_status = PollEvents(buffer->event_fd(), POLLIN);
- if (!poll_status && poll_status.error() != ETIMEDOUT) {
- ALOGE("ConsumerQueue::AddBuffer: Failed to poll consumer buffer: %s",
- poll_status.GetErrorMessage().c_str());
- return poll_status.error_status();
- }
-
- // Update accounting if the buffer is available.
- if (poll_status)
- return HandleBufferEvent(slot, buffer->event_fd(), poll_status.get());
- else
- return {};
+ return BufferHubQueue::AddBuffer(buffer, slot);
}
Status<std::shared_ptr<BufferConsumer>> ConsumerQueue::Dequeue(
diff --git a/libs/vr/libbufferhubqueue/tests/buffer_hub_queue-test.cpp b/libs/vr/libbufferhubqueue/tests/buffer_hub_queue-test.cpp
index 3efa723..47a2734 100644
--- a/libs/vr/libbufferhubqueue/tests/buffer_hub_queue-test.cpp
+++ b/libs/vr/libbufferhubqueue/tests/buffer_hub_queue-test.cpp
@@ -329,7 +329,9 @@
// Check that buffers are correctly imported on construction.
EXPECT_EQ(consumer_queue_->capacity(), kBufferCount);
- EXPECT_EQ(consumer_queue_->count(), 1U);
+ // Buffers are only imported, but their availability is not checked until
+ // first call to Dequeue().
+ EXPECT_EQ(consumer_queue_->count(), 0U);
// Reclaim released/ignored buffers.
EXPECT_EQ(producer_queue_->count(), kBufferCount - 1);
diff --git a/services/surfaceflinger/BufferLayer.cpp b/services/surfaceflinger/BufferLayer.cpp
index e8f4150..7d9d4f6 100644
--- a/services/surfaceflinger/BufferLayer.cpp
+++ b/services/surfaceflinger/BufferLayer.cpp
@@ -75,17 +75,6 @@
}
BufferLayer::~BufferLayer() {
- sp<Client> c(mClientRef.promote());
- if (c != 0) {
- c->detachLayer(this);
- }
-
- for (auto& point : mRemoteSyncPoints) {
- point->setTransactionApplied();
- }
- for (auto& point : mLocalSyncPoints) {
- point->setFrameAvailable();
- }
mFlinger->deleteTextureAsync(mTextureName);
if (!getBE().mHwcLayers.empty()) {
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp
index fa4d289..13df1e2 100644
--- a/services/surfaceflinger/Layer.cpp
+++ b/services/surfaceflinger/Layer.cpp
@@ -142,6 +142,17 @@
void Layer::onFirstRef() {}
Layer::~Layer() {
+ sp<Client> c(mClientRef.promote());
+ if (c != 0) {
+ c->detachLayer(this);
+ }
+
+ for (auto& point : mRemoteSyncPoints) {
+ point->setTransactionApplied();
+ }
+ for (auto& point : mLocalSyncPoints) {
+ point->setFrameAvailable();
+ }
mFrameTracker.logAndResetStats(mName);
}