unplugged-vendor/frameworks/native/services/surfaceflinger/mediatek/MSync/MSyncSfApi.h

161 lines
7.6 KiB
C++

/* Copyright Statement:
*
* This software/firmware and related documentation ("MediaTek Software") are
* protected under relevant copyright laws. The information contained herein is
* confidential and proprietary to MediaTek Inc. and/or its licensors. Without
* the prior written permission of MediaTek inc. and/or its licensors, any
* reproduction, modification, use or disclosure of MediaTek Software, and
* information contained herein, in whole or in part, shall be strictly
* prohibited.
*
* MediaTek Inc. (C) 2021. All rights reserved.
*
* BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
* ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
* WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
* WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
* NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
* RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
* INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
* TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
* RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
* OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
* SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
* RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
* STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
* ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
* RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
* MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
* CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
*
* The following software/firmware and/or related documentation ("MediaTek
* Software") have been modified by MediaTek Inc. All revisions are subject to
* any receiver's applicable license agreements with MediaTek Inc.
*/
#pragma once
#include <android-base/thread_annotations.h>
#include <utils/StrongPointer.h>
#include <utils/Timers.h>
#include <utils/Vector.h>
#include <vector>
namespace android {
#ifdef MTK_SF_MSYNC
struct ComposerState;
class DisplayDevice;
class Fence;
class IBinder;
class Layer;
class MSyncController;
class Parcel;
class SurfaceFlinger;
class MSyncSfApi {
public:
MSyncSfApi(const sp<SurfaceFlinger>& flinger, bool useList);
~MSyncSfApi();
void dump(std::string& result) const;
void reloadConfigThenDump(std::string& result);
void registerLayer(const Layer* layer);
void destroyLayer(const Layer* layer);
void onMessageInvalidate();
void onMessageRefresh(sp<const DisplayDevice> display,
const std::vector<sp<DisplayDevice>>& displays0);
void setTransactionState(const Vector<ComposerState>& states);
void requestInvalidate();
void onActiveModeUpdated();
void setHasPendingBuffer(const Layer* layer);
bool isOn() const;
void setMSyncEnable(bool enable);
void setTargetLayer(const void* layerPtr);
void setHasOtherUI(bool bHasOtherUI);
void setPreviousPresentFence(const sp<Fence>& previousPresentFence);
void setMSyncParamTable(const Parcel& data);
void getMSyncParamTable(Parcel* reply);
private:
// need sync with MSyncController.h
using FuncGetLayerPtrFromhandle = std::function<void*(const sp<IBinder>&)>;
using FuncTraverseVisibleLayers = std::function<void(std::function<void(const void*)>)>;
using FuncTraverseVisibleBufferLayers = std::function<void(std::function<void(const void*, float, bool)>)>;
using FuncGetCurrentVsyncPeriod = std::function<nsecs_t()>;
using FuncTriggerInvalidate = std::function<void()>;
using FuncTriggerEventQueueInvalidate = std::function<void()>;
using FuncSetHwcMSyncOn = std::function<void()>;
using FuncSetHwcMSyncOff = std::function<void()>;
// need sync with MSyncExportApi.h
typedef MSyncController* (*FuncCreateMSyncController)(bool useList,
FuncGetLayerPtrFromhandle,
FuncTraverseVisibleLayers,
FuncTraverseVisibleBufferLayers,
FuncGetCurrentVsyncPeriod,
FuncTriggerInvalidate,
FuncTriggerEventQueueInvalidate,
FuncSetHwcMSyncOn,
FuncSetHwcMSyncOff);
typedef void (*FuncDestroyMSyncController)(MSyncController* controller);
typedef void (*FuncDump)(MSyncController* controller, std::string& result);
typedef void (*FuncReloadConfigThenDump)(MSyncController* controller, std::string& result);
typedef void (*FuncRegisterLayer)(MSyncController* controller, const void* layerPtr, const std::string& name);
typedef void (*FuncDestroyLayer)(MSyncController* controller, const void* layerPtr);
typedef void (*FuncOnMessageInvalidate)(MSyncController* controller);
typedef void (*FuncOnMessageRefresh)(MSyncController* controller, bool hasExternalDisp, bool hasGpuVirtualDisp, uint32_t primaryDisplayArea);
typedef void (*FuncSetTransactionState)(MSyncController* controller,
const std::vector<std::tuple<sp<IBinder>, bool, bool, sp<Fence>>>& states);
typedef void (*FuncRequestInvalidate)(MSyncController* controller);
typedef void (*FuncOnActiveModeUpdated)(MSyncController* controller);
typedef void (*FuncSetHasPendingBuffer)(MSyncController* controller, const void* layerPtr);
typedef bool (*FuncIsOn)(MSyncController* controller);
typedef void (*FuncSetMSyncEnable)(MSyncController* controller, bool enable);
typedef void (*FuncSetTargetLayer)(MSyncController* controller, const void* layerPtr);
typedef void (*FuncSetHasOtherUI)(MSyncController* controller, bool bHasOtherUI);
typedef void (*FuncSetPreviousPresentFence)(MSyncController* controller, const sp<Fence>& previousPresentFence);
private:
void* mSoHandle = nullptr;
sp<SurfaceFlinger> mFlinger = nullptr;
MSyncController* mMSyncController = nullptr;
// dlsym function pointer
int loadMSyncApi();
FuncCreateMSyncController mFuncCreateMSyncController = nullptr;
FuncDestroyMSyncController mFuncDestroyMSyncController = nullptr;
FuncDump mFuncDump = nullptr;
FuncReloadConfigThenDump mFuncReloadConfigThenDump = nullptr;
FuncRegisterLayer mFuncRegisterLayer = nullptr;
FuncDestroyLayer mFuncDestroyLayer = nullptr;
FuncOnMessageInvalidate mFuncOnMessageInvalidate = nullptr;
FuncOnMessageRefresh mFuncOnMessageRefresh = nullptr;
FuncSetTransactionState mFuncSetTransactionState = nullptr;
FuncRequestInvalidate mFuncRequestInvalidate = nullptr;
FuncOnActiveModeUpdated mFuncOnActiveModeUpdated = nullptr;
FuncSetHasPendingBuffer mFuncSetHasPendingBuffer = nullptr;
FuncIsOn mFuncIsOn = nullptr;
FuncSetMSyncEnable mFuncSetMSyncEnable = nullptr;
FuncSetTargetLayer mFuncSetTargetLayer = nullptr;
FuncSetHasOtherUI mFuncSetHasOtherUI = nullptr;
FuncSetPreviousPresentFence mFuncSetPreviousPresentFence = nullptr;
};
#endif
}; // namespace android