diff options
Diffstat (limited to 'services/surfaceflinger/SurfaceFlinger.cpp')
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 27 |
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; |