Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e3dde7a1 authored by Jiwen Cai's avatar Jiwen Cai Committed by Android (Google) Code Review
Browse files

Merge "Remove GraphicBuffer accessor from DetachedBuffer"

parents b4bf531c fd595873
Loading
Loading
Loading
Loading
+0 −40
Original line number Diff line number Diff line
@@ -795,8 +795,6 @@ TEST_F(LibBufferHubTest, TestDetachBufferFromProducer) {
  EXPECT_TRUE(d->IsConnected());
  EXPECT_TRUE(d->IsValid());

  ASSERT_TRUE(d->buffer() != nullptr);
  EXPECT_EQ(d->buffer()->initCheck(), 0);
  EXPECT_EQ(d->id(), p_id);
}

@@ -808,7 +806,6 @@ TEST_F(LibBufferHubTest, TestCreateDetachedBufferFails) {

  EXPECT_FALSE(b1->IsConnected());
  EXPECT_FALSE(b1->IsValid());
  EXPECT_TRUE(b1->buffer() == nullptr);

  // Buffer Creation will fail: user metadata size too large.
  auto b2 = DetachedBuffer::Create(
@@ -817,7 +814,6 @@ TEST_F(LibBufferHubTest, TestCreateDetachedBufferFails) {

  EXPECT_FALSE(b2->IsConnected());
  EXPECT_FALSE(b2->IsValid());
  EXPECT_TRUE(b2->buffer() == nullptr);

  // Buffer Creation will fail: user metadata size too large.
  auto b3 = DetachedBuffer::Create(
@@ -827,50 +823,14 @@ TEST_F(LibBufferHubTest, TestCreateDetachedBufferFails) {

  EXPECT_FALSE(b3->IsConnected());
  EXPECT_FALSE(b3->IsValid());
  EXPECT_TRUE(b3->buffer() == nullptr);
}

TEST_F(LibBufferHubTest, TestCreateDetachedBuffer) {
  auto b1 = DetachedBuffer::Create(kWidth, kHeight, kLayerCount, kFormat,
                                   kUsage, kUserMetadataSize);
  int b1_id = b1->id();

  EXPECT_TRUE(b1->IsConnected());
  EXPECT_TRUE(b1->IsValid());
  ASSERT_TRUE(b1->buffer() != nullptr);
  EXPECT_NE(b1->id(), 0);
  EXPECT_EQ(b1->buffer()->initCheck(), 0);
  EXPECT_FALSE(b1->buffer()->isDetachedBuffer());

  // Takes a standalone GraphicBuffer which still holds on an
  // PDX::LocalChannelHandle towards BufferHub.
  sp<GraphicBuffer> g1 = b1->TakeGraphicBuffer();
  ASSERT_TRUE(g1 != nullptr);
  EXPECT_TRUE(g1->isDetachedBuffer());

  EXPECT_FALSE(b1->IsConnected());
  EXPECT_FALSE(b1->IsValid());
  EXPECT_TRUE(b1->buffer() == nullptr);

  sp<GraphicBuffer> g2 = b1->TakeGraphicBuffer();
  ASSERT_TRUE(g2 == nullptr);

  auto h1 = g1->takeDetachedBufferHandle();
  ASSERT_TRUE(h1 != nullptr);
  ASSERT_TRUE(h1->isValid());
  EXPECT_FALSE(g1->isDetachedBuffer());

  auto b2 = DetachedBuffer::Import(std::move(h1->handle()));
  ASSERT_FALSE(h1->isValid());
  EXPECT_TRUE(b2->IsConnected());
  EXPECT_TRUE(b2->IsValid());

  ASSERT_TRUE(b2->buffer() != nullptr);
  EXPECT_EQ(b2->buffer()->initCheck(), 0);

  // The newly created DetachedBuffer should share the original buffer_id.
  EXPECT_EQ(b2->id(), b1_id);
  EXPECT_FALSE(b2->buffer()->isDetachedBuffer());
}

TEST_F(LibBufferHubTest, TestPromoteDetachedBuffer) {
+0 −17
Original line number Diff line number Diff line
@@ -162,22 +162,5 @@ Status<LocalChannelHandle> DetachedBuffer::Duplicate() {
  return status_or_handle;
}

sp<GraphicBuffer> DetachedBuffer::TakeGraphicBuffer() {
  if (!client_.IsValid() || !buffer_.buffer()) {
    ALOGE("DetachedBuffer::TakeGraphicBuffer: Invalid buffer.");
    return nullptr;
  }

  // Technically this should never happen.
  LOG_FATAL_IF(
      buffer_.buffer()->isDetachedBuffer(),
      "DetachedBuffer::TakeGraphicBuffer: GraphicBuffer is already detached.");

  sp<GraphicBuffer> buffer = std::move(buffer_.buffer());
  buffer->setDetachedBufferHandle(
      DetachedBufferHandle::Create(client_.TakeChannelHandle()));
  return buffer;
}

}  // namespace dvr
}  // namespace android
+0 −7
Original line number Diff line number Diff line
@@ -28,8 +28,6 @@ class DetachedBuffer {
  DetachedBuffer(const DetachedBuffer&) = delete;
  void operator=(const DetachedBuffer&) = delete;

  const sp<GraphicBuffer>& buffer() const { return buffer_.buffer(); }

  // Gets ID of the buffer client. All DetachedBuffer clients derived from the
  // same buffer in bufferhubd share the same buffer id.
  int id() const { return id_; }
@@ -69,11 +67,6 @@ class DetachedBuffer {
  // Creates a DetachedBuffer from an existing one.
  pdx::Status<pdx::LocalChannelHandle> Duplicate();

  // Takes the underlying graphic buffer out of this DetachedBuffer. This call
  // immediately invalidates this DetachedBuffer object and transfers the
  // underlying pdx::LocalChannelHandle into the GraphicBuffer.
  sp<GraphicBuffer> TakeGraphicBuffer();

 private:
  DetachedBuffer(uint32_t width, uint32_t height, uint32_t layer_count,
                 uint32_t format, uint64_t usage, size_t user_metadata_size);