summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWiwit Rifa'i <wiwitrifai@google.com>2023-09-18 14:03:08 +0800
committerWiwit Rifa'i <wiwitrifai@google.com>2023-09-18 20:43:44 +0800
commit57e798f2a03d8ee22a8508e2f80b5cdc3d689df7 (patch)
tree5b5b6319d14eea8614a2bc628c0d3222937062ed
parenta38adefca986c1eb301b3be4ce229ae77683c740 (diff)
downloadcommon-57e798f2a03d8ee22a8508e2f80b5cdc3d689df7.tar.gz
libhwc2.1: avoid copying ExynosCompositionInfo unnecessarily
ExynosCompositionInfo is also not small so we should not copy ExynosCompositionInfo if it's unnecessary. Bug: 295892886 Test: trigger assignResource using hwc-tester & check simpleperf Change-Id: I1f9d9372bd6dd567f493235009a876632c2c6802
-rw-r--r--libhwc2.1/libdevice/ExynosDisplay.cpp38
-rw-r--r--libhwc2.1/libdevice/ExynosDisplay.h2
2 files changed, 18 insertions, 22 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();
};