1 #ifndef ANDROID_DVR_VSYNC_SERVICE_H_
2 #define ANDROID_DVR_VSYNC_SERVICE_H_
3 
4 #include <binder/IInterface.h>
5 
6 namespace android {
7 namespace dvr {
8 
9 class IVsyncCallback : public IInterface {
10  public:
11   DECLARE_META_INTERFACE(VsyncCallback)
12 
13   enum {
14     ON_VSYNC = IBinder::FIRST_CALL_TRANSACTION
15   };
16 
17   virtual status_t onVsync(int64_t vsync_timestamp) = 0;
18 };
19 
20 class BnVsyncCallback : public BnInterface<IVsyncCallback> {
21  public:
22   virtual status_t onTransact(uint32_t code, const Parcel& data,
23                               Parcel* reply, uint32_t flags = 0);
24 };
25 
26 // Register a callback with IVsyncService to be notified of vsync events and
27 // timestamps. There's also a shared memory vsync buffer defined in
28 // dvr_shared_buffers.h. IVsyncService has advantages over the vsync shared
29 // memory buffer that make it preferable in certain situations:
30 //
31 // 1. The shared memory buffer lifetime is controlled by VrCore. IVsyncService
32 // is always available as long as surface flinger is running.
33 //
34 // 2. IVsyncService will make a binder callback when a vsync event occurs. This
35 // allows the client to not write code to implement periodic "get the latest
36 // vsync" calls, which is necessary with the vsync shared memory buffer.
37 //
38 // 3. The IVsyncService provides the real vsync timestamp reported by hardware
39 // composer, whereas the vsync shared memory buffer only has predicted vsync
40 // times.
41 class IVsyncService : public IInterface {
42 public:
DECLARE_META_INTERFACE(VsyncService)43   DECLARE_META_INTERFACE(VsyncService)
44 
45   static const char* GetServiceName() { return "vrflinger_vsync"; }
46 
47   enum {
48     REGISTER_CALLBACK = IBinder::FIRST_CALL_TRANSACTION,
49     UNREGISTER_CALLBACK
50   };
51 
52   virtual status_t registerCallback(const sp<IVsyncCallback> callback) = 0;
53   virtual status_t unregisterCallback(const sp<IVsyncCallback> callback) = 0;
54 };
55 
56 class BnVsyncService : public BnInterface<IVsyncService> {
57  public:
58   virtual status_t onTransact(uint32_t code, const Parcel& data,
59                               Parcel* reply, uint32_t flags = 0);
60 };
61 
62 }  // namespace dvr
63 }  // namespace android
64 
65 #endif  // ANDROID_DVR_VSYNC_SERVICE_H_
66