1
0
Fork 0

drm_hwcomposer: Use unique_ptr for FlatteningController

FlatteningController is owned by HwcDisplay, so use a unique_ptr to
better control and indicate the ownership.

Remove the CreateInstance factory method and use std::make_unique
instead.

Change-Id: I0155c602dcf5a31d27fd2677f9f96ff9696a4022
This commit is contained in:
Drew Davenport 2025-09-16 14:25:45 -06:00
parent 23e38a1033
commit 6075ab4596
6 changed files with 16 additions and 25 deletions

View file

@ -46,7 +46,7 @@ auto Backend::ValidateDisplay(HwcDisplay* display) -> ValidatedComposition {
auto layers = display->GetOrderLayersByZPos();
auto flatcon = display->GetFlatCon();
if (flatcon) {
if (flatcon != nullptr) {
if (layers.size() <= 1) {
flatcon->Disable();
} else {

View file

@ -37,13 +37,6 @@
namespace android::drm_hwcomposer {
auto FlatteningController::CreateInstance(FlatConCallbacks &cbks,
std::chrono::milliseconds timeout)
-> std::shared_ptr<FlatteningController> {
return std::shared_ptr<FlatteningController>(
new FlatteningController(cbks, timeout));
}
FlatteningController::FlatteningController(FlatConCallbacks callbacks,
std::chrono::milliseconds timeout)
: cbks_(std::move(callbacks)), timeout_(timeout) {

View file

@ -34,9 +34,9 @@ struct FlatConCallbacks {
class FlatteningController {
public:
static auto CreateInstance(FlatConCallbacks &cbks,
std::chrono::milliseconds timeout)
-> std::shared_ptr<FlatteningController>;
FlatteningController(FlatConCallbacks callbacks,
std::chrono::milliseconds timeout);
~FlatteningController() {
StopThread();
thread_.join();
@ -66,8 +66,6 @@ class FlatteningController {
}
private:
FlatteningController(FlatConCallbacks callbacks,
std::chrono::milliseconds timeout);
void ThreadFn();
std::thread thread_;

View file

@ -43,7 +43,7 @@ class FlatteningControllerTest : public ::testing::Test {
TEST_F(FlatteningControllerTest, DisabledOnCreation) {
FlatConCallbacks cbks = {.trigger = EmptyTrigger};
auto flat_con = FlatteningController::CreateInstance(cbks, kTestTimeout);
auto flat_con = std::make_unique<FlatteningController>(cbks, kTestTimeout);
EXPECT_FALSE(flat_con->ShouldFlatten());
@ -54,7 +54,7 @@ TEST_F(FlatteningControllerTest, DisabledOnCreation) {
TEST_F(FlatteningControllerTest, EnabledAfterNewFrame) {
FlatConCallbacks cbks = {.trigger = EmptyTrigger};
auto flat_con = FlatteningController::CreateInstance(cbks, kTestTimeout);
auto flat_con = std::make_unique<FlatteningController>(cbks, kTestTimeout);
flat_con->NewFrame();
EXPECT_FALSE(flat_con->ShouldFlatten());
@ -66,7 +66,7 @@ TEST_F(FlatteningControllerTest, EnabledAfterNewFrame) {
TEST_F(FlatteningControllerTest, DisabledAfterCallingDisable) {
FlatConCallbacks cbks = {.trigger = EmptyTrigger};
auto flat_con = FlatteningController::CreateInstance(cbks, kTestTimeout);
auto flat_con = std::make_unique<FlatteningController>(cbks, kTestTimeout);
flat_con->NewFrame();
std::this_thread::sleep_for(kTestTimeout + kTimeoutEpsilon);
@ -82,7 +82,7 @@ TEST_F(FlatteningControllerTest, DisabledAfterCallingDisable) {
TEST_F(FlatteningControllerTest, TriggersCallbackAfterTimeout) {
StrictMock<MockFlatConCallbacks> mock_cb;
FlatConCallbacks cbks = {.trigger = [&]() { mock_cb.Trigger(); }};
auto flat_con = FlatteningController::CreateInstance(cbks, kTestTimeout);
auto flat_con = std::make_unique<FlatteningController>(cbks, kTestTimeout);
EXPECT_CALL(mock_cb, Trigger()).Times(1);
@ -94,7 +94,7 @@ TEST_F(FlatteningControllerTest, TriggersCallbackAfterTimeout) {
TEST_F(FlatteningControllerTest, ShouldFlattenAfterFirstNewFrame) {
StrictMock<MockFlatConCallbacks> mock_cb;
FlatConCallbacks cbks = {.trigger = [&]() { mock_cb.Trigger(); }};
auto flat_con = FlatteningController::CreateInstance(cbks, kTestTimeout);
auto flat_con = std::make_unique<FlatteningController>(cbks, kTestTimeout);
EXPECT_CALL(mock_cb, Trigger()).Times(1);
@ -112,7 +112,7 @@ TEST_F(FlatteningControllerTest, ShouldFlattenAfterFirstNewFrame) {
TEST_F(FlatteningControllerTest, ShouldNotFlattenAfterSecondNewFrame) {
StrictMock<MockFlatConCallbacks> mock_cb;
FlatConCallbacks cbks = {.trigger = [&]() { mock_cb.Trigger(); }};
auto flat_con = FlatteningController::CreateInstance(cbks, kTestTimeout);
auto flat_con = std::make_unique<FlatteningController>(cbks, kTestTimeout);
EXPECT_CALL(mock_cb, Trigger()).Times(1);
@ -145,7 +145,7 @@ TEST_F(FlatteningControllerTest, TriggersCallbackAtCorrectTime) {
triggered = true;
cv.notify_one();
}};
auto flat_con = FlatteningController::CreateInstance(cbks, kTestTimeout);
auto flat_con = std::make_unique<FlatteningController>(cbks, kTestTimeout);
start_time = std::chrono::steady_clock::now();
flat_con->NewFrame();
@ -174,7 +174,7 @@ TEST_F(FlatteningControllerTest, ResetsTimeoutOnNewFrame) {
triggered = true;
cv.notify_one();
}};
auto flat_con = FlatteningController::CreateInstance(cbks, kTestTimeout);
auto flat_con = std::make_unique<FlatteningController>(cbks, kTestTimeout);
flat_con->NewFrame();
std::this_thread::sleep_for(kTestTimeout / 2);

View file

@ -589,8 +589,8 @@ bool HwcDisplay::Init() {
}
auto flatcbk = (struct FlatConCallbacks){
.trigger = [this]() { hwc_->SendRefreshEventToClient(handle_); }};
flatcon_ = FlatteningController::CreateInstance(flatcbk,
kFlatteningTimeout);
flatcon_ = std::make_unique<FlatteningController>(flatcbk,
kFlatteningTimeout);
}
HwcLayer::LayerProperties lp;

View file

@ -212,7 +212,7 @@ class HwcDisplay {
void Deinit();
auto GetFlatCon() {
return flatcon_;
return flatcon_.get();
}
auto GetClientLayer() -> HwcLayer & {
@ -279,7 +279,7 @@ class HwcDisplay {
std::shared_ptr<DrmDisplayPipeline> pipeline_;
std::unique_ptr<Backend> backend_;
std::shared_ptr<FlatteningController> flatcon_;
std::unique_ptr<FlatteningController> flatcon_;
std::unique_ptr<VSyncWorker> vsync_worker_;
bool vsync_event_en_{};