Deprecate producer/consumer usage: Step 2
Clean up bufferhub_rpc, display_rpc and service side producer/consumer
usage reference.
Next (final) step is to remove all remaining client side reference to
producer/consumer usage and update dvr_xxx API.
This also fixes a minor typo in dvr_named_buffer-test
Bug: 37881101
Test: Build, flash, ran particles.apk and buffer_hub_queue-test
Change-Id: Ibae4376c1fd1ed964843d8b2ad2fb27204fe5e28
diff --git a/services/vr/bufferhubd/buffer_hub.cpp b/services/vr/bufferhubd/buffer_hub.cpp
index 4b1a522..8093b6b 100644
--- a/services/vr/bufferhubd/buffer_hub.cpp
+++ b/services/vr/bufferhubd/buffer_hub.cpp
@@ -53,7 +53,7 @@
stream << " ";
stream << std::setw(6) << "Format";
stream << " ";
- stream << std::setw(21) << "Usage";
+ stream << std::setw(11) << "Usage";
stream << " ";
stream << "Name";
stream << std::endl;
@@ -80,9 +80,7 @@
stream << std::setw(6) << info.format;
stream << " ";
stream << "0x" << std::hex << std::setfill('0');
- stream << std::setw(8) << info.producer_usage;
- stream << "0x";
- stream << std::setw(8) << info.consumer_usage;
+ stream << std::setw(8) << info.usage;
stream << std::dec << std::setfill(' ');
stream << " ";
stream << info.name;
@@ -140,10 +138,6 @@
stream << " UsageClearMask";
stream << " UsageDenySetMask";
stream << " UsageDenyClearMask";
- stream << " UsageSetMask";
- stream << " UsageClearMask";
- stream << " UsageDenySetMask";
- stream << " UsageDenyClearMask";
stream << " ";
stream << std::endl;
@@ -157,28 +151,16 @@
stream << std::right << std::setw(12) << info.consumer_count;
stream << std::setw(5) << std::setfill(' ') << "0x";
stream << std::hex << std::setfill('0');
- stream << std::setw(8) << info.usage_policy.producer_set_mask;
+ stream << std::setw(8) << info.usage_policy.usage_set_mask;
stream << std::setw(7) << std::setfill(' ') << "0x";
stream << std::hex << std::setfill('0');
- stream << std::setw(8) << info.usage_policy.producer_clear_mask;
+ stream << std::setw(8) << info.usage_policy.usage_clear_mask;
stream << std::setw(9) << std::setfill(' ') << "0x";
stream << std::hex << std::setfill('0');
- stream << std::setw(8) << info.usage_policy.producer_deny_set_mask;
+ stream << std::setw(8) << info.usage_policy.usage_deny_set_mask;
stream << std::setw(11) << std::setfill(' ') << "0x";
stream << std::hex << std::setfill('0');
- stream << std::setw(8) << info.usage_policy.producer_deny_clear_mask;
- stream << std::setw(5) << std::setfill(' ') << "0x";
- stream << std::hex << std::setfill('0');
- stream << std::setw(8) << info.usage_policy.consumer_set_mask;
- stream << std::setw(7) << std::setfill(' ') << "0x";
- stream << std::hex << std::setfill('0');
- stream << std::setw(8) << info.usage_policy.consumer_clear_mask;
- stream << std::setw(9) << std::setfill(' ') << "0x";
- stream << std::hex << std::setfill('0');
- stream << std::setw(8) << info.usage_policy.consumer_deny_set_mask;
- stream << std::setw(11) << std::setfill(' ') << "0x";
- stream << std::hex << std::setfill('0');
- stream << std::setw(8) << info.usage_policy.consumer_deny_clear_mask;
+ stream << std::setw(8) << info.usage_policy.usage_deny_clear_mask;
stream << std::hex << std::setfill('0');
stream << std::endl;
}
@@ -259,18 +241,16 @@
Status<void> BufferHubService::OnCreateBuffer(Message& message, uint32_t width,
uint32_t height, uint32_t format,
- uint64_t producer_usage,
- uint64_t consumer_usage,
+ uint64_t usage,
size_t meta_size_bytes,
size_t slice_count) {
// Use the producer channel id as the global buffer id.
const int buffer_id = message.GetChannelId();
ALOGD_IF(TRACE,
"BufferHubService::OnCreateBuffer: buffer_id=%d width=%u height=%u "
- "format=%u producer_usage=%" PRIx64 " consumer_usage=%" PRIx64
- " meta_size_bytes=%zu slice_count=%zu",
- buffer_id, width, height, format, producer_usage, consumer_usage,
- meta_size_bytes, slice_count);
+ "format=%u usage=%" PRIx64 " meta_size_bytes=%zu slice_count=%zu",
+ buffer_id, width, height, format, usage, meta_size_bytes,
+ slice_count);
// See if this channel is already attached to a buffer.
if (const auto channel = message.GetChannel<BufferHubChannel>()) {
@@ -280,8 +260,7 @@
}
auto status = ProducerChannel::Create(this, buffer_id, width, height, format,
- producer_usage, consumer_usage,
- meta_size_bytes, slice_count);
+ usage, meta_size_bytes, slice_count);
if (status) {
message.SetChannel(status.take());
return {};
@@ -294,16 +273,15 @@
Status<void> BufferHubService::OnCreatePersistentBuffer(
Message& message, const std::string& name, int user_id, int group_id,
- uint32_t width, uint32_t height, uint32_t format, uint64_t producer_usage,
- uint64_t consumer_usage, size_t meta_size_bytes, size_t slice_count) {
+ uint32_t width, uint32_t height, uint32_t format, uint64_t usage,
+ size_t meta_size_bytes, size_t slice_count) {
const int channel_id = message.GetChannelId();
ALOGD_IF(TRACE,
"BufferHubService::OnCreatePersistentBuffer: channel_id=%d name=%s "
"user_id=%d group_id=%d width=%u height=%u format=%u "
- "producer_usage=%" PRIx64 " consumer_usage=%" PRIx64
- " meta_size_bytes=%zu slice_count=%zu",
+ "usage=%" PRIx64 " meta_size_bytes=%zu slice_count=%zu",
channel_id, name.c_str(), user_id, group_id, width, height, format,
- producer_usage, consumer_usage, meta_size_bytes, slice_count);
+ usage, meta_size_bytes, slice_count);
// See if this channel is already attached to a buffer.
if (const auto channel = message.GetChannel<BufferHubChannel>()) {
@@ -324,9 +302,8 @@
"not have permission to access named buffer: name=%s euid=%d egid=%d",
name.c_str(), euid, euid);
return ErrorStatus(EPERM);
- } else if (!buffer->CheckParameters(width, height, format, producer_usage,
- consumer_usage, meta_size_bytes,
- slice_count)) {
+ } else if (!buffer->CheckParameters(width, height, format, usage,
+ meta_size_bytes, slice_count)) {
ALOGE(
"BufferHubService::OnCreatePersistentBuffer: Requested an existing "
"buffer with different parameters: name=%s",
@@ -344,9 +321,9 @@
return {};
}
} else {
- auto status = ProducerChannel::Create(
- this, channel_id, width, height, format, producer_usage, consumer_usage,
- meta_size_bytes, slice_count);
+ auto status =
+ ProducerChannel::Create(this, channel_id, width, height, format, usage,
+ meta_size_bytes, slice_count);
if (!status) {
ALOGE("BufferHubService::OnCreateBuffer: Failed to create producer!!");
return status.error_status();
diff --git a/services/vr/bufferhubd/buffer_hub.h b/services/vr/bufferhubd/buffer_hub.h
index 4cb1eb9..817b01e 100644
--- a/services/vr/bufferhubd/buffer_hub.h
+++ b/services/vr/bufferhubd/buffer_hub.h
@@ -51,18 +51,16 @@
uint32_t width = 0;
uint32_t height = 0;
uint32_t format = 0;
- uint64_t producer_usage = 0;
- uint64_t consumer_usage = 0;
+ uint64_t usage = 0;
size_t slice_count = 0;
std::string name;
// Data filed for producer queue.
size_t capacity = 0;
- UsagePolicy usage_policy{0, 0, 0, 0, 0, 0, 0, 0};
+ UsagePolicy usage_policy{0, 0, 0, 0};
BufferInfo(int id, size_t consumer_count, uint32_t width, uint32_t height,
- uint32_t format, uint64_t producer_usage,
- uint64_t consumer_usage, size_t slice_count,
+ uint32_t format, uint64_t usage, size_t slice_count,
const std::string& name)
: id(id),
type(kProducerType),
@@ -70,8 +68,7 @@
width(width),
height(height),
format(format),
- producer_usage(producer_usage),
- consumer_usage(consumer_usage),
+ usage(usage),
slice_count(slice_count),
name(name) {}
@@ -159,16 +156,16 @@
std::unordered_map<std::string, std::shared_ptr<ProducerChannel>>
named_buffers_;
- pdx::Status<void> OnCreateBuffer(pdx::Message& message, uint32_t width, uint32_t height,
- uint32_t format, uint64_t producer_usage,
- uint64_t consumer_usage, size_t meta_size_bytes,
- size_t slice_count);
- pdx::Status<void> OnCreatePersistentBuffer(pdx::Message& message, const std::string& name,
- int user_id, int group_id, uint32_t width,
- uint32_t height, uint32_t format,
- uint64_t producer_usage, uint64_t consumer_usage,
- size_t meta_size_bytes, size_t slice_count);
- pdx::Status<void> OnGetPersistentBuffer(pdx::Message& message, const std::string& name);
+ pdx::Status<void> OnCreateBuffer(pdx::Message& message, uint32_t width,
+ uint32_t height, uint32_t format,
+ uint64_t usage, size_t meta_size_bytes,
+ size_t slice_count);
+ pdx::Status<void> OnCreatePersistentBuffer(
+ pdx::Message& message, const std::string& name, int user_id, int group_id,
+ uint32_t width, uint32_t height, uint32_t format, uint64_t usage,
+ size_t meta_size_bytes, size_t slice_count);
+ pdx::Status<void> OnGetPersistentBuffer(pdx::Message& message,
+ const std::string& name);
pdx::Status<QueueInfo> OnCreateProducerQueue(pdx::Message& message,
size_t meta_size_bytes,
const UsagePolicy& usage_policy);
diff --git a/services/vr/bufferhubd/producer_channel.cpp b/services/vr/bufferhubd/producer_channel.cpp
index c4b1319..e452d04 100644
--- a/services/vr/bufferhubd/producer_channel.cpp
+++ b/services/vr/bufferhubd/producer_channel.cpp
@@ -26,8 +26,7 @@
ProducerChannel::ProducerChannel(BufferHubService* service, int channel_id,
uint32_t width, uint32_t height,
- uint32_t format, uint64_t producer_usage,
- uint64_t consumer_usage,
+ uint32_t format, uint64_t usage,
size_t meta_size_bytes, size_t slice_count,
int* error)
: BufferHubChannel(service, channel_id, channel_id, kProducerType),
@@ -37,8 +36,7 @@
meta_size_bytes_(meta_size_bytes),
meta_(meta_size_bytes ? new uint8_t[meta_size_bytes] : nullptr) {
for (auto& ion_buffer : slices_) {
- const int ret = ion_buffer.Alloc(width, height, format,
- (producer_usage | consumer_usage));
+ const int ret = ion_buffer.Alloc(width, height, format, usage);
if (ret < 0) {
ALOGE("ProducerChannel::ProducerChannel: Failed to allocate buffer: %s",
strerror(-ret));
@@ -53,12 +51,12 @@
Status<std::shared_ptr<ProducerChannel>> ProducerChannel::Create(
BufferHubService* service, int channel_id, uint32_t width, uint32_t height,
- uint32_t format, uint64_t producer_usage, uint64_t consumer_usage,
- size_t meta_size_bytes, size_t slice_count) {
+ uint32_t format, uint64_t usage, size_t meta_size_bytes,
+ size_t slice_count) {
int error;
- std::shared_ptr<ProducerChannel> producer(new ProducerChannel(
- service, channel_id, width, height, format, producer_usage,
- consumer_usage, meta_size_bytes, slice_count, &error));
+ std::shared_ptr<ProducerChannel> producer(
+ new ProducerChannel(service, channel_id, width, height, format, usage,
+ meta_size_bytes, slice_count, &error));
if (error < 0)
return ErrorStatus(-error);
else
@@ -76,8 +74,7 @@
BufferHubChannel::BufferInfo ProducerChannel::GetBufferInfo() const {
return BufferInfo(buffer_id(), consumer_channels_.size(), slices_[0].width(),
slices_[0].height(), slices_[0].format(),
- slices_[0].usage(), slices_[0].usage(),
- slices_.size(), name_);
+ slices_[0].usage(), slices_.size(), name_);
}
void ProducerChannel::HandleImpulse(Message& message) {
@@ -369,14 +366,12 @@
// Returns true if the given parameters match the underlying buffer parameters.
bool ProducerChannel::CheckParameters(uint32_t width, uint32_t height,
- uint32_t format, uint64_t producer_usage,
- uint64_t consumer_usage,
+ uint32_t format, uint64_t usage,
size_t meta_size_bytes,
size_t slice_count) {
return slices_.size() == slice_count && meta_size_bytes == meta_size_bytes_ &&
slices_[0].width() == width && slices_[0].height() == height &&
- slices_[0].format() == format &&
- slices_[0].usage() == (producer_usage | consumer_usage);
+ slices_[0].format() == format && slices_[0].usage() == usage;
}
} // namespace dvr
diff --git a/services/vr/bufferhubd/producer_channel.h b/services/vr/bufferhubd/producer_channel.h
index f04c8a5..6de619d 100644
--- a/services/vr/bufferhubd/producer_channel.h
+++ b/services/vr/bufferhubd/producer_channel.h
@@ -32,8 +32,8 @@
static pdx::Status<std::shared_ptr<ProducerChannel>> Create(
BufferHubService* service, int channel_id, uint32_t width,
- uint32_t height, uint32_t format, uint64_t producer_usage,
- uint64_t consumer_usage, size_t meta_size_bytes, size_t slice_count);
+ uint32_t height, uint32_t format, uint64_t usage, size_t meta_size_bytes,
+ size_t slice_count);
~ProducerChannel() override;
@@ -62,8 +62,8 @@
bool CheckAccess(int euid, int egid);
bool CheckParameters(uint32_t width, uint32_t height, uint32_t format,
- uint64_t producer_usage, uint64_t consumer_usage,
- size_t meta_size_bytes, size_t slice_count);
+ uint64_t usage, size_t meta_size_bytes,
+ size_t slice_count);
pdx::Status<void> OnProducerMakePersistent(Message& message,
const std::string& name,
@@ -95,9 +95,8 @@
std::string name_;
ProducerChannel(BufferHubService* service, int channel, uint32_t width,
- uint32_t height, uint32_t format, uint64_t producer_usage,
- uint64_t consumer_usage, size_t meta_size_bytes,
- size_t slice_count, int* error);
+ uint32_t height, uint32_t format, uint64_t usage,
+ size_t meta_size_bytes, size_t slice_count, int* error);
pdx::Status<void> OnProducerPost(
Message& message, LocalFence acquire_fence,
diff --git a/services/vr/bufferhubd/producer_queue_channel.cpp b/services/vr/bufferhubd/producer_queue_channel.cpp
index dc2a47e..bd8eed8 100644
--- a/services/vr/bufferhubd/producer_queue_channel.cpp
+++ b/services/vr/bufferhubd/producer_queue_channel.cpp
@@ -34,19 +34,14 @@
const UsagePolicy& usage_policy) {
// Configuration between |usage_deny_set_mask| and |usage_deny_clear_mask|
// should be mutually exclusive.
- if ((usage_policy.producer_deny_set_mask &
- usage_policy.producer_deny_clear_mask) ||
- (usage_policy.consumer_deny_set_mask &
- usage_policy.consumer_deny_clear_mask)) {
+ if ((usage_policy.usage_deny_set_mask &
+ usage_policy.usage_deny_clear_mask)) {
ALOGE(
"BufferHubService::OnCreateProducerQueue: illegal usage mask "
- "configuration: producer_deny_set_mask=%" PRIx64
- " producer_deny_clear_mask=%" PRIx64 " consumer_deny_set_mask=%" PRIx64
- " consumer_deny_clear_mask=%" PRIx64,
- usage_policy.producer_deny_set_mask,
- usage_policy.producer_deny_clear_mask,
- usage_policy.consumer_deny_set_mask,
- usage_policy.consumer_deny_clear_mask);
+ "configuration: usage_deny_set_mask=%" PRIx64
+ " usage_deny_clear_mask=%" PRIx64,
+ usage_policy.usage_deny_set_mask,
+ usage_policy.usage_deny_clear_mask);
return ErrorStatus(EINVAL);
}
@@ -134,8 +129,7 @@
Status<std::vector<std::pair<RemoteChannelHandle, size_t>>>
ProducerQueueChannel::OnProducerQueueAllocateBuffers(
Message& message, uint32_t width, uint32_t height, uint32_t format,
- uint64_t producer_usage, uint64_t consumer_usage, size_t slice_count,
- size_t buffer_count) {
+ uint64_t usage, size_t slice_count, size_t buffer_count) {
ATRACE_NAME("ProducerQueueChannel::OnProducerQueueAllocateBuffers");
ALOGD_IF(TRACE,
"ProducerQueueChannel::OnProducerQueueAllocateBuffers: "
@@ -145,58 +139,32 @@
std::vector<std::pair<RemoteChannelHandle, size_t>> buffer_handles;
// Deny buffer allocation violating preset rules.
- if (producer_usage & usage_policy_.producer_deny_set_mask) {
+ if (usage & usage_policy_.usage_deny_set_mask) {
ALOGE(
- "ProducerQueueChannel::OnProducerQueueAllocateBuffers: producer_usage: "
- "%" PRIx64
- " is not permitted. Violating producer_deny_set_mask, the following "
- "bits shall not be set: %" PRIx64 ".",
- producer_usage, usage_policy_.producer_deny_set_mask);
+ "ProducerQueueChannel::OnProducerQueueAllocateBuffers: usage: %" PRIx64
+ " is not permitted. Violating usage_deny_set_mask, the following bits "
+ "shall not be set: %" PRIx64 ".",
+ usage, usage_policy_.usage_deny_set_mask);
return ErrorStatus(EINVAL);
}
- if (consumer_usage & usage_policy_.consumer_deny_set_mask) {
+ if (~usage & usage_policy_.usage_deny_clear_mask) {
ALOGE(
- "ProducerQueueChannel::OnProducerQueueAllocateBuffers: consumer_usage: "
- "%" PRIx64
- " is not permitted. Violating consumer_deny_set_mask, the following "
- "bits shall not be set: %" PRIx64 ".",
- consumer_usage, usage_policy_.consumer_deny_set_mask);
- return ErrorStatus(EINVAL);
- }
-
- if (~producer_usage & usage_policy_.producer_deny_clear_mask) {
- ALOGE(
- "ProducerQueueChannel::OnProducerQueueAllocateBuffers: producer_usage: "
- "%" PRIx64
- " is not permitted. Violating producer_deny_clear_mask, the following "
+ "ProducerQueueChannel::OnProducerQueueAllocateBuffers: usage: %" PRIx64
+ " is not permitted. Violating usage_deny_clear_mask, the following "
"bits must be set: %" PRIx64 ".",
- producer_usage, usage_policy_.producer_deny_clear_mask);
+ usage, usage_policy_.usage_deny_clear_mask);
return ErrorStatus(EINVAL);
}
- if (~consumer_usage & usage_policy_.consumer_deny_clear_mask) {
- ALOGE(
- "ProducerQueueChannel::OnProducerQueueAllocateBuffers: consumer_usage: "
- "%" PRIx64
- " is not permitted. Violating consumer_deny_clear_mask, the following "
- "bits must be set: %" PRIx64 ".",
- consumer_usage, usage_policy_.consumer_deny_clear_mask);
- return ErrorStatus(EINVAL);
- }
- // Force set mask and clear mask. Note that |usage_policy_.X_set_mask_| takes
- // precedence and will overwrite |usage_policy_.X_clear_mask|.
- uint64_t effective_producer_usage =
- (producer_usage & ~usage_policy_.producer_clear_mask) |
- usage_policy_.producer_set_mask;
- uint64_t effective_consumer_usage =
- (consumer_usage & ~usage_policy_.consumer_clear_mask) |
- usage_policy_.consumer_set_mask;
+ // Force set mask and clear mask. Note that |usage_policy_.usage_set_mask_|
+ // takes precedence and will overwrite |usage_policy_.usage_clear_mask|.
+ uint64_t effective_usage =
+ (usage & ~usage_policy_.usage_clear_mask) | usage_policy_.usage_set_mask;
for (size_t i = 0; i < buffer_count; i++) {
- auto status =
- AllocateBuffer(message, width, height, format, effective_producer_usage,
- effective_consumer_usage, slice_count);
+ auto status = AllocateBuffer(message, width, height, format,
+ effective_usage, slice_count);
if (!status) {
ALOGE(
"ProducerQueueChannel::OnProducerQueueAllocateBuffers: Failed to "
@@ -212,9 +180,7 @@
Status<std::pair<RemoteChannelHandle, size_t>>
ProducerQueueChannel::AllocateBuffer(Message& message, uint32_t width,
uint32_t height, uint32_t format,
- uint64_t producer_usage,
- uint64_t consumer_usage,
- size_t slice_count) {
+ uint64_t usage, size_t slice_count) {
ATRACE_NAME("ProducerQueueChannel::AllocateBuffer");
ALOGD_IF(TRACE,
"ProducerQueueChannel::AllocateBuffer: producer_channel_id=%d",
@@ -239,15 +205,13 @@
ALOGD_IF(TRACE,
"ProducerQueueChannel::AllocateBuffer: buffer_id=%d width=%u "
- "height=%u format=%u producer_usage=%" PRIx64
- " consumer_usage=%" PRIx64 " slice_count=%zu",
- buffer_id, width, height, format, producer_usage, consumer_usage,
- slice_count);
+ "height=%u format=%u usage=%" PRIx64 " slice_count=%zu",
+ buffer_id, width, height, format, usage, slice_count);
auto buffer_handle = status.take();
- auto producer_channel_status = ProducerChannel::Create(
- service(), buffer_id, width, height, format, producer_usage,
- consumer_usage, meta_size_bytes_, slice_count);
+ auto producer_channel_status =
+ ProducerChannel::Create(service(), buffer_id, width, height, format,
+ usage, meta_size_bytes_, slice_count);
if (!producer_channel_status) {
ALOGE(
"ProducerQueueChannel::AllocateBuffer: Failed to create producer "
diff --git a/services/vr/bufferhubd/producer_queue_channel.h b/services/vr/bufferhubd/producer_queue_channel.h
index 09b0243..13c9ddc 100644
--- a/services/vr/bufferhubd/producer_queue_channel.h
+++ b/services/vr/bufferhubd/producer_queue_channel.h
@@ -35,8 +35,7 @@
pdx::Status<std::vector<std::pair<pdx::RemoteChannelHandle, size_t>>>
OnProducerQueueAllocateBuffers(pdx::Message& message, uint32_t width,
uint32_t height, uint32_t format,
- uint64_t producer_usage,
- uint64_t consumer_usage, size_t slice_count,
+ uint64_t usage, size_t slice_count,
size_t buffer_count);
// Detach a BufferHubProducer indicated by |slot|. Note that the buffer must
@@ -59,7 +58,7 @@
// allocated buffer.
pdx::Status<std::pair<pdx::RemoteChannelHandle, size_t>> AllocateBuffer(
pdx::Message& message, uint32_t width, uint32_t height, uint32_t format,
- uint64_t producer_usage, uint64_t consumer_usage, size_t slice_count);
+ uint64_t usage, size_t slice_count);
// Size of the meta data associated with all the buffers allocated from the
// queue. Now we assume the metadata size is immutable once the queue is