summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWiwit Rifa'i <wiwitrifai@google.com>2023-09-21 10:38:05 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2023-09-21 10:38:05 +0000
commit9a44615265ec5510c105670b9013fdd5f9adcf9a (patch)
tree58ba2c7085f603882ccd3ab1213e14f3f916440f
parentc2012c0c6d5961e77856cc91209db10f35aa89c7 (diff)
parent57e798f2a03d8ee22a8508e2f80b5cdc3d689df7 (diff)
downloadcommon-9a44615265ec5510c105670b9013fdd5f9adcf9a.tar.gz
Merge changes from topic "optimize-instructions-count-b295892886" into udc-qpr-dev
* changes: libhwc2.1: avoid copying ExynosCompositionInfo unnecessarily libhwc2.1: avoid copying exynos_image unnecessarily
-rw-r--r--libhwc2.1/libdevice/ExynosDisplay.cpp38
-rw-r--r--libhwc2.1/libdevice/ExynosDisplay.h2
-rw-r--r--libhwc2.1/libresource/ExynosMPP.cpp6
-rw-r--r--libhwc2.1/libresource/ExynosMPP.h4
-rw-r--r--libhwc2.1/libresource/ExynosResourceManager.cpp8
-rw-r--r--libhwc2.1/libresource/ExynosResourceManager.h5
6 files changed, 30 insertions, 33 deletions
diff --git a/libhwc2.1/libdevice/ExynosDisplay.cpp b/libhwc2.1/libdevice/ExynosDisplay.cpp
index e7a61a4..3767040 100644
--- a/libhwc2.1/libdevice/ExynosDisplay.cpp
+++ b/libhwc2.1/libdevice/ExynosDisplay.cpp
@@ -925,8 +925,7 @@ void ExynosCompositionInfo::setCompressionType(uint32_t compressionType) {
mCompressionInfo.type = compressionType;
}
-void ExynosCompositionInfo::dump(String8& result)
-{
+void ExynosCompositionInfo::dump(String8& result) const {
result.appendFormat("CompositionInfo (%d)\n", mType);
result.appendFormat("mHasCompositionLayer(%d)\n", mHasCompositionLayer);
if (mHasCompositionLayer) {
@@ -2450,8 +2449,8 @@ void ExynosDisplay::printDebugInfos(String8 &reason) {
result.appendFormat("Device mGeometryChanged(%" PRIx64 "), mGeometryChanged(%" PRIx64 "), mRenderingState(%d)\n",
mDevice->mGeometryChanged, mGeometryChanged, mRenderingState);
result.appendFormat("======================= dump composition infos ================================\n");
- ExynosCompositionInfo clientCompInfo = mClientCompositionInfo;
- ExynosCompositionInfo exynosCompInfo = mExynosCompositionInfo;
+ const ExynosCompositionInfo& clientCompInfo = mClientCompositionInfo;
+ const ExynosCompositionInfo& exynosCompInfo = mExynosCompositionInfo;
clientCompInfo.dump(result);
exynosCompInfo.dump(result);
ALOGD("%s", result.string());
@@ -4853,14 +4852,11 @@ void ExynosDisplay::printConfig(exynos_win_config_data &c)
int32_t ExynosDisplay::setCompositionTargetExynosImage(uint32_t targetType, exynos_image *src_img, exynos_image *dst_img)
{
- std::optional<ExynosCompositionInfo> compositionInfo;
-
- if (targetType == COMPOSITION_CLIENT)
- compositionInfo = mClientCompositionInfo;
- else if (targetType == COMPOSITION_EXYNOS)
- compositionInfo = mExynosCompositionInfo;
-
- if (!compositionInfo) return -EINVAL;
+ if (targetType != COMPOSITION_CLIENT && targetType != COMPOSITION_EXYNOS) {
+ return -EINVAL;
+ }
+ const ExynosCompositionInfo& compositionInfo =
+ (targetType == COMPOSITION_CLIENT) ? mClientCompositionInfo : mExynosCompositionInfo;
src_img->fullWidth = mXres;
src_img->fullHeight = mYres;
@@ -4871,10 +4867,10 @@ int32_t ExynosDisplay::setCompositionTargetExynosImage(uint32_t targetType, exyn
src_img->w = mXres;
src_img->h = mYres;
- if (compositionInfo->mTargetBuffer != NULL) {
- src_img->bufferHandle = compositionInfo->mTargetBuffer;
+ if (compositionInfo.mTargetBuffer != NULL) {
+ src_img->bufferHandle = compositionInfo.mTargetBuffer;
- VendorGraphicBufferMeta gmeta(compositionInfo->mTargetBuffer);
+ VendorGraphicBufferMeta gmeta(compositionInfo.mTargetBuffer);
src_img->format = gmeta.format;
src_img->usageFlags = gmeta.producer_usage;
} else {
@@ -4883,21 +4879,21 @@ int32_t ExynosDisplay::setCompositionTargetExynosImage(uint32_t targetType, exyn
src_img->usageFlags = 0;
}
src_img->layerFlags = 0x0;
- src_img->acquireFenceFd = compositionInfo->mAcquireFence;
+ src_img->acquireFenceFd = compositionInfo.mAcquireFence;
src_img->releaseFenceFd = -1;
- src_img->dataSpace = compositionInfo->mDataSpace;
+ src_img->dataSpace = compositionInfo.mDataSpace;
src_img->blending = HWC2_BLEND_MODE_PREMULTIPLIED;
src_img->transform = 0;
- src_img->compressionInfo = compositionInfo->mCompressionInfo;
+ src_img->compressionInfo = compositionInfo.mCompressionInfo;
src_img->planeAlpha = 1;
src_img->zOrder = 0;
if ((targetType == COMPOSITION_CLIENT) && (mType == HWC_DISPLAY_VIRTUAL)) {
- if (compositionInfo->mLastIndex < mExynosCompositionInfo.mLastIndex)
+ if (compositionInfo.mLastIndex < mExynosCompositionInfo.mLastIndex)
src_img->zOrder = 0;
else
src_img->zOrder = 1000;
}
- src_img->needPreblending = compositionInfo->mNeedPreblending;
+ src_img->needPreblending = compositionInfo.mNeedPreblending;
dst_img->fullWidth = mXres;
dst_img->fullHeight = mYres;
@@ -4920,7 +4916,7 @@ int32_t ExynosDisplay::setCompositionTargetExynosImage(uint32_t targetType, exyn
dst_img->dataSpace = colorModeToDataspace(mColorMode);
dst_img->blending = HWC2_BLEND_MODE_NONE;
dst_img->transform = 0;
- dst_img->compressionInfo = compositionInfo->mCompressionInfo;
+ dst_img->compressionInfo = compositionInfo.mCompressionInfo;
dst_img->planeAlpha = 1;
dst_img->zOrder = src_img->zOrder;
diff --git a/libhwc2.1/libdevice/ExynosDisplay.h b/libhwc2.1/libdevice/ExynosDisplay.h
index 5274243..efd365b 100644
--- a/libhwc2.1/libdevice/ExynosDisplay.h
+++ b/libhwc2.1/libdevice/ExynosDisplay.h
@@ -332,7 +332,7 @@ class ExynosCompositionInfo : public ExynosMPPSource {
void setTargetBuffer(ExynosDisplay *display, buffer_handle_t handle,
int32_t acquireFence, android_dataspace dataspace);
void setCompressionType(uint32_t compressionType);
- void dump(String8& result);
+ void dump(String8& result) const;
String8 getTypeStr();
};
diff --git a/libhwc2.1/libresource/ExynosMPP.cpp b/libhwc2.1/libresource/ExynosMPP.cpp
index 5045cde..afc72f3 100644
--- a/libhwc2.1/libresource/ExynosMPP.cpp
+++ b/libhwc2.1/libresource/ExynosMPP.cpp
@@ -125,14 +125,12 @@ ExynosMPPSource::ExynosMPPSource(uint32_t sourceType, void *source)
mMidImg.releaseFenceFd = -1;
}
-void ExynosMPPSource::setExynosImage(exynos_image src_img, exynos_image dst_img)
-{
+void ExynosMPPSource::setExynosImage(const exynos_image& src_img, const exynos_image& dst_img) {
mSrcImg = src_img;
mDstImg = dst_img;
}
-void ExynosMPPSource::setExynosMidImage(exynos_image mid_img)
-{
+void ExynosMPPSource::setExynosMidImage(const exynos_image& mid_img) {
mMidImg = mid_img;
}
diff --git a/libhwc2.1/libresource/ExynosMPP.h b/libhwc2.1/libresource/ExynosMPP.h
index 0877841..7ea3fbe 100644
--- a/libhwc2.1/libresource/ExynosMPP.h
+++ b/libhwc2.1/libresource/ExynosMPP.h
@@ -451,8 +451,8 @@ class ExynosMPPSource {
ExynosMPPSource();
ExynosMPPSource(uint32_t sourceType, void *source);
~ExynosMPPSource(){};
- void setExynosImage(exynos_image src_img, exynos_image dst_img);
- void setExynosMidImage(exynos_image mid_img);
+ void setExynosImage(const exynos_image& src_img, const exynos_image& dst_img);
+ void setExynosMidImage(const exynos_image& mid_img);
uint32_t mSourceType;
void *mSource;
diff --git a/libhwc2.1/libresource/ExynosResourceManager.cpp b/libhwc2.1/libresource/ExynosResourceManager.cpp
index 41de2cf..4e90717 100644
--- a/libhwc2.1/libresource/ExynosResourceManager.cpp
+++ b/libhwc2.1/libresource/ExynosResourceManager.cpp
@@ -808,9 +808,11 @@ int32_t ExynosResourceManager::updateExynosComposition(ExynosDisplay *display)
return ret;
}
-int32_t ExynosResourceManager::changeLayerFromClientToDevice(ExynosDisplay *display, ExynosLayer *layer,
- uint32_t layer_index, exynos_image m2m_out_img, ExynosMPP *m2mMPP, ExynosMPP *otfMPP)
-{
+int32_t ExynosResourceManager::changeLayerFromClientToDevice(ExynosDisplay* display,
+ ExynosLayer* layer,
+ uint32_t layer_index,
+ const exynos_image& m2m_out_img,
+ ExynosMPP* m2mMPP, ExynosMPP* otfMPP) {
int ret = NO_ERROR;
if ((ret = display->removeClientCompositionLayer(layer_index)) != NO_ERROR) {
ALOGD("removeClientCompositionLayer return error(%d)", ret);
diff --git a/libhwc2.1/libresource/ExynosResourceManager.h b/libhwc2.1/libresource/ExynosResourceManager.h
index e996554..c8f308f 100644
--- a/libhwc2.1/libresource/ExynosResourceManager.h
+++ b/libhwc2.1/libresource/ExynosResourceManager.h
@@ -187,8 +187,9 @@ class ExynosResourceManager {
struct exynos_image &dst, ExynosMPPSource *mppSrc);
private:
- int32_t changeLayerFromClientToDevice(ExynosDisplay *display, ExynosLayer *layer,
- uint32_t layer_index, exynos_image m2m_out_img, ExynosMPP *m2mMPP, ExynosMPP *otfMPP);
+ int32_t changeLayerFromClientToDevice(ExynosDisplay* display, ExynosLayer* layer,
+ uint32_t layer_index, const exynos_image& m2m_out_img,
+ ExynosMPP* m2mMPP, ExynosMPP* otfMPP);
void dump(const restriction_classification_t, String8 &result) const;
sp<DstBufMgrThread> mDstBufMgrThread;