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)