Force vrhwc/wm to report the native resolution
Due to some Yak-shaving, this also involved a partial conversion of our
libraries to soong.
Notes:
* I also changed the name of libsensor to libvrsensor to avoid a naming
clash with an existing library
* The remaining libraries will be soongified in a separate CL
Bug: 36139334
Test: Build and run vr apps.
Change-Id: Ib39687bd01e3d2e1c30adc54e18f362a85954ab9
diff --git a/services/vr/Android.bp b/services/vr/Android.bp
index af8212a..80df479 100644
--- a/services/vr/Android.bp
+++ b/services/vr/Android.bp
@@ -1,3 +1,3 @@
subdirs = [
- "*/*",
+ "*",
]
diff --git a/services/vr/sensord/Android.mk b/services/vr/sensord/Android.mk
index f86664e..f9a1cec 100644
--- a/services/vr/sensord/Android.mk
+++ b/services/vr/sensord/Android.mk
@@ -30,7 +30,7 @@
staticLibraries := \
libdvrcommon \
- libsensor \
+ libvrsensor \
libperformance \
libbufferhub \
libpdx_default_transport \
diff --git a/services/vr/virtual_touchpad/Android.bp b/services/vr/virtual_touchpad/Android.bp
new file mode 100644
index 0000000..ad999b7
--- /dev/null
+++ b/services/vr/virtual_touchpad/Android.bp
@@ -0,0 +1,116 @@
+
+
+// Touchpad implementation.
+
+src = [
+ "EvdevInjector.cpp",
+ "VirtualTouchpadEvdev.cpp",
+]
+
+shared_libs = [
+ "libbase",
+ "liblog",
+ "libutils",
+]
+
+cc_library {
+ srcs: src,
+ export_include_dirs: ["include"],
+ shared_libs: shared_libs,
+ cppflags: ["-std=c++11"],
+ cflags: ["-DLOG_TAG=\"VrVirtualTouchpad\""],
+ name: "libvirtualtouchpad",
+ tags: ["optional"],
+}
+
+// Touchpad unit tests.
+
+test_static_libs = [
+ "libcutils",
+ "libvirtualtouchpad",
+]
+
+test_shared_libs = [
+ "libbase",
+ "liblog",
+ "libutils",
+]
+
+test_src_files = ["tests/VirtualTouchpad_test.cpp"]
+
+cc_test {
+ srcs: test_src_files,
+ static_libs: test_static_libs,
+ shared_libs: test_shared_libs,
+ cppflags = [
+ "-std=c++11",
+ ],
+ host_ldlibs = [
+ "-llog",
+ ],
+ name: "VirtualTouchpad_test",
+ stl: "libc++_static",
+ tags: [ "optional" ],
+}
+
+// Service.
+
+service_src = [
+ "main.cpp",
+ "VirtualTouchpadService.cpp",
+ "aidl/android/dvr/VirtualTouchpadService.aidl",
+]
+
+service_static_libs = [
+ "libcutils",
+ "libvirtualtouchpad",
+]
+
+service_shared_libs = [
+ "libbase",
+ "libbinder",
+ "liblog",
+ "libutils",
+]
+
+cc_binary {
+ srcs: service_src,
+ static_libs: service_static_libs,
+ shared_libs: service_shared_libs,
+ cppflags: ["-std=c++11"],
+ cflags: [
+ "-DLOG_TAG=\"VrVirtualTouchpad\"",
+ "-DSELINUX_ACCESS_CONTROL",
+ ],
+ host_ldlibs: ["-llog"],
+ name: "virtual_touchpad",
+ tags: ["optional"],
+ init_rc: ["virtual_touchpad.rc"],
+ compile_multilib: "64",
+ stl: "libc++_static",
+}
+
+// Touchpad client library.
+
+client_src = [
+ "VirtualTouchpadClient.cpp",
+ "aidl/android/dvr/VirtualTouchpadService.aidl",
+]
+
+client_shared_libs = [
+ "libbase",
+ "libbinder",
+ "liblog",
+ "libutils",
+]
+
+cc_library {
+ srcs: client_src,
+ shared_libs: client_shared_libs,
+ cppflags: ["-std=c++11"],
+ cflags: ["-DLOG_TAG=\"VirtualTouchpadClient\""],
+ host_ldlibs: ["-llog"],
+ name: "libvirtualtouchpadclient",
+ tags: ["optional"],
+ export_include_dirs: ["include"],
+}
diff --git a/services/vr/virtual_touchpad/Android.mk b/services/vr/virtual_touchpad/Android.mk
deleted file mode 100644
index 88b2dd9..0000000
--- a/services/vr/virtual_touchpad/Android.mk
+++ /dev/null
@@ -1,107 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-
-# Touchpad implementation.
-
-src := \
- EvdevInjector.cpp \
- VirtualTouchpadEvdev.cpp
-
-shared_libs := \
- libbase \
- libutils
-
-include $(CLEAR_VARS)
-LOCAL_SRC_FILES := $(src)
-LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
-LOCAL_SHARED_LIBRARIES := $(shared_libs)
-LOCAL_CPPFLAGS += -std=c++11
-LOCAL_CFLAGS += -DLOG_TAG=\"VrVirtualTouchpad\"
-LOCAL_MODULE := libvirtualtouchpad
-LOCAL_MODULE_TAGS := optional
-include $(BUILD_STATIC_LIBRARY)
-
-
-# Touchpad unit tests.
-
-test_static_libs := \
- libbase \
- libcutils \
- libvirtualtouchpad
-
-test_shared_libs := \
- libutils
-
-test_src_files := \
- tests/VirtualTouchpad_test.cpp
-
-$(foreach file,$(test_src_files), \
- $(eval include $(CLEAR_VARS)) \
- $(eval LOCAL_SRC_FILES := $(file)) \
- $(eval LOCAL_C_INCLUDES := $(LOCAL_PATH)/include) \
- $(eval LOCAL_STATIC_LIBRARIES := $(test_static_libs)) \
- $(eval LOCAL_SHARED_LIBRARIES := $(test_shared_libs)) \
- $(eval LOCAL_CPPFLAGS += -std=c++11) \
- $(eval LOCAL_LDLIBS := -llog) \
- $(eval LOCAL_MODULE := $(notdir $(file:%.cpp=%))) \
- $(eval LOCAL_MODULE_TAGS := optional) \
- $(eval LOCAL_CXX_STL := libc++_static) \
- $(eval include $(BUILD_NATIVE_TEST)) \
-)
-
-
-# Service.
-
-src := \
- main.cpp \
- VirtualTouchpadService.cpp \
- aidl/android/dvr/VirtualTouchpadService.aidl
-
-static_libs := \
- libcutils \
- libvirtualtouchpad
-
-shared_libs := \
- libbase \
- libbinder \
- libutils
-
-include $(CLEAR_VARS)
-LOCAL_SRC_FILES := $(src)
-LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
-LOCAL_STATIC_LIBRARIES := $(static_libs)
-LOCAL_SHARED_LIBRARIES := $(shared_libs)
-LOCAL_CPPFLAGS += -std=c++11
-LOCAL_CFLAGS += -DLOG_TAG=\"VrVirtualTouchpad\" -DSELINUX_ACCESS_CONTROL
-LOCAL_LDLIBS := -llog
-LOCAL_MODULE := virtual_touchpad
-LOCAL_MODULE_TAGS := optional
-LOCAL_INIT_RC := virtual_touchpad.rc
-LOCAL_MULTILIB := 64
-LOCAL_CXX_STL := libc++_static
-include $(BUILD_EXECUTABLE)
-
-
-# Touchpad client library.
-
-src := \
- VirtualTouchpadClient.cpp \
- aidl/android/dvr/VirtualTouchpadService.aidl
-
-shared_libs := \
- libbase \
- libbinder \
- libutils
-
-include $(CLEAR_VARS)
-LOCAL_SRC_FILES := $(src)
-LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
-LOCAL_SHARED_LIBRARIES := $(shared_libs)
-LOCAL_CPPFLAGS += -std=c++11
-LOCAL_CFLAGS += -DLOG_TAG=\"VirtualTouchpadClient\"
-LOCAL_LDLIBS := -llog
-LOCAL_MODULE := libvirtualtouchpadclient
-LOCAL_MODULE_TAGS := optional
-LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include
-include $(BUILD_STATIC_LIBRARY)
diff --git a/services/vr/vr_window_manager/Android.bp b/services/vr/vr_window_manager/Android.bp
new file mode 100644
index 0000000..a7a341c
--- /dev/null
+++ b/services/vr/vr_window_manager/Android.bp
@@ -0,0 +1,103 @@
+// 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.
+
+subdirs = [ "composer", ]
+
+native_src = [
+ "application.cpp",
+ "controller_mesh.cpp",
+ "elbow_model.cpp",
+ "hwc_callback.cpp",
+ "reticle.cpp",
+ "shell_view.cpp",
+ "surface_flinger_view.cpp",
+ "texture.cpp",
+ "vr_window_manager.cpp",
+ "vr_window_manager_binder.cpp",
+ "aidl/android/service/vr/IVrWindowManager.aidl",
+ "display_view.cpp",
+]
+
+static_libs = [
+ "libdisplay",
+ "libbufferhub",
+ "libbufferhubqueue",
+ "libeds",
+ "libdvrgraphics",
+ "libdvrcommon",
+ "libhwcomposer-client",
+ "libvrsensor",
+ "libperformance",
+ "libpdx_default_transport",
+ "libcutils",
+ "libvr_manager",
+ "libvirtualtouchpadclient",
+]
+
+shared_libs = [
+ "android.dvr.composer@1.0",
+ "android.hardware.graphics.composer@2.1",
+ "libvrhwc",
+ "libbase",
+ "libbinder",
+ "libinput",
+ "libhardware",
+ "libhwbinder",
+ "libsync",
+ "libutils",
+ "libgui",
+ "libEGL",
+ "libGLESv2",
+ "libvulkan",
+ "libsync",
+ "libui",
+ "libhidlbase",
+ "libhidltransport",
+ "liblog",
+]
+
+cc_binary {
+ srcs: native_src,
+ static_libs: static_libs,
+ shared_libs: shared_libs,
+ cflags: ["-DGL_GLEXT_PROTOTYPES", "-DEGL_EGLEXT_PROTOTYPES", "-DLOG_TAG=\"VrWindowManager\""],
+ host_ldlibs: ["-llog"],
+ name: "vr_wm",
+ tags: ["optional"],
+ init_rc: ["vr_wm.rc"],
+}
+
+cmd_src = [
+ "vr_wm_ctl.cpp",
+ "aidl/android/service/vr/IVrWindowManager.aidl",
+]
+
+staticLibs = ["libcutils"]
+
+sharedLibs = [
+ "libbase",
+ "libbinder",
+ "libutils",
+]
+
+cc_binary {
+ srcs: cmd_src,
+ static_libs: staticLibs,
+ shared_libs: sharedLibs,
+ cppflags: ["-std=c++11"],
+ cflags: ["-DLOG_TAG=\"vrwmctl\""],
+ host_ldlibs: ["-llog"],
+ name: "vr_wm_ctl",
+ tags: ["optional"],
+}
diff --git a/services/vr/vr_window_manager/Android.mk b/services/vr/vr_window_manager/Android.mk
deleted file mode 100644
index 59ef63c..0000000
--- a/services/vr/vr_window_manager/Android.mk
+++ /dev/null
@@ -1,100 +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)
-
-native_src := \
- application.cpp \
- controller_mesh.cpp \
- display_view.cpp \
- elbow_model.cpp \
- hwc_callback.cpp \
- reticle.cpp \
- shell_view.cpp \
- surface_flinger_view.cpp \
- texture.cpp \
- vr_window_manager.cpp \
- vr_window_manager_binder.cpp \
- aidl/android/service/vr/IVrWindowManager.aidl
-
-static_libs := \
- libdisplay \
- libbufferhub \
- libbufferhubqueue \
- libeds \
- libdvrgraphics \
- libdvrcommon \
- libhwcomposer-client \
- libsensor \
- libperformance \
- libpdx_default_transport \
- libcutils \
- libvr_manager \
- libvirtualtouchpadclient
-
-shared_libs := \
- android.dvr.composer@1.0 \
- android.hardware.graphics.composer@2.1 \
- libvrhwc \
- libbase \
- libbinder \
- libinput \
- libhardware \
- libhwbinder \
- libsync \
- libutils \
- libgui \
- libEGL \
- libGLESv2 \
- libvulkan \
- libsync \
- libui \
- libhidlbase \
- libhidltransport
-
-include $(CLEAR_VARS)
-LOCAL_SRC_FILES := $(native_src)
-LOCAL_STATIC_LIBRARIES := $(static_libs)
-LOCAL_SHARED_LIBRARIES := $(shared_libs)
-LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES
-LOCAL_CFLAGS += -DEGL_EGLEXT_PROTOTYPES
-LOCAL_CFLAGS += -DLOG_TAG=\"VrWindowManager\"
-LOCAL_LDLIBS := -llog
-LOCAL_MODULE := vr_wm
-LOCAL_MODULE_TAGS := optional
-LOCAL_INIT_RC := vr_wm.rc
-include $(BUILD_EXECUTABLE)
-
-cmd_src := \
- vr_wm_ctl.cpp \
- aidl/android/service/vr/IVrWindowManager.aidl
-
-static_libs := \
- libcutils
-
-shared_libs := \
- libbase \
- libbinder \
- libutils
-
-include $(CLEAR_VARS)
-LOCAL_SRC_FILES := $(cmd_src)
-LOCAL_STATIC_LIBRARIES := $(static_libs)
-LOCAL_SHARED_LIBRARIES := $(shared_libs)
-LOCAL_CPPFLAGS += -std=c++11
-LOCAL_CFLAGS += -DLOG_TAG=\"vrwmctl\"
-LOCAL_LDLIBS := -llog
-LOCAL_MODULE := vr_wm_ctl
-LOCAL_MODULE_TAGS := optional
-include $(BUILD_EXECUTABLE)
diff --git a/services/vr/vr_window_manager/composer/Android.bp b/services/vr/vr_window_manager/composer/Android.bp
index 7c8bb86..4349269 100644
--- a/services/vr/vr_window_manager/composer/Android.bp
+++ b/services/vr/vr_window_manager/composer/Android.bp
@@ -13,6 +13,10 @@
static_libs: [
"libhwcomposer-client",
+ "libdisplay",
+ "libpdx_default_transport",
+ "libbufferhub",
+ "libbufferhubqueue",
],
shared_libs: [
diff --git a/services/vr/vr_window_manager/composer/impl/vr_hwc.cpp b/services/vr/vr_window_manager/composer/impl/vr_hwc.cpp
index 8b50c01..99e21ec 100644
--- a/services/vr/vr_window_manager/composer/impl/vr_hwc.cpp
+++ b/services/vr/vr_window_manager/composer/impl/vr_hwc.cpp
@@ -21,6 +21,8 @@
#include <mutex>
+#include <private/dvr/display_client.h>
+
#include "vr_composer_client.h"
using namespace android::hardware::graphics::common::V1_0;
@@ -310,12 +312,32 @@
return Error::BAD_CONFIG;
}
+ int error = 0;
+ auto display_client = DisplayClient::Create(&error);
+ SystemDisplayMetrics metrics;
+
+ if (error) {
+ ALOGE("Could not connect to display service : %s(%d)", strerror(error), error);
+ } else {
+ error = display_client->GetDisplayMetrics(&metrics);
+
+ if (error) {
+ ALOGE("Could not get display metrics from display service : %s(%d)", strerror(error), error);
+ }
+ }
+
+ if (error) {
+ metrics.display_native_width = 1080;
+ metrics.display_native_height = 1920;
+ ALOGI("Setting display metrics to default : width=%d height=%d", metrics.display_native_width, metrics.display_native_height);
+ }
+
switch (attribute) {
case IComposerClient::Attribute::WIDTH:
- *outValue = 1080;
+ *outValue = metrics.display_native_width;
break;
case IComposerClient::Attribute::HEIGHT:
- *outValue = 1920;
+ *outValue = metrics.display_native_height;
break;
case IComposerClient::Attribute::VSYNC_PERIOD:
*outValue = 1000 * 1000 * 1000 / 30; // 30fps
diff --git a/services/vr/vr_window_manager/hwc_callback.cpp b/services/vr/vr_window_manager/hwc_callback.cpp
index b755c60..2d2a85c 100644
--- a/services/vr/vr_window_manager/hwc_callback.cpp
+++ b/services/vr/vr_window_manager/hwc_callback.cpp
@@ -41,6 +41,7 @@
base::unique_fd HwcCallback::OnNewFrame(const ComposerView::Frame& display_frame) {
auto& frame = display_frame.layers;
std::vector<HwcLayer> hwc_frame(frame.size());
+
for (size_t i = 0; i < frame.size(); ++i) {
hwc_frame[i] = HwcLayer{
.fence = frame[i].fence,
diff --git a/services/vr/vr_window_manager/surface_flinger_view.cpp b/services/vr/vr_window_manager/surface_flinger_view.cpp
index 2011967..46eb880 100644
--- a/services/vr/vr_window_manager/surface_flinger_view.cpp
+++ b/services/vr/vr_window_manager/surface_flinger_view.cpp
@@ -1,6 +1,7 @@
#include "surface_flinger_view.h"
#include <impl/vr_composer_view.h>
+#include <private/dvr/display_client.h>
#include <private/dvr/native_buffer.h>
#include "hwc_callback.h"
@@ -38,9 +39,29 @@
vr_composer_view_->Initialize(GetComposerViewFromIComposer(
vr_hwcomposer_.get()));
- // TODO(dnicoara): Query this from the composer service.
- width_ = 1920;
- height_ = 1080;
+ int error = 0;
+ auto display_client = DisplayClient::Create(&error);
+ SystemDisplayMetrics metrics;
+
+ if (error) {
+ ALOGE("Could not connect to display service : %s(%d)", strerror(error), error);
+ } else {
+ error = display_client->GetDisplayMetrics(&metrics);
+
+ if (error) {
+ ALOGE("Could not get display metrics from display service : %s(%d)", strerror(error), error);
+ }
+ }
+
+ if (error) {
+ metrics.display_native_height = 1920;
+ metrics.display_native_width = 1080;
+ ALOGI("Setting display metrics to default : width=%d height=%d", metrics.display_native_height, metrics.display_native_width);
+ }
+
+ // TODO(alexst): Refactor ShellView to account for orientation and change this back.
+ width_ = metrics.display_native_height;
+ height_ = metrics.display_native_width;
return true;
}