Skip to content

Commit 514de0f

Browse files
zbw182Android (Google) Code Review
authored andcommitted
Merge "composer: surface screen part status" into main
2 parents bf25270 + 3268df1 commit 514de0f

18 files changed

+105
-52
lines changed

libs/ui/DisplayIdentification.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,8 @@ std::optional<PnpId> getPnpId(uint16_t manufacturerId) {
394394
}
395395

396396
std::optional<DisplayIdentificationInfo> parseDisplayIdentificationData(
397-
uint8_t port, const DisplayIdentificationData& data) {
397+
uint8_t port, const DisplayIdentificationData& data,
398+
android::ScreenPartStatus screenPartStatus) {
398399
if (data.empty()) {
399400
ALOGI("Display identification data is empty.");
400401
return {};
@@ -417,6 +418,7 @@ std::optional<DisplayIdentificationInfo> parseDisplayIdentificationData(
417418
.port = port,
418419
.deviceProductInfo = buildDeviceProductInfo(*edid),
419420
.preferredDetailedTimingDescriptor = edid->preferredDetailedTimingDescriptor,
421+
.screenPartStatus = screenPartStatus,
420422
};
421423
}
422424

libs/ui/include/ui/DisplayIdentification.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ std::optional<Edid> parseEdid(const DisplayIdentificationData&);
105105
std::optional<PnpId> getPnpId(uint16_t manufacturerId);
106106

107107
std::optional<DisplayIdentificationInfo> parseDisplayIdentificationData(
108-
uint8_t port, const DisplayIdentificationData&);
108+
uint8_t port, const DisplayIdentificationData&, android::ScreenPartStatus screenPartStatus);
109109

110110
PhysicalDisplayId getVirtualDisplayId(uint32_t id);
111111

libs/ui/tests/DisplayIdentification_test.cpp

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -361,13 +361,18 @@ TEST(DisplayIdentificationTest, getPnpId) {
361361
}
362362

363363
TEST(DisplayIdentificationTest, parseDisplayIdentificationData) {
364-
const auto primaryInfo = parseDisplayIdentificationData(0, getInternalEdid());
364+
const auto primaryInfo = parseDisplayIdentificationData(0, getInternalEdid(),
365+
android::ScreenPartStatus::UNSUPPORTED);
365366
ASSERT_TRUE(primaryInfo);
366367

367-
const auto secondaryInfo = parseDisplayIdentificationData(1, getExternalEdid());
368+
const auto secondaryInfo =
369+
parseDisplayIdentificationData(1, getExternalEdid(),
370+
android::ScreenPartStatus::UNSUPPORTED);
368371
ASSERT_TRUE(secondaryInfo);
369372

370-
const auto tertiaryInfo = parseDisplayIdentificationData(2, getExternalEedid());
373+
const auto tertiaryInfo =
374+
parseDisplayIdentificationData(2, getExternalEedid(),
375+
android::ScreenPartStatus::UNSUPPORTED);
371376
ASSERT_TRUE(tertiaryInfo);
372377

373378
// Display IDs should be unique.
@@ -398,7 +403,9 @@ TEST(DisplayIdentificationTest, deviceProductInfo) {
398403
using ModelYear = DeviceProductInfo::ModelYear;
399404

400405
{
401-
const auto displayIdInfo = parseDisplayIdentificationData(0, getInternalEdid());
406+
const auto displayIdInfo =
407+
parseDisplayIdentificationData(0, getInternalEdid(),
408+
android::ScreenPartStatus::UNSUPPORTED);
402409
ASSERT_TRUE(displayIdInfo);
403410
ASSERT_TRUE(displayIdInfo->deviceProductInfo);
404411
const auto& info = *displayIdInfo->deviceProductInfo;
@@ -410,7 +417,9 @@ TEST(DisplayIdentificationTest, deviceProductInfo) {
410417
EXPECT_TRUE(info.relativeAddress.empty());
411418
}
412419
{
413-
const auto displayIdInfo = parseDisplayIdentificationData(0, getExternalEdid());
420+
const auto displayIdInfo =
421+
parseDisplayIdentificationData(0, getExternalEdid(),
422+
android::ScreenPartStatus::UNSUPPORTED);
414423
ASSERT_TRUE(displayIdInfo);
415424
ASSERT_TRUE(displayIdInfo->deviceProductInfo);
416425
const auto& info = *displayIdInfo->deviceProductInfo;
@@ -424,7 +433,9 @@ TEST(DisplayIdentificationTest, deviceProductInfo) {
424433
EXPECT_TRUE(info.relativeAddress.empty());
425434
}
426435
{
427-
const auto displayIdInfo = parseDisplayIdentificationData(0, getExternalEedid());
436+
const auto displayIdInfo =
437+
parseDisplayIdentificationData(0, getExternalEedid(),
438+
android::ScreenPartStatus::UNSUPPORTED);
428439
ASSERT_TRUE(displayIdInfo);
429440
ASSERT_TRUE(displayIdInfo->deviceProductInfo);
430441
const auto& info = *displayIdInfo->deviceProductInfo;
@@ -438,7 +449,9 @@ TEST(DisplayIdentificationTest, deviceProductInfo) {
438449
EXPECT_THAT(info.relativeAddress, ElementsAre(2, 0, 0, 0));
439450
}
440451
{
441-
const auto displayIdInfo = parseDisplayIdentificationData(0, getPanasonicTvEdid());
452+
const auto displayIdInfo =
453+
parseDisplayIdentificationData(0, getPanasonicTvEdid(),
454+
android::ScreenPartStatus::UNSUPPORTED);
442455
ASSERT_TRUE(displayIdInfo);
443456
ASSERT_TRUE(displayIdInfo->deviceProductInfo);
444457
const auto& info = *displayIdInfo->deviceProductInfo;
@@ -451,7 +464,9 @@ TEST(DisplayIdentificationTest, deviceProductInfo) {
451464
EXPECT_THAT(info.relativeAddress, ElementsAre(2, 0, 0, 0));
452465
}
453466
{
454-
const auto displayIdInfo = parseDisplayIdentificationData(0, getHisenseTvEdid());
467+
const auto displayIdInfo =
468+
parseDisplayIdentificationData(0, getHisenseTvEdid(),
469+
android::ScreenPartStatus::UNSUPPORTED);
455470
ASSERT_TRUE(displayIdInfo);
456471
ASSERT_TRUE(displayIdInfo->deviceProductInfo);
457472
const auto& info = *displayIdInfo->deviceProductInfo;
@@ -465,7 +480,9 @@ TEST(DisplayIdentificationTest, deviceProductInfo) {
465480
EXPECT_THAT(info.relativeAddress, ElementsAre(1, 2, 3, 4));
466481
}
467482
{
468-
const auto displayIdInfo = parseDisplayIdentificationData(0, getCtlDisplayEdid());
483+
const auto displayIdInfo =
484+
parseDisplayIdentificationData(0, getCtlDisplayEdid(),
485+
android::ScreenPartStatus::UNSUPPORTED);
469486
ASSERT_TRUE(displayIdInfo);
470487
ASSERT_TRUE(displayIdInfo->deviceProductInfo);
471488
const auto& info = *displayIdInfo->deviceProductInfo;

services/surfaceflinger/DisplayHardware/AidlComposerHal.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include <common/trace.h>
2929
#include <fmt/core.h>
3030
#include <log/log.h>
31+
#include <ui/DisplayIdentification.h>
3132

3233
#include <aidl/android/hardware/graphics/composer3/BnComposerCallback.h>
3334

@@ -1271,7 +1272,8 @@ Error AidlComposer::getDataspaceSaturationMatrix(Dataspace dataspace, mat4* outM
12711272
}
12721273

12731274
Error AidlComposer::getDisplayIdentificationData(Display display, uint8_t* outPort,
1274-
std::vector<uint8_t>* outData) {
1275+
std::vector<uint8_t>* outData,
1276+
android::ScreenPartStatus* outScreenPartStatus) {
12751277
AidlDisplayIdentification displayIdentification;
12761278
const auto status =
12771279
mAidlComposerClient->getDisplayIdentificationData(translate<int64_t>(display),
@@ -1283,6 +1285,8 @@ Error AidlComposer::getDisplayIdentificationData(Display display, uint8_t* outPo
12831285

12841286
*outPort = static_cast<uint8_t>(displayIdentification.port);
12851287
*outData = displayIdentification.data;
1288+
*outScreenPartStatus =
1289+
static_cast<android::ScreenPartStatus>(displayIdentification.screenPartStatus);
12861290

12871291
return Error::NONE;
12881292
}

services/surfaceflinger/DisplayHardware/AidlComposerHal.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "ComposerHal.h"
2020

2121
#include <ftl/shared_mutex.h>
22+
#include <ui/DisplayIdentification.h>
2223
#include <ui/DisplayMap.h>
2324

2425
#include <functional>
@@ -180,7 +181,8 @@ class AidlComposer final : public Hwc2::Composer {
180181

181182
// Composer HAL 2.3
182183
Error getDisplayIdentificationData(Display display, uint8_t* outPort,
183-
std::vector<uint8_t>* outData) override;
184+
std::vector<uint8_t>* outData,
185+
android::ScreenPartStatus* outScreenPartStatus) override;
184186
Error setLayerColorTransform(Display display, Layer layer, const float* matrix) override;
185187
Error getDisplayedContentSamplingAttributes(Display display, PixelFormat* outFormat,
186188
Dataspace* outDataspace,

services/surfaceflinger/DisplayHardware/ComposerHal.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include <gui/BufferQueue.h>
2828
#include <gui/HdrMetadata.h>
2929
#include <math/mat4.h>
30+
#include <ui/DisplayIdentification.h>
3031
#include <ui/DisplayedFrameStats.h>
3132
#include <ui/GraphicBuffer.h>
3233
#include <ui/PictureProfileHandle.h>
@@ -93,6 +94,7 @@ using PerFrameMetadataBlob = IComposerClient::PerFrameMetadataBlob;
9394
using AidlTransform = ::aidl::android::hardware::graphics::common::Transform;
9495
using DisplayConfiguration = V3_0::DisplayConfiguration;
9596
using aidl::android::hardware::graphics::common::Hdr;
97+
using android::ScreenPartStatus;
9698

9799
class Composer {
98100
public:
@@ -234,7 +236,8 @@ class Composer {
234236

235237
// Composer HAL 2.3
236238
virtual Error getDisplayIdentificationData(Display display, uint8_t* outPort,
237-
std::vector<uint8_t>* outData) = 0;
239+
std::vector<uint8_t>* outData,
240+
android::ScreenPartStatus* outScreenPartStatus) = 0;
238241
virtual Error setLayerColorTransform(Display display, Layer layer, const float* matrix) = 0;
239242
virtual Error getDisplayedContentSamplingAttributes(Display display, PixelFormat* outFormat,
240243
Dataspace* outDataspace,

services/surfaceflinger/DisplayHardware/HWComposer.cpp

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
#include <ftl/concat.h>
3737
#include <log/log.h>
3838
#include <ui/DebugUtils.h>
39+
#include <ui/DisplayIdentification.h>
3940
#include <ui/GraphicBuffer.h>
4041
#include <utils/Errors.h>
4142

@@ -115,10 +116,12 @@ void HWComposer::setCallback(HWC2::ComposerCallback& callback) {
115116
mComposer->registerCallback(callback);
116117
}
117118

118-
bool HWComposer::getDisplayIdentificationData(hal::HWDisplayId hwcDisplayId, uint8_t* outPort,
119-
DisplayIdentificationData* outData) const {
119+
bool HWComposer::getDisplayIdentificationData(
120+
hal::HWDisplayId hwcDisplayId, uint8_t* outPort, DisplayIdentificationData* outData,
121+
android::ScreenPartStatus* outScreenPartStatus) const {
120122
const auto error = static_cast<hal::Error>(
121-
mComposer->getDisplayIdentificationData(hwcDisplayId, outPort, outData));
123+
mComposer->getDisplayIdentificationData(hwcDisplayId, outPort, outData,
124+
outScreenPartStatus));
122125
if (error != hal::Error::NONE) {
123126
if (error != hal::Error::UNSUPPORTED) {
124127
LOG_HWC_DISPLAY_ERROR(hwcDisplayId, to_string(error).c_str());
@@ -1174,8 +1177,9 @@ std::optional<DisplayIdentificationInfo> HWComposer::onHotplugConnect(
11741177
if (mUpdateDeviceProductInfoOnHotplugReconnect) {
11751178
uint8_t port;
11761179
DisplayIdentificationData data;
1177-
getDisplayIdentificationData(hwcDisplayId, &port, &data);
1178-
if (auto newInfo = parseDisplayIdentificationData(port, data)) {
1180+
android::ScreenPartStatus screenPartStatus;
1181+
getDisplayIdentificationData(hwcDisplayId, &port, &data, &screenPartStatus);
1182+
if (auto newInfo = parseDisplayIdentificationData(port, data, screenPartStatus)) {
11791183
info->deviceProductInfo = std::move(newInfo->deviceProductInfo);
11801184
info->preferredDetailedTimingDescriptor =
11811185
std::move(newInfo->preferredDetailedTimingDescriptor);
@@ -1186,8 +1190,9 @@ std::optional<DisplayIdentificationInfo> HWComposer::onHotplugConnect(
11861190
} else {
11871191
uint8_t port;
11881192
DisplayIdentificationData data;
1193+
android::ScreenPartStatus screenPartStatus;
11891194
const bool hasDisplayIdentificationData =
1190-
getDisplayIdentificationData(hwcDisplayId, &port, &data);
1195+
getDisplayIdentificationData(hwcDisplayId, &port, &data, &screenPartStatus);
11911196
if (mPhysicalDisplayIdMap.empty()) {
11921197
mHasMultiDisplaySupport = hasDisplayIdentificationData;
11931198
ALOGI("Switching to %s multi-display mode",
@@ -1198,10 +1203,11 @@ std::optional<DisplayIdentificationInfo> HWComposer::onHotplugConnect(
11981203
return {};
11991204
}
12001205

1201-
info = [this, hwcDisplayId, &port, &data, hasDisplayIdentificationData] {
1206+
info = [this, hwcDisplayId, &port, &data, &screenPartStatus, hasDisplayIdentificationData] {
12021207
const bool isPrimary = !mPrimaryHwcDisplayId;
12031208
if (mHasMultiDisplaySupport) {
1204-
if (const auto info = parseDisplayIdentificationData(port, data)) {
1209+
if (const auto info =
1210+
parseDisplayIdentificationData(port, data, screenPartStatus)) {
12051211
return *info;
12061212
}
12071213
ALOGE("Failed to parse identification data for display %" PRIu64, hwcDisplayId);
@@ -1211,11 +1217,13 @@ std::optional<DisplayIdentificationInfo> HWComposer::onHotplugConnect(
12111217
port = isPrimary ? LEGACY_DISPLAY_TYPE_PRIMARY : LEGACY_DISPLAY_TYPE_EXTERNAL;
12121218
}
12131219

1214-
return DisplayIdentificationInfo{.id = PhysicalDisplayId::fromPort(port),
1215-
.name = isPrimary ? "Primary display"
1216-
: "Secondary display",
1217-
.port = port,
1218-
.deviceProductInfo = std::nullopt};
1220+
return DisplayIdentificationInfo{
1221+
.id = PhysicalDisplayId::fromPort(port),
1222+
.name = isPrimary ? "Primary display" : "Secondary display",
1223+
.port = port,
1224+
.deviceProductInfo = std::nullopt,
1225+
.screenPartStatus = screenPartStatus,
1226+
};
12191227
}();
12201228

12211229
mComposer->onHotplugConnect(hwcDisplayId);

services/surfaceflinger/DisplayHardware/HWComposer.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -130,8 +130,9 @@ class HWComposer {
130130

131131
virtual void setCallback(HWC2::ComposerCallback&) = 0;
132132

133-
virtual bool getDisplayIdentificationData(hal::HWDisplayId, uint8_t* outPort,
134-
DisplayIdentificationData* outData) const = 0;
133+
virtual bool getDisplayIdentificationData(
134+
hal::HWDisplayId, uint8_t* outPort, DisplayIdentificationData* outData,
135+
android::ScreenPartStatus* outScreenPartStatus) const = 0;
135136

136137
virtual bool hasCapability(aidl::android::hardware::graphics::composer3::Capability) const = 0;
137138
virtual bool hasDisplayCapability(
@@ -351,8 +352,9 @@ class HWComposer final : public android::HWComposer {
351352

352353
void setCallback(HWC2::ComposerCallback&) override;
353354

354-
bool getDisplayIdentificationData(hal::HWDisplayId, uint8_t* outPort,
355-
DisplayIdentificationData* outData) const override;
355+
bool getDisplayIdentificationData(
356+
hal::HWDisplayId, uint8_t* outPort, DisplayIdentificationData* outData,
357+
android::ScreenPartStatus* outScreenPartStatus) const override;
356358

357359
bool hasCapability(aidl::android::hardware::graphics::composer3::Capability) const override;
358360
bool hasDisplayCapability(

services/surfaceflinger/DisplayHardware/HidlComposerHal.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
#include <hidl/HidlTransportSupport.h>
3535
#include <hidl/HidlTransportUtils.h>
3636
#include <log/log.h>
37+
#include <ui/DisplayIdentification.h>
3738

3839
#include "HWC2.h"
3940
#include "Hal.h"
@@ -1091,7 +1092,8 @@ Error HidlComposer::getDataspaceSaturationMatrix(Dataspace dataspace, mat4* outM
10911092
// Composer HAL 2.3
10921093

10931094
Error HidlComposer::getDisplayIdentificationData(Display display, uint8_t* outPort,
1094-
std::vector<uint8_t>* outData) {
1095+
std::vector<uint8_t>* outData,
1096+
android::ScreenPartStatus*) {
10951097
if (!mClient_2_3) {
10961098
return Error::UNSUPPORTED;
10971099
}

services/surfaceflinger/DisplayHardware/HidlComposerHal.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
#include <optional>
2222
#include <string>
2323
#include <unordered_map>
24-
#include <utility>
2524
#include <vector>
2625

2726
// TODO(b/129481165): remove the #pragma below and fix conversion issues
@@ -33,6 +32,7 @@
3332
#include <gui/BufferQueue.h>
3433
#include <gui/HdrMetadata.h>
3534
#include <math/mat4.h>
35+
#include <ui/DisplayIdentification.h>
3636
#include <ui/DisplayedFrameStats.h>
3737
#include <ui/GraphicBuffer.h>
3838
#include <utils/StrongPointer.h>
@@ -288,7 +288,8 @@ class HidlComposer final : public Composer {
288288

289289
// Composer HAL 2.3
290290
Error getDisplayIdentificationData(Display display, uint8_t* outPort,
291-
std::vector<uint8_t>* outData) override;
291+
std::vector<uint8_t>* outData,
292+
android::ScreenPartStatus* outScreenPartStatus) override;
292293
Error setLayerColorTransform(Display display, Layer layer, const float* matrix) override;
293294
Error getDisplayedContentSamplingAttributes(Display display, PixelFormat* outFormat,
294295
Dataspace* outDataspace,

0 commit comments

Comments
 (0)