sde: Add a client for qservice in hwc.
1. Add a client for qservice in hwc and enable dynamic logging.
2. Remove common makefile and merge it to respective modules makefiles.
Change-Id: I582873c296d21ecd037225ac0be8177e52cc8cda
diff --git a/displayengine/include/utils/constants.h b/displayengine/include/utils/constants.h
index 7d7a39c..b675633 100644
--- a/displayengine/include/utils/constants.h
+++ b/displayengine/include/utils/constants.h
@@ -45,6 +45,7 @@
#define SET_BIT(value, bit) ((value) | (1 << (bit)))
#define CLEAR_BIT(value, bit) ((value) & (~(1 << (bit))))
+#define IS_BIT(value, bit) ((value) & (1 << (bit)))
namespace sde {
diff --git a/displayengine/libs/common.mk b/displayengine/libs/common.mk
deleted file mode 100644
index 24ca6b1..0000000
--- a/displayengine/libs/common.mk
+++ /dev/null
@@ -1,39 +0,0 @@
-#Common headers
-common_includes := hardware/qcom/display/displayengine/include/
-common_includes += hardware/qcom/display/libgralloc/
-common_includes += hardware/qcom/display/libcopybit/
-
-common_header_export_path := qcom/display
-
-#Common libraries external to display HAL
-common_libs := liblog libutils libcutils libhardware
-
-#Common C flags
-common_flags := -DDEBUG_CALC_FPS -Wno-missing-field-initializers
-common_flags += -Wconversion -Wall -Werror
-common_flags += -Wno-unused-parameter
-
-ifeq ($(ARCH_ARM_HAVE_NEON),true)
- common_flags += -D__ARM_HAVE_NEON
-endif
-
-ifeq ($(call is-board-platform-in-list, $(MSM_VIDC_TARGET_LIST)), true)
- common_flags += -DVENUS_COLOR_FORMAT
-endif
-
-ifeq ($(call is-board-platform-in-list, msm8994), true)
- common_flags += -DMDSS_TARGET
-endif
-
-common_deps :=
-kernel_includes :=
-
-ifeq ($(call is-vendor-board-platform,QCOM),true)
-# This check is to pick the kernel headers from the right location.
-# If the macro above is defined, we make the assumption that we have the kernel
-# available in the build tree.
-# If the macro is not present, the headers are picked from hardware/qcom/msmXXXX
-# failing which, they are picked from bionic.
- common_deps += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
- kernel_includes += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
-endif
diff --git a/displayengine/libs/core/Android.mk b/displayengine/libs/core/Android.mk
index 337cb73..92569a5 100644
--- a/displayengine/libs/core/Android.mk
+++ b/displayengine/libs/core/Android.mk
@@ -1,13 +1,15 @@
LOCAL_PATH := $(call my-dir)
-include hardware/qcom/display/displayengine/libs/common.mk
include $(CLEAR_VARS)
LOCAL_MODULE := libsde
LOCAL_MODULE_TAGS := optional
-LOCAL_C_INCLUDES := $(common_includes) $(kernel_includes)
-LOCAL_CFLAGS := $(common_flags) -DLOG_TAG=\"SDE\"
-LOCAL_SHARED_LIBRARIES := $(common_libs) libdl libsdeutils
-LOCAL_ADDITIONAL_DEPENDENCIES := $(common_deps)
+LOCAL_C_INCLUDES := hardware/qcom/display/displayengine/include/ \
+ $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
+LOCAL_CFLAGS := -Wno-missing-field-initializers -Wno-unused-parameter \
+ -Wconversion -Wall -Werror \
+ -DLOG_TAG=\"SDE\"
+LOCAL_SHARED_LIBRARIES := libdl libsdeutils
+LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
LOCAL_SRC_FILES := core_interface.cpp \
core_impl.cpp \
display_base.cpp \
diff --git a/displayengine/libs/hwc/Android.mk b/displayengine/libs/hwc/Android.mk
index a8f6464..0968160 100755
--- a/displayengine/libs/hwc/Android.mk
+++ b/displayengine/libs/hwc/Android.mk
@@ -1,16 +1,19 @@
LOCAL_PATH := $(call my-dir)
-include hardware/qcom/display/displayengine/libs/common.mk
include $(CLEAR_VARS)
LOCAL_MODULE := hwcomposer.$(TARGET_BOARD_PLATFORM)
LOCAL_MODULE_RELATIVE_PATH := hw
LOCAL_MODULE_TAGS := optional
-LOCAL_C_INCLUDES := $(common_includes) $(kernel_includes)
-LOCAL_CFLAGS := $(common_flags) -DLOG_TAG=\"SDE\"
-LOCAL_SHARED_LIBRARIES := $(common_libs) libEGL libhardware_legacy \
- libdl libsync \
- libbinder libmedia libskia libsde
-LOCAL_ADDITIONAL_DEPENDENCIES := $(common_deps)
+LOCAL_C_INCLUDES := hardware/qcom/display/displayengine/include/ \
+ hardware/qcom/display/libgralloc/ \
+ hardware/qcom/display/libqservice/ \
+ $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
+LOCAL_CFLAGS := -Wno-missing-field-initializers -Wno-unused-parameter \
+ -Wconversion -Wall -Werror \
+ -DLOG_TAG=\"SDE\"
+LOCAL_SHARED_LIBRARIES := libsde libqservice libbinder libhardware libhardware_legacy \
+ libutils libcutils
+LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
LOCAL_SRC_FILES := hwc_session.cpp \
hwc_display.cpp \
hwc_display_primary.cpp \
diff --git a/displayengine/libs/hwc/hwc_logger.cpp b/displayengine/libs/hwc/hwc_logger.cpp
index b868a90..595ea81 100755
--- a/displayengine/libs/hwc/hwc_logger.cpp
+++ b/displayengine/libs/hwc/hwc_logger.cpp
@@ -22,11 +22,38 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include <utils/constants.h>
+
#include "hwc_logger.h"
namespace sde {
HWCLogHandler HWCLogHandler::log_handler_;
+uint32_t HWCLogHandler::log_flags_ = 0x1;
+
+void HWCLogHandler::LogAll(bool enable) {
+ if (enable) {
+ log_flags_ = 0xFFFFFFFF;
+ } else {
+ log_flags_ = 0x1; // kTagNone should always be printed.
+ }
+}
+
+void HWCLogHandler::LogResources(bool enable) {
+ if (enable) {
+ log_flags_ = SET_BIT(log_flags_, kTagResources);
+ } else {
+ log_flags_ = CLEAR_BIT(log_flags_, kTagResources);
+ }
+}
+
+void HWCLogHandler::LogStrategy(bool enable) {
+ if (enable) {
+ log_flags_ = SET_BIT(log_flags_, kTagStrategy);
+ } else {
+ log_flags_ = CLEAR_BIT(log_flags_, kTagStrategy);
+ }
+}
void HWCLogHandler::Error(LogTag /*tag*/, const char *format, ...) {
va_list list;
@@ -40,16 +67,20 @@
__android_log_vprint(ANDROID_LOG_WARN, LOG_TAG, format, list);
}
-void HWCLogHandler::Info(LogTag /*tag*/, const char *format, ...) {
- va_list list;
- va_start(list, format);
- __android_log_vprint(ANDROID_LOG_INFO, LOG_TAG, format, list);
+void HWCLogHandler::Info(LogTag tag, const char *format, ...) {
+ if (IS_BIT(log_flags_, tag)) {
+ va_list list;
+ va_start(list, format);
+ __android_log_vprint(ANDROID_LOG_INFO, LOG_TAG, format, list);
+ }
}
-void HWCLogHandler::Verbose(LogTag /*tag*/, const char *format, ...) {
- va_list list;
- va_start(list, format);
- __android_log_vprint(ANDROID_LOG_VERBOSE, LOG_TAG, format, list);
+void HWCLogHandler::Verbose(LogTag tag, const char *format, ...) {
+ if (IS_BIT(log_flags_, tag)) {
+ va_list list;
+ va_start(list, format);
+ __android_log_vprint(ANDROID_LOG_VERBOSE, LOG_TAG, format, list);
+ }
}
} // namespace sde
diff --git a/displayengine/libs/hwc/hwc_logger.h b/displayengine/libs/hwc/hwc_logger.h
index 13c2e20..7568990 100755
--- a/displayengine/libs/hwc/hwc_logger.h
+++ b/displayengine/libs/hwc/hwc_logger.h
@@ -39,15 +39,19 @@
class HWCLogHandler : public LogHandler {
public:
+ static inline LogHandler* Get() { return &log_handler_; }
+ static void LogAll(bool enable);
+ static void LogResources(bool enable);
+ static void LogStrategy(bool enable);
+
virtual void Error(LogTag tag, const char *format, ...);
virtual void Warning(LogTag tag, const char *format, ...);
virtual void Info(LogTag tag, const char *format, ...);
virtual void Verbose(LogTag tag, const char *format, ...);
- static inline LogHandler* Get() { return &log_handler_; }
-
private:
static HWCLogHandler log_handler_;
+ static uint32_t log_flags_;
};
} // namespace sde
diff --git a/displayengine/libs/hwc/hwc_session.cpp b/displayengine/libs/hwc/hwc_session.cpp
index 9604782..64cd7e1 100755
--- a/displayengine/libs/hwc/hwc_session.cpp
+++ b/displayengine/libs/hwc/hwc_session.cpp
@@ -24,6 +24,9 @@
#include <core/dump_interface.h>
#include <utils/constants.h>
+#include <utils/String16.h>
+#include <binder/Parcel.h>
+#include <QService.h>
#include "hwc_session.h"
#include "hwc_logger.h"
@@ -67,14 +70,27 @@
}
int HWCSession::Init() {
+ int status = -EINVAL;
+ const char *qservice_name = "display.qservice";
+
+ // Start QService and connect to it.
+ qService::QService::init();
+ android::sp<qService::IQService> qservice = android::interface_cast<qService::IQService>(
+ android::defaultServiceManager()->getService(android::String16(qservice_name)));
+
+ if (qservice.get()) {
+ qservice->connect(this);
+ } else {
+ DLOGE("Failed to acquire %s", qservice_name);
+ return -EINVAL;
+ }
+
DisplayError error = CoreInterface::CreateCore(this, HWCLogHandler::Get(), &core_intf_);
if (UNLIKELY(error != kErrorNone)) {
DLOGE("Display core initialization failed. Error = %d", error);
return -EINVAL;
}
- int status = -EINVAL;
-
// Create and power on primary display
display_primary_ = new HWCDisplayPrimary(core_intf_, &hwc_procs_);
if (UNLIKELY(!display_primary_)) {
@@ -333,5 +349,47 @@
return kErrorNone;
}
+android::status_t HWCSession::notifyCallback(uint32_t command, const android::Parcel *input_parcel,
+ android::Parcel */*output_parcel*/) {
+ switch (command) {
+ case qService::IQService::DYNAMIC_DEBUG:
+ DynamicDebug(input_parcel);
+ break;
+
+ case qService::IQService::SCREEN_REFRESH:
+ hwc_procs_->invalidate(hwc_procs_);
+ break;
+
+ default:
+ DLOGW("QService command = %d is not supported", command);
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+void HWCSession::DynamicDebug(const android::Parcel *input_parcel) {
+ int type = input_parcel->readInt32();
+ bool enable = (input_parcel->readInt32() > 0);
+ DLOGI("type = %d enable = %d", type, enable);
+
+ switch (type) {
+ case qService::IQService::DEBUG_ALL:
+ HWCLogHandler::LogAll(enable);
+ break;
+
+ case qService::IQService::DEBUG_MDPCOMP:
+ HWCLogHandler::LogStrategy(enable);
+ break;
+
+ case qService::IQService::DEBUG_PIPE_LIFECYCLE:
+ HWCLogHandler::LogResources(enable);
+ break;
+
+ default:
+ DLOGW("type = %d is not supported", type);
+ }
+}
+
} // namespace sde
diff --git a/displayengine/libs/hwc/hwc_session.h b/displayengine/libs/hwc/hwc_session.h
index 6b3346b..9e37eed 100644
--- a/displayengine/libs/hwc/hwc_session.h
+++ b/displayengine/libs/hwc/hwc_session.h
@@ -28,12 +28,13 @@
#include <hardware/hwcomposer.h>
#include <core/core_interface.h>
#include <utils/locker.h>
+#include <IQClient.h>
#include "hwc_display_primary.h"
namespace sde {
-class HWCSession : public hwc_composer_device_1_t, public CoreEventHandler {
+class HWCSession : hwc_composer_device_1_t, CoreEventHandler, public qClient::BnQClient {
public:
struct HWCModuleMethods : public hw_module_methods_t {
HWCModuleMethods() {
@@ -66,6 +67,11 @@
// CoreEventHandler methods
virtual DisplayError Hotplug(const CoreEventHotplug &hotplug);
+ // QClient methods
+ virtual android::status_t notifyCallback(uint32_t command, const android::Parcel *input_parcel,
+ android::Parcel *output_parcel);
+ void DynamicDebug(const android::Parcel *input_parcel);
+
static Locker locker_;
CoreInterface *core_intf_;
hwc_procs_t const *hwc_procs_;
diff --git a/displayengine/libs/utils/Android.mk b/displayengine/libs/utils/Android.mk
index d5ba512..db97dd5 100644
--- a/displayengine/libs/utils/Android.mk
+++ b/displayengine/libs/utils/Android.mk
@@ -1,13 +1,13 @@
LOCAL_PATH := $(call my-dir)
-include hardware/qcom/display/displayengine/libs/common.mk
include $(CLEAR_VARS)
LOCAL_MODULE := libsdeutils
LOCAL_MODULE_TAGS := optional
-LOCAL_C_INCLUDES := $(common_includes) $(kernel_includes)
-LOCAL_CFLAGS := $(common_flags) -DLOG_TAG=\"SDE\"
-LOCAL_SHARED_LIBRARIES := $(common_libs)
-LOCAL_ADDITIONAL_DEPENDENCIES := $(common_deps)
+LOCAL_C_INCLUDES := hardware/qcom/display/displayengine/include/
+LOCAL_CFLAGS := -Wno-missing-field-initializers -Wno-unused-parameter \
+ -Wconversion -Wall -Werror \
+ -DLOG_TAG=\"SDE\"
+LOCAL_SHARED_LIBRARIES := libcutils
LOCAL_SRC_FILES := debug_android.cpp
include $(BUILD_SHARED_LIBRARY)