drm_hwcomposer: Use shared pointer type for the pipeline_ variable
The change will help with resource management in further patches.
Signed-off-by: Roman Stratiienko <r.stratiienko@gmail.com>
diff --git a/drm/ResourceManager.cpp b/drm/ResourceManager.cpp
index 577d86c..634ccb7 100644
--- a/drm/ResourceManager.cpp
+++ b/drm/ResourceManager.cpp
@@ -137,14 +137,16 @@
conn->GetName().c_str());
if (connected) {
- auto pipeline = DrmDisplayPipeline::CreatePipeline(*conn);
+ std::shared_ptr<DrmDisplayPipeline>
+ pipeline = DrmDisplayPipeline::CreatePipeline(*conn);
+
if (pipeline) {
- frontend_interface_->BindDisplay(pipeline.get());
+ frontend_interface_->BindDisplay(pipeline);
attached_pipelines_[conn] = std::move(pipeline);
}
} else {
auto &pipeline = attached_pipelines_[conn];
- frontend_interface_->UnbindDisplay(pipeline.get());
+ frontend_interface_->UnbindDisplay(pipeline);
attached_pipelines_.erase(conn);
}
}
@@ -154,7 +156,7 @@
void ResourceManager::DetachAllFrontendDisplays() {
for (auto &p : attached_pipelines_) {
- frontend_interface_->UnbindDisplay(p.second.get());
+ frontend_interface_->UnbindDisplay(p.second);
}
attached_pipelines_.clear();
frontend_interface_->FinalizeDisplayBinding();
diff --git a/drm/ResourceManager.h b/drm/ResourceManager.h
index 7fa3fc6..72ee3e2 100644
--- a/drm/ResourceManager.h
+++ b/drm/ResourceManager.h
@@ -34,8 +34,8 @@
class PipelineToFrontendBindingInterface {
public:
virtual ~PipelineToFrontendBindingInterface() = default;
- virtual bool BindDisplay(DrmDisplayPipeline *);
- virtual bool UnbindDisplay(DrmDisplayPipeline *);
+ virtual bool BindDisplay(std::shared_ptr<DrmDisplayPipeline>);
+ virtual bool UnbindDisplay(std::shared_ptr<DrmDisplayPipeline>);
virtual void FinalizeDisplayBinding();
};
@@ -82,7 +82,7 @@
std::recursive_mutex main_lock_;
- std::map<DrmConnector *, std::unique_ptr<DrmDisplayPipeline>>
+ std::map<DrmConnector *, std::shared_ptr<DrmDisplayPipeline>>
attached_pipelines_;
PipelineToFrontendBindingInterface *const frontend_interface_;
diff --git a/drm/VSyncWorker.cpp b/drm/VSyncWorker.cpp
index 8a251c7..10d48e3 100644
--- a/drm/VSyncWorker.cpp
+++ b/drm/VSyncWorker.cpp
@@ -30,14 +30,14 @@
namespace android {
-auto VSyncWorker::CreateInstance(DrmDisplayPipeline *pipe,
+auto VSyncWorker::CreateInstance(std::shared_ptr<DrmDisplayPipeline> &pipe,
VSyncWorkerCallbacks &callbacks)
-> std::shared_ptr<VSyncWorker> {
auto vsw = std::shared_ptr<VSyncWorker>(new VSyncWorker());
vsw->callbacks_ = callbacks;
- if (pipe != nullptr) {
+ if (pipe) {
vsw->high_crtc_ = pipe->crtc->Get()->GetIndexInResArray()
<< DRM_VBLANK_HIGH_CRTC_SHIFT;
vsw->drm_fd_ = pipe->device->GetFd();
diff --git a/drm/VSyncWorker.h b/drm/VSyncWorker.h
index 031a561..2a4c7c8 100644
--- a/drm/VSyncWorker.h
+++ b/drm/VSyncWorker.h
@@ -35,7 +35,7 @@
public:
~VSyncWorker() = default;
- auto static CreateInstance(DrmDisplayPipeline *pipe,
+ auto static CreateInstance(std::shared_ptr<DrmDisplayPipeline> &pipe,
VSyncWorkerCallbacks &callbacks)
-> std::shared_ptr<VSyncWorker>;