blob: f210c34196054f012aca4f0d29b863b15b19c19b [file] [log] [blame]
Alec Mouri77a53872019-10-28 16:44:36 -07001/*
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#include <gui/DisplayEventReceiver.h>
18#include <utils/Log.h>
19#include <utils/Looper.h>
20
21namespace android {
22
23class DisplayEventDispatcher : public LooperCallback {
24public:
25 explicit DisplayEventDispatcher(
26 const sp<Looper>& looper,
27 ISurfaceComposer::VsyncSource vsyncSource = ISurfaceComposer::eVsyncSourceApp,
28 ISurfaceComposer::ConfigChanged configChanged =
29 ISurfaceComposer::eConfigChangedSuppress);
30
31 status_t initialize();
32 void dispose();
33 status_t scheduleVsync();
Alec Mouri271de042020-04-27 22:38:19 -070034 void requestLatestConfig();
Alec Mouri921b2772020-02-05 19:03:28 -080035 int getFd() const;
Alec Mouri50a931d2019-11-19 16:23:59 -080036 virtual int handleEvent(int receiveFd, int events, void* data);
Alec Mouri77a53872019-10-28 16:44:36 -070037
38protected:
39 virtual ~DisplayEventDispatcher() = default;
40
41private:
42 sp<Looper> mLooper;
43 DisplayEventReceiver mReceiver;
44 bool mWaitingForVsync;
45
46 virtual void dispatchVsync(nsecs_t timestamp, PhysicalDisplayId displayId, uint32_t count) = 0;
47 virtual void dispatchHotplug(nsecs_t timestamp, PhysicalDisplayId displayId,
48 bool connected) = 0;
49 virtual void dispatchConfigChanged(nsecs_t timestamp, PhysicalDisplayId displayId,
Alec Mouri60aee1c2019-10-28 16:18:59 -070050 int32_t configId, nsecs_t vsyncPeriod) = 0;
Alec Mouri77a53872019-10-28 16:44:36 -070051
Alec Mouri77a53872019-10-28 16:44:36 -070052 bool processPendingEvents(nsecs_t* outTimestamp, PhysicalDisplayId* outDisplayId,
53 uint32_t* outCount);
54};
55} // namespace android