BLASTBufferQueue: Support setFrameTimelineVsync

Surface::setFrameTimelineVsync calls through to SurfaceFlinger
using the IGBP as a token. But of course in the case of BBQ
we have no IGBP on the server side, and this will produce errors.
To fix this we continue overriding Surface methods in the BBQSurface
, and forward through to the SurfaceControl variants of the function.
Unlike the previous CL for setFrameRate, this is a currently un-released
API, and so I'd also like to investigate as a follow-up...can we go
SurfaceControl path only?

Bug: 170890018
Test: Existing tests pass
Change-Id: I5316c38f462c3808d5769ede6666594b911c8242
diff --git a/libs/gui/BLASTBufferQueue.cpp b/libs/gui/BLASTBufferQueue.cpp
index 6ae6df1..c8e1f3d 100644
--- a/libs/gui/BLASTBufferQueue.cpp
+++ b/libs/gui/BLASTBufferQueue.cpp
@@ -381,6 +381,10 @@
         }
         return mBbq->setFrameRate(frameRate, compatibility);
     }
+
+    status_t setFrameTimelineVsync(int64_t frameTimelineVsyncId) override {
+        return mBbq->setFrameTimelineVsync(frameTimelineVsyncId);
+    }
 };
 
 // TODO: Can we coalesce this with frame updates? Need to confirm
@@ -393,6 +397,14 @@
         .apply();
 }
 
+status_t BLASTBufferQueue::setFrameTimelineVsync(int64_t frameTimelineVsyncId) {
+    std::unique_lock _lock{mMutex};
+    SurfaceComposerClient::Transaction t;
+
+    return t.setFrameTimelineVsync(mSurfaceControl, frameTimelineVsyncId)
+        .apply();
+}
+
 sp<Surface> BLASTBufferQueue::getSurface() {
     return new BBQSurface(mProducer, true, this);
 }