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

Commit 615e3913 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Disable ignored consumers."

parents 31661dfe 0c6b7ffe
Loading
Loading
Loading
Loading
+0 −5
Original line number Diff line number Diff line
@@ -174,10 +174,5 @@ int ConsumerBuffer::ReleaseAsync(const DvrNativeBufferMetadata* meta,

int ConsumerBuffer::Discard() { return Release(LocalHandle()); }

int ConsumerBuffer::SetIgnore(bool ignore) {
  return ReturnStatusOrError(
      InvokeRemoteMethod<BufferHubRPC::ConsumerSetIgnore>(ignore));
}

}  // namespace dvr
}  // namespace android
+0 −2
Original line number Diff line number Diff line
@@ -314,7 +314,6 @@ struct BufferHubRPC {
    kOpProducerGain,
    kOpConsumerAcquire,
    kOpConsumerRelease,
    kOpConsumerSetIgnore,
    kOpProducerBufferDetach,
    kOpConsumerBufferDetach,
    kOpDetachedBufferCreate,
@@ -348,7 +347,6 @@ struct BufferHubRPC {
  PDX_REMOTE_METHOD(ConsumerAcquire, kOpConsumerAcquire, LocalFence(Void));
  PDX_REMOTE_METHOD(ConsumerRelease, kOpConsumerRelease,
                    void(LocalFence release_fence));
  PDX_REMOTE_METHOD(ConsumerSetIgnore, kOpConsumerSetIgnore, void(bool ignore));
  PDX_REMOTE_METHOD(ProducerBufferDetach, kOpProducerBufferDetach,
                    LocalChannelHandle(Void));

+0 −7
Original line number Diff line number Diff line
@@ -76,13 +76,6 @@ class ConsumerBuffer : public pdx::ClientBase<ConsumerBuffer, BufferHubBase> {
  // negative unix error code.
  int Discard();

  // When set, this consumer is no longer notified when this buffer is
  // available. The system behaves as if Discard() is immediately called
  // whenever the buffer is posted. If ignore is set to true while a buffer is
  // pending, it will act as if Discard() was also called.
  // This returns zero or a negative unix error code.
  int SetIgnore(bool ignore);

 private:
  friend BASE;

+8 −40
Original line number Diff line number Diff line
@@ -90,11 +90,6 @@ bool ConsumerChannel::HandleMessage(Message& message) {
          *this, &ConsumerChannel::OnConsumerRelease, message);
      return true;

    case BufferHubRPC::ConsumerSetIgnore::Opcode:
      DispatchRemoteMethod<BufferHubRPC::ConsumerSetIgnore>(
          *this, &ConsumerChannel::OnConsumerSetIgnore, message);
      return true;

    default:
      return false;
  }
@@ -120,9 +115,8 @@ Status<LocalFence> ConsumerChannel::OnConsumerAcquire(Message& message) {
  if (acquired_ || released_) {
    ALOGE(
        "ConsumerChannel::OnConsumerAcquire: Acquire when not posted: "
        "ignored=%d acquired=%d released=%d channel_id=%d buffer_id=%d",
        ignored_, acquired_, released_, message.GetChannelId(),
        producer->buffer_id());
        "acquired=%d released=%d channel_id=%d buffer_id=%d",
        acquired_, released_, message.GetChannelId(), producer->buffer_id());
    return ErrorStatus(EBUSY);
  } else {
    auto status = producer->OnConsumerAcquire(message);
@@ -144,9 +138,8 @@ Status<void> ConsumerChannel::OnConsumerRelease(Message& message,
  if (!acquired_ || released_) {
    ALOGE(
        "ConsumerChannel::OnConsumerRelease: Release when not acquired: "
        "ignored=%d acquired=%d released=%d channel_id=%d buffer_id=%d",
        ignored_, acquired_, released_, message.GetChannelId(),
        producer->buffer_id());
        "acquired=%d released=%d channel_id=%d buffer_id=%d",
        acquired_, released_, message.GetChannelId(), producer->buffer_id());
    return ErrorStatus(EBUSY);
  } else {
    auto status =
@@ -160,37 +153,12 @@ Status<void> ConsumerChannel::OnConsumerRelease(Message& message,
  }
}

Status<void> ConsumerChannel::OnConsumerSetIgnore(Message&, bool ignored) {
  ATRACE_NAME("ConsumerChannel::OnConsumerSetIgnore");
  auto producer = GetProducer();
  if (!producer)
    return ErrorStatus(EPIPE);

  ignored_ = ignored;
  if (ignored_ && acquired_) {
    // Update the producer if ignore is set after the consumer acquires the
    // buffer.
    ClearAvailable();
    producer->OnConsumerIgnored();
    acquired_ = false;
    released_ = true;
  }

  return {};
}

bool ConsumerChannel::OnProducerPosted() {
  if (ignored_) {
    acquired_ = false;
    released_ = true;
    return false;
  } else {
  acquired_ = false;
  released_ = false;
  SignalAvailable();
  return true;
}
}

void ConsumerChannel::OnProducerClosed() {
  producer_.reset();
+0 −2
Original line number Diff line number Diff line
@@ -37,12 +37,10 @@ class ConsumerChannel : public BufferHubChannel {
  pdx::Status<LocalFence> OnConsumerAcquire(Message& message);
  pdx::Status<void> OnConsumerRelease(Message& message,
                                      LocalFence release_fence);
  pdx::Status<void> OnConsumerSetIgnore(Message& message, bool ignore);

  uint64_t consumer_state_bit_{0};
  bool acquired_{false};
  bool released_{true};
  bool ignored_{false};  // True if we are ignoring events.
  std::weak_ptr<Channel> producer_;

  ConsumerChannel(const ConsumerChannel&) = delete;
Loading