Merge "sdm: Remove duplicate bit clock rates."
diff --git a/composer/display_null.h b/composer/display_null.h
index 7222faa..bcc8dbb 100644
--- a/composer/display_null.h
+++ b/composer/display_null.h
@@ -64,6 +64,7 @@
virtual string Dump() { return ""; }
virtual bool IsSupportSsppTonemap() { return false; }
virtual bool CanSkipValidate() { return true; }
+ virtual bool GameEnhanceSupported() { return false; }
MAKE_NO_OP(TeardownConcurrentWriteback(void))
MAKE_NO_OP(Commit(LayerStack *))
diff --git a/composer/hwc_display.cpp b/composer/hwc_display.cpp
index 94bce1f..be7e039 100644
--- a/composer/hwc_display.cpp
+++ b/composer/hwc_display.cpp
@@ -525,7 +525,9 @@
HWCDebugHandler::Get()->GetProperty(DISABLE_FAST_PATH, &disable_fast_path);
fast_path_enabled_ = !(disable_fast_path == 1);
- DLOGI("Display created with id: %d", id_);
+ game_supported_ = display_intf_->GameEnhanceSupported();
+
+ DLOGI("Display created with id: %d, game_supported_: %d", id_, game_supported_);
return 0;
}
@@ -785,7 +787,7 @@
layer->update_mask.set(kClientCompRequest);
}
- if (hwc_layer->GetType() == kLayerGame) {
+ if (game_supported_ && (hwc_layer->GetType() == kLayerGame)) {
layer->flags.is_game = true;
layer->input_buffer.flags.game = true;
}
diff --git a/composer/hwc_display.h b/composer/hwc_display.h
index 6323847..fa09cfa 100644
--- a/composer/hwc_display.h
+++ b/composer/hwc_display.h
@@ -482,6 +482,7 @@
int fbt_release_fence_ = -1;
int release_fence_ = -1;
hwc2_config_t pending_config_index_ = 0;
+ bool game_supported_ = false;
};
inline int HWCDisplay::Perform(uint32_t operation, ...) {
diff --git a/composer/hwc_session.cpp b/composer/hwc_session.cpp
index 82836ce..b91d229 100644
--- a/composer/hwc_session.cpp
+++ b/composer/hwc_session.cpp
@@ -495,6 +495,21 @@
return HWC2_ERROR_NONE;
}
+int32_t HWCSession::GetVirtualDisplayId() {
+ HWDisplaysInfo hw_displays_info = {};
+ core_intf_->GetDisplaysStatus(&hw_displays_info);
+ for (auto &iter : hw_displays_info) {
+ auto &info = iter.second;
+ if (info.display_type != kVirtual) {
+ continue;
+ }
+
+ return info.display_id;
+ }
+
+ return -1;
+}
+
void HWCSession::Dump(uint32_t *out_size, char *out_buffer) {
if (!out_size) {
return;
@@ -518,7 +533,7 @@
}
uint32_t HWCSession::GetMaxVirtualDisplayCount() {
- return 1;
+ return map_info_virtual_.size();
}
int32_t HWCSession::GetActiveConfig(hwc2_display_t display, hwc2_config_t *out_config) {
@@ -1125,50 +1140,37 @@
}
}
- HWDisplaysInfo hw_displays_info = {};
- DisplayError error = core_intf_->GetDisplaysStatus(&hw_displays_info);
- if (error != kErrorNone) {
- DLOGE("Failed to get connected display list. Error = %d", error);
- return HWC2::Error::BadDisplay;
- }
-
// Lock confined to this scope
int status = -EINVAL;
- for (auto &iter : hw_displays_info) {
- auto &info = iter.second;
- if (info.display_type != kVirtual) {
- continue;
- }
-
- for (auto &map_info : map_info_virtual_) {
- client_id = map_info.client_id;
- {
- SCOPE_LOCK(locker_[client_id]);
- auto &hwc_display = hwc_display_[client_id];
- if (hwc_display) {
- continue;
- }
-
- status = virtual_display_factory_.Create(core_intf_, &buffer_allocator_, &callbacks_,
- client_id, info.display_id, width, height,
- format, set_min_lum_, set_max_lum_, &hwc_display);
- // TODO(user): validate width and height support
- if (status) {
- return HWC2::Error::NoResources;
- }
-
- {
- SCOPE_LOCK(hdr_locker_[client_id]);
- is_hdr_display_[UINT32(client_id)] = HasHDRSupport(hwc_display);
- }
-
- DLOGI("Created virtual display id:% " PRIu64 " with res: %dx%d", client_id, width, height);
-
- *out_display_id = client_id;
- map_info.disp_type = info.display_type;
- map_info.sdm_id = info.display_id;
- break;
+ for (auto &map_info : map_info_virtual_) {
+ client_id = map_info.client_id;
+ {
+ SCOPE_LOCK(locker_[client_id]);
+ auto &hwc_display = hwc_display_[client_id];
+ if (hwc_display) {
+ continue;
}
+
+ int32_t display_id = GetVirtualDisplayId();
+ status = virtual_display_factory_.Create(core_intf_, &buffer_allocator_, &callbacks_,
+ client_id, display_id, width, height,
+ format, set_min_lum_, set_max_lum_, &hwc_display);
+ // TODO(user): validate width and height support
+ if (status) {
+ return HWC2::Error::NoResources;
+ }
+
+ {
+ SCOPE_LOCK(hdr_locker_[client_id]);
+ is_hdr_display_[UINT32(client_id)] = HasHDRSupport(hwc_display);
+ }
+
+ DLOGI("Created virtual display id:% " PRIu64 " with res: %dx%d", client_id, width, height);
+
+ *out_display_id = client_id;
+ map_info.disp_type = kVirtual;
+ map_info.sdm_id = display_id;
+ break;
}
}
diff --git a/composer/hwc_session.h b/composer/hwc_session.h
index aabf77a..0bfa281 100644
--- a/composer/hwc_session.h
+++ b/composer/hwc_session.h
@@ -459,6 +459,7 @@
hwc2_display_t GetActiveBuiltinDisplay();
void HandlePendingRefresh();
void NotifyClientStatus(bool connected);
+ int32_t GetVirtualDisplayId();
CoreInterface *core_intf_ = nullptr;
HWCDisplay *hwc_display_[HWCCallbacks::kNumDisplays] = {nullptr};
diff --git a/config/display-product.mk b/config/display-product.mk
index 6d661ca..5ede20e 100644
--- a/config/display-product.mk
+++ b/config/display-product.mk
@@ -68,13 +68,21 @@
debug.mdpcomp.logs=0 \
vendor.gralloc.disable_ubwc=0 \
vendor.display.disable_scaler=0 \
- vendor.display.disable_offline_rotator=1 \
vendor.display.disable_excl_rect=0 \
vendor.display.comp_mask=0 \
vendor.display.enable_posted_start_dyn=1 \
vendor.display.enable_optimize_refresh=1 \
vendor.display.use_smooth_motion=1
+# Enable offline rotator for Bengal.
+ifneq ($(TARGET_BOARD_PLATFORM),bengal)
+PRODUCT_PROPERTY_OVERRIDES += \
+ vendor.display.disable_offline_rotator=1
+else
+PRODUCT_PROPERTY_OVERRIDES += \
+ vendor.display.disable_rotator_ubwc=1
+endif
+
ifeq ($(TARGET_BOARD_PLATFORM),kona)
PRODUCT_PROPERTY_OVERRIDES += \
debug.sf.enable_gl_backpressure=1 \
diff --git a/sdm/include/core/display_interface.h b/sdm/include/core/display_interface.h
index c1dc190..db9d961 100644
--- a/sdm/include/core/display_interface.h
+++ b/sdm/include/core/display_interface.h
@@ -903,12 +903,19 @@
@return \link DisplayError \endlink
*/
virtual DisplayError SetBLScale(uint32_t level) = 0;
+
/*! @brief Method to check if the Default resources are freed for display
@return \link bool \endlink
*/
virtual bool CheckResourceState() = 0;
+ /*! @brief Method to check if game enhance feature is supported for display
+
+ @return \link bool \endlink
+ */
+ virtual bool GameEnhanceSupported() = 0;
+
protected:
virtual ~DisplayInterface() { }
};
diff --git a/sdm/include/private/color_interface.h b/sdm/include/private/color_interface.h
index 46d1715..b3a744f 100644
--- a/sdm/include/private/color_interface.h
+++ b/sdm/include/private/color_interface.h
@@ -99,6 +99,7 @@
virtual DisplayError ColorIntfConvertToPPFeature(PPFeaturesConfig *out_features,
uint32_t disp_id, bool enable,
const std::string &hw_asset, void *in_data) = 0;
+ virtual DisplayError ColorIntfGameEnhancementSupported(bool *supported) = 0;
protected:
virtual ~ColorInterface() {}
diff --git a/sdm/libs/core/color_manager.cpp b/sdm/libs/core/color_manager.cpp
index b9a33e8..671fdea 100644
--- a/sdm/libs/core/color_manager.cpp
+++ b/sdm/libs/core/color_manager.cpp
@@ -490,6 +490,16 @@
return support_stc_tonemap_;
}
+bool ColorManagerProxy::GameEnhanceSupported() {
+ bool supported = false;
+
+ if (color_intf_) {
+ color_intf_->ColorIntfGameEnhancementSupported(&supported);
+ }
+
+ return supported;
+}
+
DisplayError ColorManagerProxy::ConvertToPPFeatures(HwConfigOutputParams *params,
PPFeaturesConfig *out_data) {
if (!params || !out_data) {
diff --git a/sdm/libs/core/color_manager.h b/sdm/libs/core/color_manager.h
index c8f47e9..c8464ad 100644
--- a/sdm/libs/core/color_manager.h
+++ b/sdm/libs/core/color_manager.h
@@ -152,6 +152,7 @@
uint32_t intent);
DisplayError Validate(HWLayers *hw_layers);
bool IsSupportStcTonemap();
+ bool GameEnhanceSupported();
protected:
ColorManagerProxy() {}
diff --git a/sdm/libs/core/display_base.cpp b/sdm/libs/core/display_base.cpp
index 8f60f08..f9d33db 100644
--- a/sdm/libs/core/display_base.cpp
+++ b/sdm/libs/core/display_base.cpp
@@ -438,6 +438,7 @@
return error;
}
+ comp_manager_->SetSafeMode(false);
DLOGI_IF(kTagDisplay, "Exiting commit for display: %d-%d", display_id_, display_type_);
@@ -2062,4 +2063,11 @@
return comp_manager_->CheckResourceState(display_comp_ctx_);
}
+bool DisplayBase::GameEnhanceSupported() {
+ if (color_mgr_) {
+ return color_mgr_->GameEnhanceSupported();
+ }
+ return false;
+}
+
} // namespace sdm
diff --git a/sdm/libs/core/display_base.h b/sdm/libs/core/display_base.h
index 00d1799..691d2b4 100644
--- a/sdm/libs/core/display_base.h
+++ b/sdm/libs/core/display_base.h
@@ -160,6 +160,7 @@
virtual bool CanSkipValidate();
virtual DisplayError SetBLScale(uint32_t level) { return kErrorNotSupported; }
virtual bool CheckResourceState();
+ virtual bool GameEnhanceSupported();
protected:
const char *kBt2020Pq = "bt2020_pq";
diff --git a/sdm/libs/core/display_builtin.cpp b/sdm/libs/core/display_builtin.cpp
index 7228049..076e2ef 100644
--- a/sdm/libs/core/display_builtin.cpp
+++ b/sdm/libs/core/display_builtin.cpp
@@ -626,7 +626,7 @@
}
ret = dpps_pu_lock_.WaitFinite(kPuTimeOutMs);
if (ret) {
- DLOGE("failed to %s partial update ret %d", ((enable) ? "enable" : "disable"), ret);
+ DLOGW("failed to %s partial update ret %d", ((enable) ? "enable" : "disable"), ret);
error = kErrorTimeOut;
}
break;
diff --git a/sdm/libs/core/drm/hw_events_drm.cpp b/sdm/libs/core/drm/hw_events_drm.cpp
index 25bad21..16a7249 100644
--- a/sdm/libs/core/drm/hw_events_drm.cpp
+++ b/sdm/libs/core/drm/hw_events_drm.cpp
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
+* Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -332,6 +332,11 @@
prctl(PR_SET_NAME, event_thread_name_.c_str(), 0, 0, 0);
setpriority(PRIO_PROCESS, 0, kThreadPriorityUrgent);
+ // Real Time task with lowest priority.
+ struct sched_param param = {0};
+ param.sched_priority = sched_get_priority_min(SCHED_FIFO);
+ sched_setscheduler(0, SCHED_FIFO, ¶m);
+
while (!exit_threads_) {
int error = Sys::poll_(poll_fds_.data(), UINT32(poll_fds_.size()), -1);
if (error <= 0) {