drm_hwcomposer: Don't pass hwc_procs_t to VsyncWorker
Introduce a new class to limit the hwc_procs_t callback
structure scope to hwcomposer.cpp
Change-Id: I68ec62e7947ca87702b3d6d0169ae850cfbf5d85
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Signed-off-by: Robert Foss <robert.foss@collabora.com>
diff --git a/hwcomposer.cpp b/hwcomposer.cpp
index b2e9643..4bc4670 100644
--- a/hwcomposer.cpp
+++ b/hwcomposer.cpp
@@ -299,6 +299,18 @@
}
}
+class DrmVsyncCallback : public VsyncCallback {
+ public:
+ DrmVsyncCallback(hwc_procs_t const *procs) : procs_(procs) {
+ }
+
+ void Callback(int display, int64_t timestamp) {
+ procs_->vsync(procs_, display, timestamp);
+ }
+ private:
+ hwc_procs_t const *procs_;
+};
+
int DrmHwcLayer::InitFromHwcLayer(hwc_layer_1_t *sf_layer, Importer *importer,
const gralloc_module_t *gralloc) {
sf_handle = sf_layer->handle;
@@ -683,8 +695,10 @@
ctx->procs = procs;
- for (std::pair<const int, hwc_drm_display> &display_entry : ctx->displays)
- display_entry.second.vsync_worker.SetProcs(procs);
+ for (std::pair<const int, hwc_drm_display> &display_entry : ctx->displays) {
+ auto callback = std::make_shared<DrmVsyncCallback>(procs);
+ display_entry.second.vsync_worker.RegisterCallback(std::move(callback));
+ }
ctx->hotplug_handler.Init(&ctx->drm, procs);
ctx->drm.event_listener()->RegisterHotplugHandler(&ctx->hotplug_handler);