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:
parent
23e38a1033
commit
6075ab4596
6 changed files with 16 additions and 25 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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_;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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_{};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue