Merge "Cleanup dvr_api.h to make it closer to the exported SDK version"
diff --git a/cmds/atrace/atrace.rc b/cmds/atrace/atrace.rc
index 8201d7e..1e0f6f8 100644
--- a/cmds/atrace/atrace.rc
+++ b/cmds/atrace/atrace.rc
@@ -128,11 +128,6 @@
write /sys/kernel/debug/tracing/tracing_on 0
write /sys/kernel/tracing/tracing_on 0
- # Set the trace clock to boot; falling back to mono or boot
- write /d/tracing/trace_clock global
- write /d/tracing/trace_clock mono
- write /d/tracing/trace_clock boot
-
# Allow only the shell group to read and truncate the kernel trace.
chown root shell /sys/kernel/debug/tracing/trace
chown root shell /sys/kernel/tracing/trace
diff --git a/include/ui b/include/ui
new file mode 120000
index 0000000..2fb3147
--- /dev/null
+++ b/include/ui
@@ -0,0 +1 @@
+../libs/ui/include/ui
\ No newline at end of file
diff --git a/libs/gui/Surface.cpp b/libs/gui/Surface.cpp
index 94d8578..83ebbe8 100644
--- a/libs/gui/Surface.cpp
+++ b/libs/gui/Surface.cpp
@@ -1231,7 +1231,7 @@
for (int i = 0; i < NUM_BUFFER_SLOTS; i++) {
if (mSlots[i].buffer != NULL &&
- mSlots[i].buffer->handle == buffer->handle) {
+ mSlots[i].buffer->getId() == buffer->getId()) {
if (mReportRemovedBuffers) {
mRemovedBuffers.push_back(mSlots[i].buffer);
}
diff --git a/libs/input/InputTransport.cpp b/libs/input/InputTransport.cpp
index af1c0af..293bc25 100644
--- a/libs/input/InputTransport.cpp
+++ b/libs/input/InputTransport.cpp
@@ -842,15 +842,14 @@
}
if (status) {
// An error occurred so at least one signal was not sent, reconstruct the chain.
- do {
+ for (;;) {
SeqChain seqChain;
seqChain.seq = chainIndex != 0 ? chainSeqs[chainIndex - 1] : seq;
seqChain.chain = chainSeqs[chainIndex];
mSeqChains.push(seqChain);
- if (chainIndex != 0) {
- chainIndex--;
- }
- } while (chainIndex > 0);
+ if (!chainIndex) break;
+ chainIndex--;
+ }
return status;
}
}
diff --git a/libs/ui/Android.bp b/libs/ui/Android.bp
index 8795322..d9cfed7 100644
--- a/libs/ui/Android.bp
+++ b/libs/ui/Android.bp
@@ -91,6 +91,8 @@
"libnativebase_headers",
],
+ export_include_dirs: ["include"],
+
export_static_lib_headers: [
"libarect",
"libmath",
diff --git a/include/ui/ANativeObjectBase.h b/libs/ui/include/ui/ANativeObjectBase.h
similarity index 100%
rename from include/ui/ANativeObjectBase.h
rename to libs/ui/include/ui/ANativeObjectBase.h
diff --git a/include/ui/BufferQueueDefs.h b/libs/ui/include/ui/BufferQueueDefs.h
similarity index 100%
rename from include/ui/BufferQueueDefs.h
rename to libs/ui/include/ui/BufferQueueDefs.h
diff --git a/include/ui/ColorSpace.h b/libs/ui/include/ui/ColorSpace.h
similarity index 100%
rename from include/ui/ColorSpace.h
rename to libs/ui/include/ui/ColorSpace.h
diff --git a/include/ui/DebugUtils.h b/libs/ui/include/ui/DebugUtils.h
similarity index 100%
rename from include/ui/DebugUtils.h
rename to libs/ui/include/ui/DebugUtils.h
diff --git a/include/ui/DisplayInfo.h b/libs/ui/include/ui/DisplayInfo.h
similarity index 100%
rename from include/ui/DisplayInfo.h
rename to libs/ui/include/ui/DisplayInfo.h
diff --git a/include/ui/DisplayStatInfo.h b/libs/ui/include/ui/DisplayStatInfo.h
similarity index 100%
rename from include/ui/DisplayStatInfo.h
rename to libs/ui/include/ui/DisplayStatInfo.h
diff --git a/include/ui/Fence.h b/libs/ui/include/ui/Fence.h
similarity index 100%
rename from include/ui/Fence.h
rename to libs/ui/include/ui/Fence.h
diff --git a/include/ui/FenceTime.h b/libs/ui/include/ui/FenceTime.h
similarity index 100%
rename from include/ui/FenceTime.h
rename to libs/ui/include/ui/FenceTime.h
diff --git a/include/ui/FloatRect.h b/libs/ui/include/ui/FloatRect.h
similarity index 100%
rename from include/ui/FloatRect.h
rename to libs/ui/include/ui/FloatRect.h
diff --git a/include/ui/FrameStats.h b/libs/ui/include/ui/FrameStats.h
similarity index 100%
rename from include/ui/FrameStats.h
rename to libs/ui/include/ui/FrameStats.h
diff --git a/include/ui/Gralloc2.h b/libs/ui/include/ui/Gralloc2.h
similarity index 100%
rename from include/ui/Gralloc2.h
rename to libs/ui/include/ui/Gralloc2.h
diff --git a/include/ui/GraphicBuffer.h b/libs/ui/include/ui/GraphicBuffer.h
similarity index 100%
rename from include/ui/GraphicBuffer.h
rename to libs/ui/include/ui/GraphicBuffer.h
diff --git a/include/ui/GraphicBufferAllocator.h b/libs/ui/include/ui/GraphicBufferAllocator.h
similarity index 100%
rename from include/ui/GraphicBufferAllocator.h
rename to libs/ui/include/ui/GraphicBufferAllocator.h
diff --git a/include/ui/GraphicBufferMapper.h b/libs/ui/include/ui/GraphicBufferMapper.h
similarity index 100%
rename from include/ui/GraphicBufferMapper.h
rename to libs/ui/include/ui/GraphicBufferMapper.h
diff --git a/include/ui/HdrCapabilities.h b/libs/ui/include/ui/HdrCapabilities.h
similarity index 100%
rename from include/ui/HdrCapabilities.h
rename to libs/ui/include/ui/HdrCapabilities.h
diff --git a/include/ui/PixelFormat.h b/libs/ui/include/ui/PixelFormat.h
similarity index 100%
rename from include/ui/PixelFormat.h
rename to libs/ui/include/ui/PixelFormat.h
diff --git a/include/ui/Point.h b/libs/ui/include/ui/Point.h
similarity index 100%
rename from include/ui/Point.h
rename to libs/ui/include/ui/Point.h
diff --git a/include/ui/Rect.h b/libs/ui/include/ui/Rect.h
similarity index 100%
rename from include/ui/Rect.h
rename to libs/ui/include/ui/Rect.h
diff --git a/include/ui/Region.h b/libs/ui/include/ui/Region.h
similarity index 100%
rename from include/ui/Region.h
rename to libs/ui/include/ui/Region.h
diff --git a/include/ui/UiConfig.h b/libs/ui/include/ui/UiConfig.h
similarity index 100%
rename from include/ui/UiConfig.h
rename to libs/ui/include/ui/UiConfig.h
diff --git a/libs/vr/libdisplay/display_client.cpp b/libs/vr/libdisplay/display_client.cpp
index 5a0c3d0..6175da7 100644
--- a/libs/vr/libdisplay/display_client.cpp
+++ b/libs/vr/libdisplay/display_client.cpp
@@ -167,6 +167,19 @@
return InvokeRemoteMethod<DisplayProtocol::GetMetrics>();
}
+Status<std::string> DisplayClient::GetConfigurationData(
+ ConfigFileType config_type) {
+ auto status =
+ InvokeRemoteMethod<DisplayProtocol::GetConfigurationData>(config_type);
+ if (!status && status.error() != ENOENT) {
+ ALOGE(
+ "DisplayClient::GetConfigurationData: Unable to get"
+ "configuration data. Error: %s",
+ status.GetErrorMessage().c_str());
+ }
+ return status;
+}
+
Status<std::unique_ptr<Surface>> DisplayClient::CreateSurface(
const SurfaceAttributes& attributes) {
int error;
diff --git a/libs/vr/libdisplay/display_manager_client.cpp b/libs/vr/libdisplay/display_manager_client.cpp
index 37d6ff9..098b725 100644
--- a/libs/vr/libdisplay/display_manager_client.cpp
+++ b/libs/vr/libdisplay/display_manager_client.cpp
@@ -70,20 +70,6 @@
return status;
}
-pdx::Status<std::string> DisplayManagerClient::GetConfigurationData(
- ConfigFileType config_type) {
- auto status =
- InvokeRemoteMethod<DisplayManagerProtocol::GetConfigurationData>(
- config_type);
- if (!status && status.error() != ENOENT) {
- ALOGE(
- "DisplayManagerClient::GetConfigurationData: Unable to get "
- "configuration data. Error: %s",
- status.GetErrorMessage().c_str());
- }
- return status;
-}
-
pdx::Status<std::unique_ptr<ConsumerQueue>>
DisplayManagerClient::GetSurfaceQueue(int surface_id, int queue_id) {
auto status = InvokeRemoteMethod<DisplayManagerProtocol::GetSurfaceQueue>(
diff --git a/libs/vr/libdisplay/include/private/dvr/display_client.h b/libs/vr/libdisplay/include/private/dvr/display_client.h
index e5b3340..ce0bc80 100644
--- a/libs/vr/libdisplay/include/private/dvr/display_client.h
+++ b/libs/vr/libdisplay/include/private/dvr/display_client.h
@@ -68,6 +68,7 @@
class DisplayClient : public pdx::ClientBase<DisplayClient> {
public:
pdx::Status<Metrics> GetDisplayMetrics();
+ pdx::Status<std::string> GetConfigurationData(ConfigFileType config_type);
pdx::Status<std::unique_ptr<IonBuffer>> GetGlobalBuffer(
DvrGlobalBufferKey key);
pdx::Status<std::unique_ptr<Surface>> CreateSurface(
diff --git a/libs/vr/libdisplay/include/private/dvr/display_manager_client.h b/libs/vr/libdisplay/include/private/dvr/display_manager_client.h
index c5ec231..7281b76 100644
--- a/libs/vr/libdisplay/include/private/dvr/display_manager_client.h
+++ b/libs/vr/libdisplay/include/private/dvr/display_manager_client.h
@@ -27,7 +27,6 @@
pdx::Status<std::unique_ptr<ConsumerQueue>> GetSurfaceQueue(int surface_id,
int queue_id);
- pdx::Status<std::string> GetConfigurationData(ConfigFileType config_type);
using Client::event_fd;
pdx::Status<int> GetEventMask(int events) {
diff --git a/libs/vr/libdisplay/include/private/dvr/display_protocol.h b/libs/vr/libdisplay/include/private/dvr/display_protocol.h
index b857d48..d1787e6 100644
--- a/libs/vr/libdisplay/include/private/dvr/display_protocol.h
+++ b/libs/vr/libdisplay/include/private/dvr/display_protocol.h
@@ -186,6 +186,12 @@
PDX_SERIALIZABLE_MEMBERS(SurfaceInfo, surface_id, visible, z_order);
};
+enum class ConfigFileType : uint32_t {
+ kLensMetrics,
+ kDeviceMetrics,
+ kDeviceConfiguration
+};
+
struct DisplayProtocol {
// Service path.
static constexpr char kClientPath[] = "system/vr/display/client";
@@ -193,6 +199,7 @@
// Op codes.
enum {
kOpGetMetrics = 0,
+ kOpGetConfigurationData,
kOpGetGlobalBuffer,
kOpIsVrAppRunning,
kOpCreateSurface,
@@ -207,6 +214,8 @@
// Methods.
PDX_REMOTE_METHOD(GetMetrics, kOpGetMetrics, Metrics(Void));
+ PDX_REMOTE_METHOD(GetConfigurationData, kOpGetConfigurationData,
+ std::string(ConfigFileType config_type));
PDX_REMOTE_METHOD(GetGlobalBuffer, kOpGetGlobalBuffer,
LocalNativeBufferHandle(DvrGlobalBufferKey key));
PDX_REMOTE_METHOD(IsVrAppRunning, kOpIsVrAppRunning, bool(Void));
@@ -219,12 +228,6 @@
void(const SurfaceAttributes& attributes));
};
-enum class ConfigFileType : uint32_t {
- kLensMetrics,
- kDeviceMetrics,
- kDeviceConfiguration
-};
-
struct DisplayManagerProtocol {
// Service path.
static constexpr char kClientPath[] = "system/vr/display/manager";
@@ -234,7 +237,6 @@
kOpGetSurfaceState = 0,
kOpGetSurfaceQueue,
kOpSetupGlobalBuffer,
- kOpGetConfigurationData,
kOpDeleteGlobalBuffer,
};
@@ -250,8 +252,6 @@
PDX_REMOTE_METHOD(SetupGlobalBuffer, kOpSetupGlobalBuffer,
LocalNativeBufferHandle(DvrGlobalBufferKey key, size_t size,
uint64_t usage));
- PDX_REMOTE_METHOD(GetConfigurationData, kOpGetConfigurationData,
- std::string(ConfigFileType config_type));
PDX_REMOTE_METHOD(DeleteGlobalBuffer, kOpDeleteGlobalBuffer,
void(DvrGlobalBufferKey key));
};
diff --git a/libs/vr/libdisplay/include/private/dvr/shared_buffer_helpers.h b/libs/vr/libdisplay/include/private/dvr/shared_buffer_helpers.h
index 249f410..ed06515 100644
--- a/libs/vr/libdisplay/include/private/dvr/shared_buffer_helpers.h
+++ b/libs/vr/libdisplay/include/private/dvr/shared_buffer_helpers.h
@@ -49,6 +49,9 @@
// If we just own the IonBuffer outright, it's here.
std::unique_ptr<IonBuffer> owned_buffer_ = nullptr;
+ // The last time we connected to the display service.
+ int64_t last_display_service_connection_ns_ = 0;
+
// If we do not own the IonBuffer, it's here
IonBuffer* buffer_ = nullptr;
diff --git a/libs/vr/libdisplay/shared_buffer_helpers.cpp b/libs/vr/libdisplay/shared_buffer_helpers.cpp
index 00bad88..6ebf487 100644
--- a/libs/vr/libdisplay/shared_buffer_helpers.cpp
+++ b/libs/vr/libdisplay/shared_buffer_helpers.cpp
@@ -1,7 +1,13 @@
+#include <private/dvr/clock_ns.h>
#include <private/dvr/shared_buffer_helpers.h>
namespace android {
namespace dvr {
+namespace {
+
+// We will not poll the display service for buffers more frequently than this.
+constexpr size_t kDisplayServiceTriesPerSecond = 2;
+} // namespace
CPUMappedBuffer::CPUMappedBuffer(DvrGlobalBufferKey key, CPUUsageMode mode)
: buffer_key_(key), usage_mode_(mode) {
@@ -30,8 +36,16 @@
void CPUMappedBuffer::TryMapping() {
// Do we have an IonBuffer for this shared memory object?
if (buffer_ == nullptr) {
+ // Has it been too long since we last connected to the display service?
+ const auto current_time_ns = GetSystemClockNs();
+ if ((current_time_ns - last_display_service_connection_ns_) <
+ (1e9 / kDisplayServiceTriesPerSecond)) {
+ // Early exit.
+ return;
+ }
+ last_display_service_connection_ns_ = current_time_ns;
+
// Create a display client and get the buffer.
- // TODO(okana): We might want to throttle this.
auto display_client = display::DisplayClient::Create();
if (display_client) {
auto get_result = display_client->GetGlobalBuffer(buffer_key_);
@@ -39,8 +53,8 @@
owned_buffer_ = get_result.take();
buffer_ = owned_buffer_.get();
} else {
- ALOGW("Could not get named buffer from pose service : %s(%d)",
- get_result.GetErrorMessage().c_str(), get_result.error());
+ // The buffer has not been created yet. This is OK, we will keep
+ // retrying.
}
} else {
ALOGE("Unable to create display client for shared buffer access");
diff --git a/libs/vr/libdvr/Android.bp b/libs/vr/libdvr/Android.bp
index 2b4ebbe..4650871 100644
--- a/libs/vr/libdvr/Android.bp
+++ b/libs/vr/libdvr/Android.bp
@@ -27,6 +27,7 @@
"dvr_api.cpp",
"dvr_buffer.cpp",
"dvr_buffer_queue.cpp",
+ "dvr_configuration_data.cpp",
"dvr_display_manager.cpp",
"dvr_hardware_composer_client.cpp",
"dvr_surface.cpp",
diff --git a/libs/vr/libdvr/dvr_api.cpp b/libs/vr/libdvr/dvr_api.cpp
index 2c95583..5f35dcf 100644
--- a/libs/vr/libdvr/dvr_api.cpp
+++ b/libs/vr/libdvr/dvr_api.cpp
@@ -6,6 +6,7 @@
// Headers from libdvr
#include <dvr/dvr_buffer.h>
#include <dvr/dvr_buffer_queue.h>
+#include <dvr/dvr_configuration_data.h>
#include <dvr/dvr_display_manager.h>
#include <dvr/dvr_surface.h>
#include <dvr/dvr_vsync.h>
diff --git a/libs/vr/libdvr/dvr_configuration_data.cpp b/libs/vr/libdvr/dvr_configuration_data.cpp
new file mode 100644
index 0000000..df0d54e
--- /dev/null
+++ b/libs/vr/libdvr/dvr_configuration_data.cpp
@@ -0,0 +1,40 @@
+#include "include/dvr/dvr_configuration_data.h"
+
+#include <private/dvr/display_client.h>
+
+using android::dvr::display::ConfigFileType;
+using android::dvr::display::DisplayClient;
+
+extern "C" {
+
+int dvrConfigurationDataGet(int config_type, uint8_t** data,
+ size_t* data_size) {
+ if (!data || !data_size) {
+ return -EINVAL;
+ }
+
+ auto client = DisplayClient::Create();
+ if (!client) {
+ ALOGE("dvrGetGlobalBuffer: Failed to create display client!");
+ return -ECOMM;
+ }
+
+ ConfigFileType config_file_type = static_cast<ConfigFileType>(config_type);
+ auto config_data_status =
+ client->GetConfigurationData(config_file_type);
+
+ if (!config_data_status) {
+ return -config_data_status.error();
+ }
+
+ *data_size = config_data_status.get().size();
+ *data = new uint8_t[*data_size];
+ std::copy_n(config_data_status.get().begin(), *data_size, *data);
+ return 0;
+}
+
+void dvrConfigurationDataDestroy(uint8_t* data) {
+ delete[] data;
+}
+
+} // extern "C"
diff --git a/libs/vr/libdvr/dvr_display_manager.cpp b/libs/vr/libdvr/dvr_display_manager.cpp
index ffe090d..97cd4ee 100644
--- a/libs/vr/libdvr/dvr_display_manager.cpp
+++ b/libs/vr/libdvr/dvr_display_manager.cpp
@@ -5,13 +5,13 @@
#include <private/android/AHardwareBufferHelpers.h>
#include <private/dvr/buffer_hub_client.h>
#include <private/dvr/buffer_hub_queue_client.h>
+#include <private/dvr/display_client.h>
#include <private/dvr/display_manager_client.h>
#include "dvr_internal.h"
using android::AHardwareBuffer_convertToGrallocUsageBits;
using android::dvr::BufferConsumer;
-using android::dvr::display::ConfigFileType;
using android::dvr::display::DisplayManagerClient;
using android::dvr::display::SurfaceAttributes;
using android::dvr::display::SurfaceAttribute;
@@ -150,30 +150,6 @@
return 0;
}
-int dvrConfigurationDataGet(DvrDisplayManager* client, int config_type,
- uint8_t** data, size_t* data_size) {
- if (!client || !data || !data_size) {
- return -EINVAL;
- }
-
- ConfigFileType config_file_type = static_cast<ConfigFileType>(config_type);
- auto config_data_status =
- client->client->GetConfigurationData(config_file_type);
-
- if (!config_data_status) {
- return -config_data_status.error();
- }
-
- *data_size = config_data_status.get().size();
- *data = new uint8_t[*data_size];
- std::copy_n(config_data_status.get().begin(), *data_size, *data);
- return 0;
-}
-
-void dvrConfigurationDataDestroy(DvrDisplayManager*, uint8_t* data) {
- delete[] data;
-}
-
int dvrDisplayManagerGetEventFd(DvrDisplayManager* client) {
if (!client)
return -EINVAL;
diff --git a/libs/vr/libdvr/include/dvr/dvr_api.h b/libs/vr/libdvr/include/dvr/dvr_api.h
index 499c641..99dfd2f 100644
--- a/libs/vr/libdvr/include/dvr/dvr_api.h
+++ b/libs/vr/libdvr/include/dvr/dvr_api.h
@@ -48,6 +48,16 @@
// used for GPU late latching. See cutils/native_handle.h for the struct layout.
struct native_handle;
+// Device metrics data type enums.
+enum {
+ // Request the device lens metrics protobuf. This matches cardboard protos.
+ DVR_CONFIGURATION_DATA_LENS_METRICS = 0,
+ // Request the device metrics protobuf.
+ DVR_CONFIGURATION_DATA_DEVICE_METRICS = 1,
+ // Request the per device configuration data file.
+ DVR_CONFIGURATION_DATA_DEVICE_CONFIG = 2,
+};
+
// dvr_display_manager.h
typedef int (*DvrDisplayManagerCreatePtr)(DvrDisplayManager** client_out);
typedef void (*DvrDisplayManagerDestroyPtr)(DvrDisplayManager* client);
@@ -64,11 +74,9 @@
typedef int (*DvrDisplayManagerGetReadBufferQueuePtr)(
DvrDisplayManager* client, int surface_id, int queue_id,
DvrReadBufferQueue** queue_out);
-typedef int (*DvrConfigurationDataGetPtr)(DvrDisplayManager* client,
- int config_type, uint8_t** data,
+typedef int (*DvrConfigurationDataGetPtr)(int config_type, uint8_t** data,
size_t* data_size);
-typedef void (*DvrConfigurationDataDestroyPtr)(DvrDisplayManager* client,
- uint8_t* data);
+typedef void (*DvrConfigurationDataDestroyPtr)(uint8_t* data);
typedef int (*DvrSurfaceStateCreatePtr)(DvrSurfaceState** surface_state);
typedef void (*DvrSurfaceStateDestroyPtr)(DvrSurfaceState* surface_state);
typedef int (*DvrSurfaceStateGetSurfaceCountPtr)(DvrSurfaceState* surface_state,
diff --git a/libs/vr/libdvr/include/dvr/dvr_configuration_data.h b/libs/vr/libdvr/include/dvr/dvr_configuration_data.h
new file mode 100644
index 0000000..22a509f
--- /dev/null
+++ b/libs/vr/libdvr/include/dvr/dvr_configuration_data.h
@@ -0,0 +1,24 @@
+#ifndef DVR_CONFIGURATION_DATA_H_
+#define DVR_CONFIGURATION_DATA_H_
+
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <sys/cdefs.h>
+
+#include <dvr/dvr_display_types.h>
+#include <dvr/dvr_surface.h>
+
+__BEGIN_DECLS
+
+// Loads device configuration data of DVR_CONFIGURATION_DATA_*.
+// @return 0 on success. Otherwise returns a negative error value.
+int dvrConfigurationDataGet(int config_type,
+ uint8_t** data, size_t* data_size);
+
+// Destroy the configuration data returned from dvrGetConfigurationData.
+void dvrConfigurationDataDestroy(uint8_t* data);
+
+__END_DECLS
+
+#endif // DVR_CONFIGURATION_DATA_H_
diff --git a/libs/vr/libdvr/include/dvr/dvr_display_manager.h b/libs/vr/libdvr/include/dvr/dvr_display_manager.h
index 86ea5b6..4bb0a2f 100644
--- a/libs/vr/libdvr/include/dvr/dvr_display_manager.h
+++ b/libs/vr/libdvr/include/dvr/dvr_display_manager.h
@@ -40,21 +40,6 @@
int dvrDisplayManagerDeleteGlobalBuffer(DvrDisplayManager* client,
DvrGlobalBufferKey key);
-// Device metrics data type enums.
-enum {
- DVR_CONFIGURATION_DATA_LENS_METRICS = 0,
- DVR_CONFIGURATION_DATA_DEVICE_METRICS = 1,
- DVR_CONFIGURATION_DATA_DEVICE_CONFIG = 2,
-};
-
-// Loads device configuration data of DVR_CONFIGURATION_DATA_*.
-// @return 0 on success. Otherwise returns a negative error value.
-int dvrConfigurationDataGet(DvrDisplayManager* client, int config_type,
- uint8_t** data, size_t* data_size);
-
-// Destroy the configuration data returned from dvrGetConfigurationData.
-void dvrConfigurationDataDestroy(DvrDisplayManager* client, uint8_t* data);
-
// Returns an fd used to signal when surface updates occur. Note that depending
// on the underlying transport, only a subset of the real event bits may be
// supported. Use dvrDisplayManagerClientTranslateEpollEventMask to get the real
diff --git a/libs/vr/libdvr/tests/dvr_display_manager-test.cpp b/libs/vr/libdvr/tests/dvr_display_manager-test.cpp
index 6f11465..2249154 100644
--- a/libs/vr/libdvr/tests/dvr_display_manager-test.cpp
+++ b/libs/vr/libdvr/tests/dvr_display_manager-test.cpp
@@ -10,6 +10,7 @@
#include <thread>
#include <vector>
+#include <dvr/dvr_configuration_data.h>
#include <dvr/dvr_deleter.h>
#include <dvr/dvr_display_manager.h>
#include <dvr/dvr_surface.h>
@@ -204,8 +205,7 @@
Status<std::vector<uint8_t>> GetConfigData(int config_type) {
uint8_t* data = nullptr;
size_t data_size = 0;
- int error = dvrConfigurationDataGet(display_manager_.get(), config_type,
- &data, &data_size);
+ int error = dvrConfigurationDataGet(config_type, &data, &data_size);
if (error < 0) {
return ErrorStatus(-error);
}
@@ -214,7 +214,7 @@
return ErrorStatus(EINVAL);
}
std::vector<uint8_t> data_result(data, data + data_size);
- dvrConfigurationDataDestroy(display_manager_.get(), data);
+ dvrConfigurationDataDestroy(data);
std::string s(data, data + data_size);
return {std::move(data_result)};
}
@@ -593,6 +593,7 @@
}
TEST_F(DvrDisplayManagerTest, ConfigurationData) {
+ // TODO(hendrikw): Move this out of the display manager tests.
auto data1 = manager_->GetConfigData(-1);
ASSERT_STATUS_ERROR(data1);
diff --git a/libs/vr/libvrflinger/display_manager_service.cpp b/libs/vr/libvrflinger/display_manager_service.cpp
index c5b0d88..0e9a6ab 100644
--- a/libs/vr/libvrflinger/display_manager_service.cpp
+++ b/libs/vr/libvrflinger/display_manager_service.cpp
@@ -1,7 +1,5 @@
#include "display_manager_service.h"
-#include <android-base/file.h>
-#include <android-base/properties.h>
#include <pdx/channel_handle.h>
#include <pdx/default_transport/service_endpoint.h>
#include <private/android_filesystem_config.h>
@@ -21,14 +19,6 @@
using android::pdx::rpc::IfAnyOf;
using android::pdx::rpc::RemoteMethodError;
-namespace {
-
-const char kDvrLensMetricsProperty[] = "ro.dvr.lens_metrics";
-const char kDvrDeviceMetricsProperty[] = "ro.dvr.device_metrics";
-const char kDvrDeviceConfigProperty[] = "ro.dvr.device_configuration";
-
-} // namespace
-
namespace android {
namespace dvr {
@@ -93,11 +83,6 @@
*this, &DisplayManagerService::OnSetupGlobalBuffer, message);
return {};
- case DisplayManagerProtocol::GetConfigurationData::Opcode:
- DispatchRemoteMethod<DisplayManagerProtocol::GetConfigurationData>(
- *this, &DisplayManagerService::OnGetConfigurationData, message);
- return {};
-
case DisplayManagerProtocol::DeleteGlobalBuffer::Opcode:
DispatchRemoteMethod<DisplayManagerProtocol::DeleteGlobalBuffer>(
*this, &DisplayManagerService::OnDeleteGlobalBuffer, message);
@@ -179,35 +164,6 @@
return display_service_->DeleteGlobalBuffer(key);
}
-pdx::Status<std::string> DisplayManagerService::OnGetConfigurationData(
- pdx::Message& message, display::ConfigFileType config_type) {
- std::string property_name;
- switch (config_type) {
- case display::ConfigFileType::kLensMetrics:
- property_name = kDvrLensMetricsProperty;
- break;
- case display::ConfigFileType::kDeviceMetrics:
- property_name = kDvrDeviceMetricsProperty;
- break;
- case display::ConfigFileType::kDeviceConfiguration:
- property_name = kDvrDeviceConfigProperty;
- break;
- default:
- return ErrorStatus(EINVAL);
- }
- std::string file_path = base::GetProperty(property_name, "");
- if (file_path.empty()) {
- return ErrorStatus(ENOENT);
- }
-
- std::string data;
- if (!base::ReadFileToString(file_path, &data)) {
- return ErrorStatus(errno);
- }
-
- return std::move(data);
-}
-
void DisplayManagerService::OnDisplaySurfaceChange() {
if (display_manager_)
display_manager_->SetNotificationsPending(true);
diff --git a/libs/vr/libvrflinger/display_manager_service.h b/libs/vr/libvrflinger/display_manager_service.h
index 20c5507..c869ceb 100644
--- a/libs/vr/libvrflinger/display_manager_service.h
+++ b/libs/vr/libvrflinger/display_manager_service.h
@@ -61,8 +61,6 @@
uint64_t usage);
pdx::Status<void> OnDeleteGlobalBuffer(pdx::Message& message,
DvrGlobalBufferKey key);
- pdx::Status<std::string> OnGetConfigurationData(
- pdx::Message& message, display::ConfigFileType config_type);
// Called by the display service to indicate changes to display surfaces that
// the display manager should evaluate.
diff --git a/libs/vr/libvrflinger/display_service.cpp b/libs/vr/libvrflinger/display_service.cpp
index b180848..dc9807a 100644
--- a/libs/vr/libvrflinger/display_service.cpp
+++ b/libs/vr/libvrflinger/display_service.cpp
@@ -3,6 +3,8 @@
#include <unistd.h>
#include <vector>
+#include <android-base/file.h>
+#include <android-base/properties.h>
#include <dvr/dvr_display_types.h>
#include <pdx/default_transport/service_endpoint.h>
#include <pdx/rpc/remote_method.h>
@@ -18,6 +20,14 @@
using android::pdx::default_transport::Endpoint;
using android::pdx::rpc::DispatchRemoteMethod;
+namespace {
+
+const char kDvrLensMetricsProperty[] = "ro.dvr.lens_metrics";
+const char kDvrDeviceMetricsProperty[] = "ro.dvr.device_metrics";
+const char kDvrDeviceConfigProperty[] = "ro.dvr.device_configuration";
+
+} // namespace
+
namespace android {
namespace dvr {
@@ -60,6 +70,11 @@
*this, &DisplayService::OnGetMetrics, message);
return {};
+ case DisplayProtocol::GetConfigurationData::Opcode:
+ DispatchRemoteMethod<DisplayProtocol::GetConfigurationData>(
+ *this, &DisplayService::OnGetConfigurationData, message);
+ return {};
+
case DisplayProtocol::CreateSurface::Opcode:
DispatchRemoteMethod<DisplayProtocol::CreateSurface>(
*this, &DisplayService::OnCreateSurface, message);
@@ -102,6 +117,35 @@
{}}};
}
+pdx::Status<std::string> DisplayService::OnGetConfigurationData(
+ pdx::Message& /*message*/, display::ConfigFileType config_type) {
+ std::string property_name;
+ switch (config_type) {
+ case display::ConfigFileType::kLensMetrics:
+ property_name = kDvrLensMetricsProperty;
+ break;
+ case display::ConfigFileType::kDeviceMetrics:
+ property_name = kDvrDeviceMetricsProperty;
+ break;
+ case display::ConfigFileType::kDeviceConfiguration:
+ property_name = kDvrDeviceConfigProperty;
+ break;
+ default:
+ return ErrorStatus(EINVAL);
+ }
+ std::string file_path = base::GetProperty(property_name, "");
+ if (file_path.empty()) {
+ return ErrorStatus(ENOENT);
+ }
+
+ std::string data;
+ if (!base::ReadFileToString(file_path, &data)) {
+ return ErrorStatus(errno);
+ }
+
+ return std::move(data);
+}
+
// Creates a new DisplaySurface and associates it with this channel. This may
// only be done once per channel.
Status<display::SurfaceInfo> DisplayService::OnCreateSurface(
diff --git a/libs/vr/libvrflinger/display_service.h b/libs/vr/libvrflinger/display_service.h
index 8ba1728..cb21e9f 100644
--- a/libs/vr/libvrflinger/display_service.h
+++ b/libs/vr/libvrflinger/display_service.h
@@ -88,6 +88,8 @@
pdx::Status<BorrowedNativeBufferHandle> OnGetGlobalBuffer(
pdx::Message& message, DvrGlobalBufferKey key);
pdx::Status<display::Metrics> OnGetMetrics(pdx::Message& message);
+ pdx::Status<std::string> OnGetConfigurationData(
+ pdx::Message& message, display::ConfigFileType config_type);
pdx::Status<display::SurfaceInfo> OnCreateSurface(
pdx::Message& message, const display::SurfaceAttributes& attributes);
diff --git a/services/surfaceflinger/DisplayHardware/ComposerHal.cpp b/services/surfaceflinger/DisplayHardware/ComposerHal.cpp
index 439adc4..ae628e1 100644
--- a/services/surfaceflinger/DisplayHardware/ComposerHal.cpp
+++ b/services/surfaceflinger/DisplayHardware/ComposerHal.cpp
@@ -181,6 +181,13 @@
if (mClient == nullptr) {
LOG_ALWAYS_FATAL("failed to create composer client");
}
+
+ if (mIsUsingVrComposer) {
+ sp<IVrComposerClient> vrClient = IVrComposerClient::castFrom(mClient);
+ if (vrClient == nullptr) {
+ LOG_ALWAYS_FATAL("failed to create vr composer client");
+ }
+ }
}
std::vector<IComposer::Capability> Composer::getCapabilities()
diff --git a/services/vr/hardware_composer/impl/vr_composer_client.cpp b/services/vr/hardware_composer/impl/vr_composer_client.cpp
index ae54e56..c31417b 100644
--- a/services/vr/hardware_composer/impl/vr_composer_client.cpp
+++ b/services/vr/hardware_composer/impl/vr_composer_client.cpp
@@ -24,26 +24,63 @@
namespace android {
namespace dvr {
+namespace {
using android::hardware::graphics::common::V1_0::PixelFormat;
using android::frameworks::vr::composer::V1_0::IVrComposerClient;
-VrComposerClient::VrComposerClient(dvr::VrHwc& hal)
+class ComposerClientImpl : public ComposerClient {
+ public:
+ ComposerClientImpl(android::dvr::VrHwc& hal);
+ virtual ~ComposerClientImpl();
+
+ private:
+ class VrCommandReader : public ComposerClient::CommandReader {
+ public:
+ VrCommandReader(ComposerClientImpl& client);
+ ~VrCommandReader() override;
+
+ bool parseCommand(IComposerClient::Command command,
+ uint16_t length) override;
+
+ private:
+ bool parseSetLayerInfo(uint16_t length);
+ bool parseSetClientTargetMetadata(uint16_t length);
+ bool parseSetLayerBufferMetadata(uint16_t length);
+
+ IVrComposerClient::BufferMetadata readBufferMetadata();
+
+ ComposerClientImpl& mVrClient;
+ android::dvr::VrHwc& mVrHal;
+
+ VrCommandReader(const VrCommandReader&) = delete;
+ void operator=(const VrCommandReader&) = delete;
+ };
+
+ std::unique_ptr<CommandReader> createCommandReader() override;
+
+ dvr::VrHwc& mVrHal;
+
+ ComposerClientImpl(const ComposerClientImpl&) = delete;
+ void operator=(const ComposerClientImpl&) = delete;
+};
+
+ComposerClientImpl::ComposerClientImpl(android::dvr::VrHwc& hal)
: ComposerClient(hal), mVrHal(hal) {}
-VrComposerClient::~VrComposerClient() {}
+ComposerClientImpl::~ComposerClientImpl() {}
std::unique_ptr<ComposerClient::CommandReader>
-VrComposerClient::createCommandReader() {
+ComposerClientImpl::createCommandReader() {
return std::unique_ptr<CommandReader>(new VrCommandReader(*this));
}
-VrComposerClient::VrCommandReader::VrCommandReader(VrComposerClient& client)
+ComposerClientImpl::VrCommandReader::VrCommandReader(ComposerClientImpl& client)
: CommandReader(client), mVrClient(client), mVrHal(client.mVrHal) {}
-VrComposerClient::VrCommandReader::~VrCommandReader() {}
+ComposerClientImpl::VrCommandReader::~VrCommandReader() {}
-bool VrComposerClient::VrCommandReader::parseCommand(
+bool ComposerClientImpl::VrCommandReader::parseCommand(
IComposerClient::Command command, uint16_t length) {
IVrComposerClient::VrCommand vrCommand =
static_cast<IVrComposerClient::VrCommand>(command);
@@ -59,7 +96,7 @@
}
}
-bool VrComposerClient::VrCommandReader::parseSetLayerInfo(uint16_t length) {
+bool ComposerClientImpl::VrCommandReader::parseSetLayerInfo(uint16_t length) {
if (length != 2) {
return false;
}
@@ -72,7 +109,7 @@
return true;
}
-bool VrComposerClient::VrCommandReader::parseSetClientTargetMetadata(
+bool ComposerClientImpl::VrCommandReader::parseSetClientTargetMetadata(
uint16_t length) {
if (length != 7)
return false;
@@ -84,7 +121,7 @@
return true;
}
-bool VrComposerClient::VrCommandReader::parseSetLayerBufferMetadata(
+bool ComposerClientImpl::VrCommandReader::parseSetLayerBufferMetadata(
uint16_t length) {
if (length != 7)
return false;
@@ -98,7 +135,7 @@
}
IVrComposerClient::BufferMetadata
-VrComposerClient::VrCommandReader::readBufferMetadata() {
+ComposerClientImpl::VrCommandReader::readBufferMetadata() {
IVrComposerClient::BufferMetadata metadata = {
.width = read(),
.height = read(),
@@ -110,5 +147,132 @@
return metadata;
}
+} // namespace
+
+VrComposerClient::VrComposerClient(dvr::VrHwc& hal)
+ : client_(new ComposerClientImpl(hal)) {
+ client_->initialize();
+}
+
+VrComposerClient::~VrComposerClient() {}
+
+void VrComposerClient::onHotplug(Display display,
+ IComposerCallback::Connection connected) {
+ client_->onHotplug(display, connected);
+}
+
+Return<void> VrComposerClient::registerCallback(
+ const sp<IComposerCallback>& callback) {
+ return client_->registerCallback(callback);
+}
+
+Return<uint32_t> VrComposerClient::getMaxVirtualDisplayCount() {
+ return client_->getMaxVirtualDisplayCount();
+}
+
+Return<void> VrComposerClient::createVirtualDisplay(uint32_t width,
+ uint32_t height, PixelFormat formatHint, uint32_t outputBufferSlotCount,
+ createVirtualDisplay_cb hidl_cb) {
+ return client_->createVirtualDisplay(
+ width, height, formatHint, outputBufferSlotCount, hidl_cb);
+}
+
+Return<Error> VrComposerClient::destroyVirtualDisplay(Display display) {
+ return client_->destroyVirtualDisplay(display);
+}
+
+Return<void> VrComposerClient::createLayer(Display display,
+ uint32_t bufferSlotCount, createLayer_cb hidl_cb) {
+ return client_->createLayer(display, bufferSlotCount, hidl_cb);
+}
+
+Return<Error> VrComposerClient::destroyLayer(Display display, Layer layer) {
+ return client_->destroyLayer(display, layer);
+}
+
+Return<void> VrComposerClient::getActiveConfig(Display display,
+ getActiveConfig_cb hidl_cb) {
+ return client_->getActiveConfig(display, hidl_cb);
+}
+
+Return<Error> VrComposerClient::getClientTargetSupport(Display display,
+ uint32_t width, uint32_t height, PixelFormat format, Dataspace dataspace) {
+ return client_->getClientTargetSupport(display, width, height, format,
+ dataspace);
+}
+
+Return<void> VrComposerClient::getColorModes(Display display,
+ getColorModes_cb hidl_cb) {
+ return client_->getColorModes(display, hidl_cb);
+}
+
+Return<void> VrComposerClient::getDisplayAttribute(Display display,
+ Config config, Attribute attribute, getDisplayAttribute_cb hidl_cb) {
+ return client_->getDisplayAttribute(display, config, attribute, hidl_cb);
+}
+
+Return<void> VrComposerClient::getDisplayConfigs(Display display,
+ getDisplayConfigs_cb hidl_cb) {
+ return client_->getDisplayConfigs(display, hidl_cb);
+}
+
+Return<void> VrComposerClient::getDisplayName(Display display,
+ getDisplayName_cb hidl_cb) {
+ return client_->getDisplayName(display, hidl_cb);
+}
+
+Return<void> VrComposerClient::getDisplayType(Display display,
+ getDisplayType_cb hidl_cb) {
+ return client_->getDisplayType(display, hidl_cb);
+}
+
+Return<void> VrComposerClient::getDozeSupport(
+ Display display, getDozeSupport_cb hidl_cb) {
+ return client_->getDozeSupport(display, hidl_cb);
+}
+
+Return<void> VrComposerClient::getHdrCapabilities(
+ Display display, getHdrCapabilities_cb hidl_cb) {
+ return client_->getHdrCapabilities(display, hidl_cb);
+}
+
+Return<Error> VrComposerClient::setActiveConfig(Display display,
+ Config config) {
+ return client_->setActiveConfig(display, config);
+}
+
+Return<Error> VrComposerClient::setColorMode(Display display, ColorMode mode) {
+ return client_->setColorMode(display, mode);
+}
+
+Return<Error> VrComposerClient::setPowerMode(Display display, PowerMode mode) {
+ return client_->setPowerMode(display, mode);
+}
+
+Return<Error> VrComposerClient::setVsyncEnabled(Display display,
+ Vsync enabled) {
+ return client_->setVsyncEnabled(display, enabled);
+}
+
+Return<Error> VrComposerClient::setClientTargetSlotCount(
+ Display display, uint32_t clientTargetSlotCount) {
+ return client_->setClientTargetSlotCount(display, clientTargetSlotCount);
+}
+
+Return<Error> VrComposerClient::setInputCommandQueue(
+ const hardware::MQDescriptorSync<uint32_t>& descriptor) {
+ return client_->setInputCommandQueue(descriptor);
+}
+
+Return<void> VrComposerClient::getOutputCommandQueue(
+ getOutputCommandQueue_cb hidl_cb) {
+ return client_->getOutputCommandQueue(hidl_cb);
+}
+
+Return<void> VrComposerClient::executeCommands(uint32_t inLength,
+ const hidl_vec<hidl_handle>& inHandles, executeCommands_cb hidl_cb) {
+ return client_->executeCommands(inLength, inHandles, hidl_cb);
+}
+
} // namespace dvr
} // namespace android
diff --git a/services/vr/hardware_composer/impl/vr_composer_client.h b/services/vr/hardware_composer/impl/vr_composer_client.h
index 1236be9..f492230 100644
--- a/services/vr/hardware_composer/impl/vr_composer_client.h
+++ b/services/vr/hardware_composer/impl/vr_composer_client.h
@@ -29,37 +29,59 @@
using hardware::graphics::common::V1_0::PixelFormat;
using hardware::graphics::composer::V2_1::implementation::ComposerClient;
-class VrComposerClient : public ComposerClient {
+class VrComposerClient : public IVrComposerClient {
public:
VrComposerClient(android::dvr::VrHwc& hal);
virtual ~VrComposerClient();
+ void onHotplug(Display display, IComposerCallback::Connection connected);
+
+ // IComposerClient
+ Return<void> registerCallback(const sp<IComposerCallback>& callback) override;
+ Return<uint32_t> getMaxVirtualDisplayCount() override;
+ Return<void> createVirtualDisplay(
+ uint32_t width, uint32_t height, PixelFormat formatHint,
+ uint32_t outputBufferSlotCount, createVirtualDisplay_cb hidl_cb) override;
+ Return<Error> destroyVirtualDisplay(Display display) override;
+ Return<void> createLayer(Display display, uint32_t bufferSlotCount,
+ createLayer_cb hidl_cb) override;
+ Return<Error> destroyLayer(Display display, Layer layer) override;
+ Return<void> getActiveConfig(Display display,
+ getActiveConfig_cb hidl_cb) override;
+ Return<Error> getClientTargetSupport(
+ Display display, uint32_t width, uint32_t height, PixelFormat format,
+ Dataspace dataspace) override;
+ Return<void> getColorModes(Display display,
+ getColorModes_cb hidl_cb) override;
+ Return<void> getDisplayAttribute(
+ Display display, Config config, Attribute attribute,
+ getDisplayAttribute_cb hidl_cb) override;
+ Return<void> getDisplayConfigs(Display display,
+ getDisplayConfigs_cb hidl_cb) override;
+ Return<void> getDisplayName(Display display,
+ getDisplayName_cb hidl_cb) override;
+ Return<void> getDisplayType(Display display,
+ getDisplayType_cb hidl_cb) override;
+ Return<void> getDozeSupport(Display display,
+ getDozeSupport_cb hidl_cb) override;
+ Return<void> getHdrCapabilities(Display display,
+ getHdrCapabilities_cb hidl_cb) override;
+ Return<Error> setActiveConfig(Display display, Config config) override;
+ Return<Error> setColorMode(Display display, ColorMode mode) override;
+ Return<Error> setPowerMode(Display display, PowerMode mode) override;
+ Return<Error> setVsyncEnabled(Display display, Vsync enabled) override;
+ Return<Error> setClientTargetSlotCount(
+ Display display, uint32_t clientTargetSlotCount) override;
+ Return<Error> setInputCommandQueue(
+ const hardware::MQDescriptorSync<uint32_t>& descriptor) override;
+ Return<void> getOutputCommandQueue(
+ getOutputCommandQueue_cb hidl_cb) override;
+ Return<void> executeCommands(
+ uint32_t inLength, const hidl_vec<hidl_handle>& inHandles,
+ executeCommands_cb hidl_cb) override;
+
private:
- class VrCommandReader : public ComposerClient::CommandReader {
- public:
- VrCommandReader(VrComposerClient& client);
- ~VrCommandReader() override;
-
- bool parseCommand(IComposerClient::Command command,
- uint16_t length) override;
-
- private:
- bool parseSetLayerInfo(uint16_t length);
- bool parseSetClientTargetMetadata(uint16_t length);
- bool parseSetLayerBufferMetadata(uint16_t length);
-
- IVrComposerClient::BufferMetadata readBufferMetadata();
-
- VrComposerClient& mVrClient;
- android::dvr::VrHwc& mVrHal;
-
- VrCommandReader(const VrCommandReader&) = delete;
- void operator=(const VrCommandReader&) = delete;
- };
-
- std::unique_ptr<CommandReader> createCommandReader() override;
-
- dvr::VrHwc& mVrHal;
+ std::unique_ptr<ComposerClient> client_;
VrComposerClient(const VrComposerClient&) = delete;
void operator=(const VrComposerClient&) = delete;
diff --git a/services/vr/hardware_composer/impl/vr_hwc.cpp b/services/vr/hardware_composer/impl/vr_hwc.cpp
index 5d51827..565e5d3 100644
--- a/services/vr/hardware_composer/impl/vr_hwc.cpp
+++ b/services/vr/hardware_composer/impl/vr_hwc.cpp
@@ -820,7 +820,6 @@
sp<VrComposerClient> client;
if (client_ == nullptr) {
client = new VrComposerClient(*this);
- client->initialize();
} else {
ALOGE("Already have a client");
status = Error::NO_RESOURCES;
@@ -852,12 +851,5 @@
return iter == displays_.end() ? nullptr : iter->second.get();
}
-ComposerView* GetComposerViewFromIComposer(
- hardware::graphics::composer::V2_1::IComposer* composer) {
- return static_cast<VrHwc*>(composer);
-}
-
-IComposer* HIDL_FETCH_IComposer(const char*) { return new VrHwc(); }
-
} // namespace dvr
} // namespace android
diff --git a/services/vr/hardware_composer/impl/vr_hwc.h b/services/vr/hardware_composer/impl/vr_hwc.h
index df04208..523cda3 100644
--- a/services/vr/hardware_composer/impl/vr_hwc.h
+++ b/services/vr/hardware_composer/impl/vr_hwc.h
@@ -309,13 +309,6 @@
void operator=(const VrHwc&) = delete;
};
-
-ComposerView* GetComposerViewFromIComposer(
- hardware::graphics::composer::V2_1::IComposer* composer);
-
-hardware::graphics::composer::V2_1::IComposer* HIDL_FETCH_IComposer(
- const char* name);
-
} // namespace dvr
} // namespace android
diff --git a/services/vr/hardware_composer/vr_hardware_composer_service.cpp b/services/vr/hardware_composer/vr_hardware_composer_service.cpp
index f980220..e36b0ae 100644
--- a/services/vr/hardware_composer/vr_hardware_composer_service.cpp
+++ b/services/vr/hardware_composer/vr_hardware_composer_service.cpp
@@ -26,22 +26,18 @@
// Register the hwbinder HWC HAL service used by SurfaceFlinger while in VR
// mode.
- const char instance[] = "vr";
- android::sp<IComposer> service =
- android::dvr::HIDL_FETCH_IComposer(instance);
+ android::sp<android::dvr::VrHwc> service = new android::dvr::VrHwc();
LOG_ALWAYS_FATAL_IF(!service.get(), "Failed to get service");
LOG_ALWAYS_FATAL_IF(service->isRemote(), "Service is remote");
+ const char instance[] = "vr";
LOG_ALWAYS_FATAL_IF(service->registerAsService(instance) != android::OK,
"Failed to register service");
android::sp<android::dvr::VrComposer> composer =
new android::dvr::VrComposer();
-
- android::dvr::ComposerView* composer_view =
- android::dvr::GetComposerViewFromIComposer(service.get());
- composer_view->RegisterObserver(composer.get());
+ service->RegisterObserver(composer.get());
android::sp<android::IServiceManager> sm(android::defaultServiceManager());
@@ -56,7 +52,7 @@
android::hardware::ProcessState::self()->startThreadPool();
android::hardware::IPCThreadState::self()->joinThreadPool();
- composer_view->UnregisterObserver(composer.get());
+ service->UnregisterObserver(composer.get());
return 0;
}