SurfaceFlinger: plumb composer 2.4 onSeamlessPossible
Plumb onSeamlessPossible callback to SurfaceFlinger.
Test: rev up composer to 2.4
Bug: 141329414
Change-Id: I2166b8ea066002c76781aacbcc985f85f7c255a8
diff --git a/libs/vr/libvrflinger/hardware_composer.cpp b/libs/vr/libvrflinger/hardware_composer.cpp
index 188ac6b..b771538 100644
--- a/libs/vr/libvrflinger/hardware_composer.cpp
+++ b/libs/vr/libvrflinger/hardware_composer.cpp
@@ -1215,6 +1215,12 @@
return Void();
}
+Return<void> HardwareComposer::ComposerCallback::onSeamlessPossible(
+ Hwc2::Display /*display*/) {
+ LOG_ALWAYS_FATAL("Unexpected onSeamlessPossible callback");
+ return Void();
+}
+
void HardwareComposer::ComposerCallback::SetVsyncService(
const sp<VsyncService>& vsync_service) {
std::lock_guard<std::mutex> lock(mutex_);
diff --git a/libs/vr/libvrflinger/hardware_composer.h b/libs/vr/libvrflinger/hardware_composer.h
index 8698814..bfce10b 100644
--- a/libs/vr/libvrflinger/hardware_composer.h
+++ b/libs/vr/libvrflinger/hardware_composer.h
@@ -381,6 +381,7 @@
hardware::Return<void> onVsyncPeriodTimingChanged(
Hwc2::Display display,
const Hwc2::VsyncPeriodChangeTimeline& updatedTimeline) override;
+ hardware::Return<void> onSeamlessPossible(Hwc2::Display display) override;
bool GotFirstHotplug() { return got_first_hotplug_; }
void SetVsyncService(const sp<VsyncService>& vsync_service);
diff --git a/services/surfaceflinger/DisplayHardware/HWC2.h b/services/surfaceflinger/DisplayHardware/HWC2.h
index 8b532e3..e7cf5ff 100644
--- a/services/surfaceflinger/DisplayHardware/HWC2.h
+++ b/services/surfaceflinger/DisplayHardware/HWC2.h
@@ -76,6 +76,7 @@
virtual void onVsyncPeriodTimingChangedReceived(
int32_t sequenceId, hwc2_display_t display,
const hwc_vsync_period_change_timeline_t& updatedTimeline) = 0;
+ virtual void onSeamlessPossible(int32_t sequenceId, hwc2_display_t display) = 0;
virtual ~ComposerCallback() = default;
};
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
index 0a7009b..1960f43 100644
--- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp
+++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
@@ -125,6 +125,11 @@
return android::hardware::Void();
}
+ android::hardware::Return<void> onSeamlessPossible(android::Hwc2::Display display) override {
+ mCallback->onSeamlessPossible(mSequenceId, display);
+ return android::hardware::Void();
+ }
+
private:
HWC2::ComposerCallback* mCallback;
const int32_t mSequenceId;
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 8c1d168..004240b 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -1570,6 +1570,11 @@
mScheduler->onNewVsyncPeriodChangeTimeline(updatedTimeline);
}
+void SurfaceFlinger::onSeamlessPossible(int32_t /*sequenceId*/, hwc2_display_t /*display*/) {
+ // TODO(b/142753666): use constraints when calling to setActiveConfigWithConstrains and
+ // use this callback to know when to retry in case of SEAMLESS_NOT_POSSIBLE.
+}
+
void SurfaceFlinger::onRefreshReceived(int sequenceId, hwc2_display_t /*hwcDisplayId*/) {
Mutex::Autolock lock(mStateLock);
if (sequenceId != getBE().mComposerSequenceId) {
diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h
index 2f84b13..dcd9dc2 100644
--- a/services/surfaceflinger/SurfaceFlinger.h
+++ b/services/surfaceflinger/SurfaceFlinger.h
@@ -505,6 +505,7 @@
void onVsyncPeriodTimingChangedReceived(
int32_t sequenceId, hwc2_display_t display,
const hwc_vsync_period_change_timeline_t& updatedTimeline) override;
+ void onSeamlessPossible(int32_t sequenceId, hwc2_display_t display) override;
/* ------------------------------------------------------------------------
* ISchedulerCallback