composer: Implement QtiComposerClient as Singleton
Create QtiComposerClient instance for one time,
Second time, if instance is deleted previously,
create new instance else do not create the same
instance multiple times.
Change-Id: Idcd650a779b31c4c4985ca5f5ed980f0398f469f
CRs-Fixed: 2499403
diff --git a/composer/QtiComposer.cpp b/composer/QtiComposer.cpp
index db7024d..4d0013d 100644
--- a/composer/QtiComposer.cpp
+++ b/composer/QtiComposer.cpp
@@ -38,6 +38,8 @@
namespace V2_0 {
namespace implementation {
+QtiComposerClient* QtiComposerClient::qti_composerclient_instance_ = nullptr;
+
QtiComposer::QtiComposer() {
hwc_session_ = HWCSession::GetInstance();
}
@@ -99,7 +101,7 @@
Return<void> QtiComposer::createClient(createClient_cb _hidl_cb) {
// TODO(user): Implement combinedly w.r.t createClient_2_3
- sp<IQtiComposerClient> composer_client = new QtiComposerClient();
+ sp<QtiComposerClient> composer_client = QtiComposerClient::CreateQtiComposerClientInstance();
if (!composer_client) {
_hidl_cb(Error::NO_RESOURCES, nullptr);
return Void();
@@ -112,7 +114,7 @@
// Methods from ::android::hardware::graphics::composer::V2_3::IComposer follow.
Return<void> QtiComposer::createClient_2_3(createClient_2_3_cb _hidl_cb) {
- sp<IQtiComposerClient> composer_client = new QtiComposerClient();
+ sp<QtiComposerClient> composer_client = QtiComposerClient::CreateQtiComposerClientInstance();
if (!composer_client) {
_hidl_cb(Error::NO_RESOURCES, nullptr);
return Void();
diff --git a/composer/QtiComposerClient.cpp b/composer/QtiComposerClient.cpp
index ea209ab..e3b330b 100644
--- a/composer/QtiComposerClient.cpp
+++ b/composer/QtiComposerClient.cpp
@@ -1845,7 +1845,7 @@
// Methods from ::android::hidl::base::V1_0::IBase follow.
IQtiComposerClient* HIDL_FETCH_IQtiComposerClient(const char* /* name */) {
- return new QtiComposerClient();
+ return QtiComposerClient::CreateQtiComposerClientInstance();
}
} // namespace implementation
diff --git a/composer/QtiComposerClient.h b/composer/QtiComposerClient.h
index 741dbf6..ed52eba 100644
--- a/composer/QtiComposerClient.h
+++ b/composer/QtiComposerClient.h
@@ -82,10 +82,11 @@
};
class QtiComposerClient : public IQtiComposerClient {
- public:
QtiComposerClient();
virtual ~QtiComposerClient();
+ static QtiComposerClient* qti_composerclient_instance_;
+ public:
// Methods from ::android::hardware::graphics::composer::V2_1::IComposerClient follow.
Return<void> registerCallback(const sp<composer_V2_1::IComposerCallback>& callback) override;
Return<uint32_t> getMaxVirtualDisplayCount() override;
@@ -206,6 +207,20 @@
return (mCapabilities.count(capability) > 0);
}
+ static QtiComposerClient* CreateQtiComposerClientInstance() {
+ if (!qti_composerclient_instance_) {
+ qti_composerclient_instance_ = new QtiComposerClient();
+ return qti_composerclient_instance_;
+ }
+ return nullptr;
+ }
+
+ void onLastStrongRef(const void* id) {
+ if (qti_composerclient_instance_) {
+ qti_composerclient_instance_ = nullptr;
+ }
+ }
+
private:
struct LayerBuffers {
std::vector<BufferCacheEntry> Buffers;