OSDN Git Service

Merge "drm_hwcomposer: Don't pass hwc_procs_t to VsyncWorker"
[android-x86/external-drm_hwcomposer.git] / vsyncworker.h
1 /*
2  * Copyright (C) 2015 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #ifndef ANDROID_EVENT_WORKER_H_
18 #define ANDROID_EVENT_WORKER_H_
19
20 #include "drmresources.h"
21 #include "worker.h"
22
23 #include <map>
24 #include <stdint.h>
25
26 #include <hardware/hardware.h>
27 #include <hardware/hwcomposer.h>
28
29 namespace android {
30
31 class VsyncCallback {
32  public:
33   virtual ~VsyncCallback() {
34   }
35   virtual void Callback(int display, int64_t timestamp) = 0;
36 };
37
38 class VSyncWorker : public Worker {
39  public:
40   VSyncWorker();
41   ~VSyncWorker() override;
42
43   int Init(DrmResources *drm, int display);
44   int RegisterCallback(std::shared_ptr<VsyncCallback> callback);
45
46   int VSyncControl(bool enabled);
47
48  protected:
49   void Routine() override;
50
51  private:
52   int64_t GetPhasedVSync(int64_t frame_ns, int64_t current);
53   int SyntheticWaitVBlank(int64_t *timestamp);
54
55   DrmResources *drm_;
56
57   // shared_ptr since we need to use this outside of the thread lock (to
58   // actually call the hook) and we don't want the memory freed until we're
59   // done
60   std::shared_ptr<VsyncCallback> callback_ = NULL;
61
62   int display_;
63   bool enabled_;
64   int64_t last_timestamp_;
65 };
66 }
67
68 #endif