drm_hwcomposer: Handle all HWC2 callbacks in DrmHwcTwo.{h,cpp}
Part of frontend isolation activities.
1. Use HWC2 HAL types only inside DrmHwcTwo.{h,cpp}.
2. Use single lock for all callbacks.
3. Communicate with other drm_dwc components using std::function
without any locking.
Signed-off-by: Roman Stratiienko <roman.o.stratiienko@globallogic.com>
diff --git a/compositor/DrmDisplayCompositor.h b/compositor/DrmDisplayCompositor.h
index c0eed0c..afdb79e 100644
--- a/compositor/DrmDisplayCompositor.h
+++ b/compositor/DrmDisplayCompositor.h
@@ -52,25 +52,14 @@
DrmDisplayCompositor();
~DrmDisplayCompositor();
- int Init(ResourceManager *resource_manager, int display);
-
- hwc2_callback_data_t refresh_callback_data_ = NULL;
- HWC2_PFN_REFRESH refresh_callback_hook_ = NULL;
- std::mutex refresh_callback_lock;
-
- void SetRefreshCallback(hwc2_callback_data_t data,
- hwc2_function_pointer_t hook) {
- const std::lock_guard<std::mutex> lock(refresh_callback_lock);
- refresh_callback_data_ = data;
- refresh_callback_hook_ = reinterpret_cast<HWC2_PFN_REFRESH>(hook);
- }
+ auto Init(ResourceManager *resource_manager, int display,
+ std::function<void()> client_refresh_callback) -> int;
std::unique_ptr<DrmDisplayComposition> CreateInitializedComposition() const;
int ApplyComposition(std::unique_ptr<DrmDisplayComposition> composition);
int TestComposition(DrmDisplayComposition *composition);
int Composite();
void Dump(std::ostringstream *out) const;
- void Vsync(int display, int64_t timestamp);
void ClearDisplay();
UniqueFd TakeOutFence() {
if (!active_composition_) {
@@ -86,6 +75,7 @@
std::tuple<uint32_t, uint32_t, int> GetActiveModeResolution();
private:
+ std::function<void()> client_refresh_callback_;
struct ModeState {
bool needs_modeset = false;
DrmMode mode;