diff options
author | 2020-08-24 18:18:19 -0700 | |
---|---|---|
committer | 2020-09-16 10:04:12 -0700 | |
commit | 74e17562e4166e11c2e4f33126088c5ed35ea0e7 (patch) | |
tree | 0f2c1593ecb62de6dd3cf3425c90f9a5aaa8dc89 /services/surfaceflinger/SurfaceFlinger.cpp | |
parent | 934e82a98dd5a528bef61e035db412963f9ab5f3 (diff) |
SurfaceFlinger: Shared timeline plumbing
Add plumbing to get shared timeline data from Surface Flinger to HWUI
and back.
Bug: 162890382
Bug: 162888881
Test: SF unit tests
Change-Id: Ifb76e6bf28d43c051e6c8ff568437ec9a106b865
Diffstat (limited to 'services/surfaceflinger/SurfaceFlinger.cpp')
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 9d35a3fca6..51107d31da 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -5001,7 +5001,8 @@ status_t SurfaceFlinger::CheckTransactCodeCredentials(uint32_t code) { // captureLayers and captureDisplay will handle the permission check in the function case CAPTURE_LAYERS: case CAPTURE_DISPLAY: - case SET_DISPLAY_BRIGHTNESS: { + case SET_DISPLAY_BRIGHTNESS: + case SET_FRAME_TIMELINE_VSYNC: { return OK; } @@ -6333,6 +6334,19 @@ void SurfaceFlinger::onFrameRateFlexibilityTokenReleased() { })); } +status_t SurfaceFlinger::setFrameTimelineVsync(const sp<IGraphicBufferProducer>& surface, + int64_t frameTimelineVsyncId) { + Mutex::Autolock lock(mStateLock); + if (!authenticateSurfaceTextureLocked(surface)) { + ALOGE("Attempt to set frame timeline vsync on an unrecognized IGraphicBufferProducer"); + return BAD_VALUE; + } + + sp<Layer> layer = (static_cast<MonitoredProducer*>(surface.get()))->getLayer(); + layer->setFrameTimelineVsync(frameTimelineVsyncId); + return NO_ERROR; +} + void SurfaceFlinger::enableRefreshRateOverlay(bool enable) { static_cast<void>(schedule([=] { std::unique_ptr<RefreshRateOverlay> overlay; |