summaryrefslogtreecommitdiff
path: root/services/surfaceflinger/SurfaceFlinger.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'services/surfaceflinger/SurfaceFlinger.cpp')
-rw-r--r--services/surfaceflinger/SurfaceFlinger.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 31e44449b3..1c12bd5b96 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -4855,6 +4855,33 @@ status_t SurfaceFlinger::onTransact(
reply->writeBool(getBE().mHwc->isUsingVrComposer());
return NO_ERROR;
}
+ case 1029: {
+ // Code 1029 is an experimental feature that allows applications to
+ // simulate a high frequency panel by setting a multiplier and divisor
+ // on the VSYNC-sf clock. If either the multiplier or divisor are
+ // 0, then the code will set both to 1 to return the VSYNC-sf clock
+ // to it's normal frequency.
+ int multiplier = data.readInt32();
+ int divisor = data.readInt32();
+
+ if ((multiplier == 0) || (divisor == 0)) {
+ multiplier = 1;
+ divisor = 1;
+ }
+
+ if ((multiplier == 1) && (divisor == 1)) {
+ enableHardwareVsync();
+ } else {
+ disableHardwareVsync(true);
+ }
+ getBE().mHwc->getActiveConfig(DisplayDevice::DISPLAY_PRIMARY)
+ ->scalePanelFrequency(multiplier, divisor);
+ mPrimaryDispSync->scalePeriod(multiplier, divisor);
+
+ ATRACE_INT("PeriodMultiplier", multiplier);
+ ATRACE_INT("PeriodDivisor", divisor);
+ return NO_ERROR;
+ }
}
}
return err;