Merge "Rearm pdx fd on errors" into pi-dev
diff --git a/cmds/lshal/ListCommand.cpp b/cmds/lshal/ListCommand.cpp
index b9e0139..67110c4 100644
--- a/cmds/lshal/ListCommand.cpp
+++ b/cmds/lshal/ListCommand.cpp
@@ -280,7 +280,8 @@
"The Clients / Clients CMD column shows all process that have ever dlopen'ed \n"
"the library and successfully fetched the passthrough implementation.");
mImplementationsTable.setDescription(
- "All available passthrough implementations (all -impl.so files)");
+ "All available passthrough implementations (all -impl.so files).\n"
+ "These may return subclasses through their respective HIDL_FETCH_I* functions.");
}
static inline bool findAndBumpVersion(vintf::ManifestHal* hal, const vintf::Version& version) {
diff --git a/libs/vr/libbufferhub/include/private/dvr/native_buffer.h b/libs/vr/libbufferhub/include/private/dvr/native_buffer.h
deleted file mode 100644
index 140ffc5..0000000
--- a/libs/vr/libbufferhub/include/private/dvr/native_buffer.h
+++ /dev/null
@@ -1,179 +0,0 @@
-#ifndef ANDROID_DVR_NATIVE_BUFFER_H_
-#define ANDROID_DVR_NATIVE_BUFFER_H_
-
-#include <EGL/egl.h>
-#include <EGL/eglext.h>
-#include <log/log.h>
-#include <ui/ANativeObjectBase.h>
-#include <utils/RefBase.h>
-#include <nativebase/nativebase.h>
-
-#include <private/dvr/buffer_hub_client.h>
-
-namespace android {
-namespace dvr {
-
-// ANativeWindowBuffer is the abstraction Android HALs and frameworks use to
-// pass around hardware graphics buffers. The following classes implement this
-// abstraction with different DVR backing buffers, all of which provide
-// different semantics on top of ion/gralloc buffers.
-
-// An implementation of ANativeWindowBuffer backed by an IonBuffer.
-class NativeBuffer
- : public android::ANativeObjectBase<ANativeWindowBuffer, NativeBuffer,
- android::LightRefBase<NativeBuffer>> {
- public:
- static constexpr int kEmptyFence = -1;
-
- explicit NativeBuffer(const std::shared_ptr<IonBuffer>& buffer)
- : BASE(), buffer_(buffer), fence_(kEmptyFence) {
- ANativeWindowBuffer::width = buffer->width();
- ANativeWindowBuffer::height = buffer->height();
- ANativeWindowBuffer::stride = buffer->stride();
- ANativeWindowBuffer::format = buffer->format();
- ANativeWindowBuffer::usage = buffer->usage();
- handle = buffer_->handle();
- }
-
- virtual ~NativeBuffer() {}
-
- std::shared_ptr<IonBuffer> buffer() { return buffer_; }
- int fence() const { return fence_.Get(); }
-
- void SetFence(int fence) { fence_.Reset(fence); }
-
- private:
- friend class android::LightRefBase<NativeBuffer>;
-
- std::shared_ptr<IonBuffer> buffer_;
- pdx::LocalHandle fence_;
-
- NativeBuffer(const NativeBuffer&) = delete;
- void operator=(NativeBuffer&) = delete;
-};
-
-class NativeBufferProducer : public android::ANativeObjectBase<
- ANativeWindowBuffer, NativeBufferProducer,
- android::LightRefBase<NativeBufferProducer>> {
- public:
- static constexpr int kEmptyFence = -1;
-
- NativeBufferProducer(const std::shared_ptr<BufferProducer>& buffer,
- EGLDisplay display, uint32_t surface_buffer_index)
- : BASE(),
- buffer_(buffer),
- surface_buffer_index_(surface_buffer_index),
- display_(display) {
- ANativeWindowBuffer::width = buffer_->width();
- ANativeWindowBuffer::height = buffer_->height();
- ANativeWindowBuffer::stride = buffer_->stride();
- ANativeWindowBuffer::format = buffer_->format();
- ANativeWindowBuffer::usage = buffer_->usage();
- ANativeWindowBuffer::handle = buffer_->native_handle();
- if (display_) {
- image_khr_ =
- eglCreateImageKHR(display_, EGL_NO_CONTEXT, EGL_NATIVE_BUFFER_ANDROID,
- static_cast<ANativeWindowBuffer*>(this), nullptr);
- } else {
- image_khr_ = EGL_NO_IMAGE_KHR;
- }
- }
-
- explicit NativeBufferProducer(const std::shared_ptr<BufferProducer>& buffer)
- : NativeBufferProducer(buffer, nullptr, 0) {}
-
- virtual ~NativeBufferProducer() {
- if (image_khr_ != EGL_NO_IMAGE_KHR)
- eglDestroyImageKHR(display_, image_khr_);
- }
-
- EGLImageKHR image_khr() const { return image_khr_; }
- std::shared_ptr<BufferProducer> buffer() const { return buffer_; }
- int release_fence() const { return release_fence_.Get(); }
- uint32_t surface_buffer_index() const { return surface_buffer_index_; }
-
- // Return the release fence, passing ownership to the caller.
- pdx::LocalHandle ClaimReleaseFence() { return std::move(release_fence_); }
-
- // Post the buffer consumer, closing the acquire and release fences.
- int Post(int acquire_fence, uint64_t sequence) {
- release_fence_.Close();
- return buffer_->Post(pdx::LocalHandle(acquire_fence), sequence);
- }
-
- // Gain the buffer producer, closing the previous release fence if valid.
- int Gain() { return buffer_->Gain(&release_fence_); }
-
- // Asynchronously gain the buffer, closing the previous release fence.
- int GainAsync() {
- release_fence_.Close();
- return buffer_->GainAsync();
- }
-
- private:
- friend class android::LightRefBase<NativeBufferProducer>;
-
- std::shared_ptr<BufferProducer> buffer_;
- pdx::LocalHandle release_fence_;
- EGLImageKHR image_khr_;
- uint32_t surface_buffer_index_;
- EGLDisplay display_;
-
- NativeBufferProducer(const NativeBufferProducer&) = delete;
- void operator=(NativeBufferProducer&) = delete;
-};
-
-// NativeBufferConsumer is an implementation of ANativeWindowBuffer backed by a
-// BufferConsumer.
-class NativeBufferConsumer : public android::ANativeObjectBase<
- ANativeWindowBuffer, NativeBufferConsumer,
- android::LightRefBase<NativeBufferConsumer>> {
- public:
- static constexpr int kEmptyFence = -1;
-
- explicit NativeBufferConsumer(const std::shared_ptr<BufferConsumer>& buffer)
- : BASE(), buffer_(buffer), acquire_fence_(kEmptyFence), sequence_(0) {
- ANativeWindowBuffer::width = buffer_->width();
- ANativeWindowBuffer::height = buffer_->height();
- ANativeWindowBuffer::stride = buffer_->stride();
- ANativeWindowBuffer::format = buffer_->format();
- ANativeWindowBuffer::usage = buffer_->usage();
- handle = buffer_->native_handle();
- }
-
- virtual ~NativeBufferConsumer() {}
-
- std::shared_ptr<BufferConsumer> buffer() const { return buffer_; }
- int acquire_fence() const { return acquire_fence_.Get(); }
- uint64_t sequence() const { return sequence_; }
-
- // Return the acquire fence, passing ownership to the caller.
- pdx::LocalHandle ClaimAcquireFence() { return std::move(acquire_fence_); }
-
- // Acquire the underlying buffer consumer, closing the previous acquire fence
- // if valid.
- int Acquire() { return buffer_->Acquire(&acquire_fence_, &sequence_); }
-
- // Release the buffer consumer, closing the acquire and release fences if
- // valid.
- int Release(int release_fence) {
- acquire_fence_.Close();
- sequence_ = 0;
- return buffer_->Release(pdx::LocalHandle(release_fence));
- }
-
- private:
- friend class android::LightRefBase<NativeBufferConsumer>;
-
- std::shared_ptr<BufferConsumer> buffer_;
- pdx::LocalHandle acquire_fence_;
- uint64_t sequence_;
-
- NativeBufferConsumer(const NativeBufferConsumer&) = delete;
- void operator=(NativeBufferConsumer&) = delete;
-};
-
-} // namespace dvr
-} // namespace android
-
-#endif // ANDROID_DVR_NATIVE_BUFFER_H_
diff --git a/libs/vr/libdisplay/display_client.cpp b/libs/vr/libdisplay/display_client.cpp
index 442c82d..f67e258 100644
--- a/libs/vr/libdisplay/display_client.cpp
+++ b/libs/vr/libdisplay/display_client.cpp
@@ -9,7 +9,6 @@
#include <mutex>
#include <private/dvr/display_protocol.h>
-#include <private/dvr/native_buffer.h>
using android::pdx::ErrorStatus;
using android::pdx::LocalHandle;
diff --git a/libs/vr/libvrflinger/hardware_composer.cpp b/libs/vr/libvrflinger/hardware_composer.cpp
index be8a721..5b49645 100644
--- a/libs/vr/libvrflinger/hardware_composer.cpp
+++ b/libs/vr/libvrflinger/hardware_composer.cpp
@@ -45,9 +45,6 @@
namespace {
-const char kBacklightBrightnessSysFile[] =
- "/sys/class/leds/lcd-backlight/brightness";
-
const char kDvrPerformanceProperty[] = "sys.dvr.performance";
const char kDvrStandaloneProperty[] = "ro.boot.vr";
@@ -257,13 +254,6 @@
EnableVsync(true);
- // TODO(skiazyk): We need to do something about accessing this directly,
- // supposedly there is a backlight service on the way.
- // TODO(steventhomas): When we change the backlight setting, will surface
- // flinger (or something else) set it back to its original value once we give
- // control of the display back to surface flinger?
- SetBacklightBrightness(255);
-
// Trigger target-specific performance mode change.
property_set(kDvrPerformanceProperty, "performance");
}
@@ -698,16 +688,6 @@
bool thread_policy_setup =
SetThreadPolicy("graphics:high", "/system/performance");
-#if ENABLE_BACKLIGHT_BRIGHTNESS
- // TODO(hendrikw): This isn't required at the moment. It's possible that there
- // is another method to access this when needed.
- // Open the backlight brightness control sysfs node.
- backlight_brightness_fd_ = LocalHandle(kBacklightBrightnessSysFile, O_RDWR);
- ALOGW_IF(!backlight_brightness_fd_,
- "HardwareComposer: Failed to open backlight brightness control: %s",
- strerror(errno));
-#endif // ENABLE_BACKLIGHT_BRIGHTNESS
-
// Create a timerfd based on CLOCK_MONOTINIC.
vsync_sleep_timer_fd_.Reset(timerfd_create(CLOCK_MONOTONIC, 0));
LOG_ALWAYS_FATAL_IF(
@@ -983,14 +963,6 @@
vsync_callback_ = callback;
}
-void HardwareComposer::SetBacklightBrightness(int brightness) {
- if (backlight_brightness_fd_) {
- std::array<char, 32> text;
- const int length = snprintf(text.data(), text.size(), "%d", brightness);
- write(backlight_brightness_fd_.Get(), text.data(), length);
- }
-}
-
Return<void> HardwareComposer::ComposerCallback::onHotplug(
Hwc2::Display display, IComposerCallback::Connection conn) {
// Our first onHotplug callback is always for the primary display.
diff --git a/libs/vr/libvrflinger/hardware_composer.h b/libs/vr/libvrflinger/hardware_composer.h
index 1d0c7ef..4a503f8 100644
--- a/libs/vr/libvrflinger/hardware_composer.h
+++ b/libs/vr/libvrflinger/hardware_composer.h
@@ -391,8 +391,6 @@
HWC::Error Validate(hwc2_display_t display);
HWC::Error Present(hwc2_display_t display);
- void SetBacklightBrightness(int brightness);
-
void PostLayers();
void PostThread();
@@ -499,9 +497,6 @@
// notified via post_thread_wait_.
bool boot_finished_ = false;
- // Backlight LED brightness sysfs node.
- pdx::LocalHandle backlight_brightness_fd_;
-
// VSync sleep timerfd.
pdx::LocalHandle vsync_sleep_timer_fd_;
diff --git a/services/surfaceflinger/BufferLayer.cpp b/services/surfaceflinger/BufferLayer.cpp
index b804af8..d22c021 100644
--- a/services/surfaceflinger/BufferLayer.cpp
+++ b/services/surfaceflinger/BufferLayer.cpp
@@ -631,7 +631,7 @@
const HdrMetadata& metadata = mConsumer->getCurrentHdrMetadata();
error = hwcLayer->setHdrMetadata(metadata);
- if (error != HWC2::Error::None) {
+ if (error != HWC2::Error::None && error != HWC2::Error::Unsupported) {
ALOGE("[%s] Failed to set hdrMetadata: %s (%d)", mName.string(),
to_string(error).c_str(), static_cast<int32_t>(error));
}
diff --git a/services/surfaceflinger/DisplayHardware/ComposerHal.cpp b/services/surfaceflinger/DisplayHardware/ComposerHal.cpp
index bb720f7..0425a8a 100644
--- a/services/surfaceflinger/DisplayHardware/ComposerHal.cpp
+++ b/services/surfaceflinger/DisplayHardware/ComposerHal.cpp
@@ -706,6 +706,9 @@
}
Error Composer::setLayerHdrMetadata(Display display, Layer layer, const HdrMetadata& metadata) {
+ if (!mClient_2_2) {
+ return Error::UNSUPPORTED;
+ }
mWriter.selectDisplay(display);
mWriter.selectLayer(layer);
diff --git a/services/vr/bufferhubd/Android.bp b/services/vr/bufferhubd/Android.bp
new file mode 100644
index 0000000..6009a95
--- /dev/null
+++ b/services/vr/bufferhubd/Android.bp
@@ -0,0 +1,55 @@
+// Copyright (C) 2016 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+sourceFiles = [
+ "buffer_hub.cpp",
+ "bufferhubd.cpp",
+ "consumer_channel.cpp",
+ "producer_channel.cpp",
+ "consumer_queue_channel.cpp",
+ "producer_queue_channel.cpp",
+]
+
+headerLibraries = ["libdvr_headers"]
+
+staticLibraries = [
+ "libperformance",
+ "libbufferhub",
+]
+
+sharedLibraries = [
+ "libbase",
+ "libbinder",
+ "libcutils",
+ "liblog",
+ "libsync",
+ "libutils",
+ "libgui",
+ "libui",
+ "libpdx_default_transport",
+]
+
+cc_binary {
+ srcs: sourceFiles,
+ cflags: [
+ "-DLOG_TAG=\"bufferhubd\"",
+ "-DTRACE=0",
+ "-DATRACE_TAG=ATRACE_TAG_GRAPHICS",
+ ],
+ header_libs: headerLibraries,
+ static_libs: staticLibraries,
+ shared_libs: sharedLibraries,
+ name: "bufferhubd",
+ init_rc: ["bufferhubd.rc"],
+}
diff --git a/services/vr/bufferhubd/Android.mk b/services/vr/bufferhubd/Android.mk
deleted file mode 100644
index 1a99cf4..0000000
--- a/services/vr/bufferhubd/Android.mk
+++ /dev/null
@@ -1,54 +0,0 @@
-# Copyright (C) 2016 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-LOCAL_PATH := $(call my-dir)
-
-sourceFiles := \
- buffer_hub.cpp \
- bufferhubd.cpp \
- consumer_channel.cpp \
- producer_channel.cpp \
- consumer_queue_channel.cpp \
- producer_queue_channel.cpp \
-
-headerLibraries := \
- libdvr_headers
-
-staticLibraries := \
- libperformance \
- libbufferhub
-
-sharedLibraries := \
- libbase \
- libbinder \
- libcutils \
- liblog \
- libsync \
- libutils \
- libgui \
- libui \
- libpdx_default_transport \
-
-include $(CLEAR_VARS)
-LOCAL_SRC_FILES := $(sourceFiles)
-LOCAL_CFLAGS := -DLOG_TAG=\"bufferhubd\"
-LOCAL_CFLAGS += -DTRACE=0
-LOCAL_CFLAGS += -DATRACE_TAG=ATRACE_TAG_GRAPHICS
-LOCAL_HEADER_LIBRARIES := $(headerLibraries)
-LOCAL_STATIC_LIBRARIES := $(staticLibraries)
-LOCAL_SHARED_LIBRARIES := $(sharedLibraries)
-LOCAL_MODULE := bufferhubd
-LOCAL_INIT_RC := bufferhubd.rc
-include $(BUILD_EXECUTABLE)
-