1*4d7e907cSAndroid Build Coastguard Worker /** 2*4d7e907cSAndroid Build Coastguard Worker * Copyright (c) 2021, The Android Open Source Project 3*4d7e907cSAndroid Build Coastguard Worker * 4*4d7e907cSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*4d7e907cSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*4d7e907cSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*4d7e907cSAndroid Build Coastguard Worker * 8*4d7e907cSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*4d7e907cSAndroid Build Coastguard Worker * 10*4d7e907cSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*4d7e907cSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*4d7e907cSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*4d7e907cSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*4d7e907cSAndroid Build Coastguard Worker * limitations under the License. 15*4d7e907cSAndroid Build Coastguard Worker */ 16*4d7e907cSAndroid Build Coastguard Worker #pragma once 17*4d7e907cSAndroid Build Coastguard Worker 18*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/graphics/composer3/BnComposerCallback.h> 19*4d7e907cSAndroid Build Coastguard Worker #include <android-base/thread_annotations.h> 20*4d7e907cSAndroid Build Coastguard Worker #include <mutex> 21*4d7e907cSAndroid Build Coastguard Worker #include <vector> 22*4d7e907cSAndroid Build Coastguard Worker 23*4d7e907cSAndroid Build Coastguard Worker namespace aidl::android::hardware::graphics::composer3::vts { 24*4d7e907cSAndroid Build Coastguard Worker 25*4d7e907cSAndroid Build Coastguard Worker class GraphicsComposerCallback : public BnComposerCallback { 26*4d7e907cSAndroid Build Coastguard Worker public: 27*4d7e907cSAndroid Build Coastguard Worker void setVsyncAllowed(bool allowed); 28*4d7e907cSAndroid Build Coastguard Worker 29*4d7e907cSAndroid Build Coastguard Worker void setRefreshRateChangedDebugDataEnabledCallbackAllowed(bool allowed); 30*4d7e907cSAndroid Build Coastguard Worker 31*4d7e907cSAndroid Build Coastguard Worker std::vector<int64_t> getDisplays() const; 32*4d7e907cSAndroid Build Coastguard Worker 33*4d7e907cSAndroid Build Coastguard Worker int32_t getInvalidHotplugCount() const; 34*4d7e907cSAndroid Build Coastguard Worker 35*4d7e907cSAndroid Build Coastguard Worker int32_t getInvalidRefreshCount() const; 36*4d7e907cSAndroid Build Coastguard Worker 37*4d7e907cSAndroid Build Coastguard Worker int32_t getInvalidVsyncCount() const; 38*4d7e907cSAndroid Build Coastguard Worker 39*4d7e907cSAndroid Build Coastguard Worker int32_t getInvalidVsyncPeriodChangeCount() const; 40*4d7e907cSAndroid Build Coastguard Worker 41*4d7e907cSAndroid Build Coastguard Worker int32_t getInvalidSeamlessPossibleCount() const; 42*4d7e907cSAndroid Build Coastguard Worker 43*4d7e907cSAndroid Build Coastguard Worker int32_t getVsyncIdleCount() const; 44*4d7e907cSAndroid Build Coastguard Worker 45*4d7e907cSAndroid Build Coastguard Worker int64_t getVsyncIdleTime() const; 46*4d7e907cSAndroid Build Coastguard Worker 47*4d7e907cSAndroid Build Coastguard Worker std::optional<VsyncPeriodChangeTimeline> takeLastVsyncPeriodChangeTimeline(); 48*4d7e907cSAndroid Build Coastguard Worker 49*4d7e907cSAndroid Build Coastguard Worker std::vector<RefreshRateChangedDebugData> takeListOfRefreshRateChangedDebugData(); 50*4d7e907cSAndroid Build Coastguard Worker 51*4d7e907cSAndroid Build Coastguard Worker int32_t getInvalidRefreshRateDebugEnabledCallbackCount() const; 52*4d7e907cSAndroid Build Coastguard Worker 53*4d7e907cSAndroid Build Coastguard Worker private: 54*4d7e907cSAndroid Build Coastguard Worker virtual ::ndk::ScopedAStatus onHotplug(int64_t in_display, bool in_connected) override; 55*4d7e907cSAndroid Build Coastguard Worker virtual ::ndk::ScopedAStatus onRefresh(int64_t in_display) override; 56*4d7e907cSAndroid Build Coastguard Worker virtual ::ndk::ScopedAStatus onSeamlessPossible(int64_t in_display) override; 57*4d7e907cSAndroid Build Coastguard Worker virtual ::ndk::ScopedAStatus onVsync(int64_t in_display, int64_t in_timestamp, 58*4d7e907cSAndroid Build Coastguard Worker int32_t in_vsyncPeriodNanos) override; 59*4d7e907cSAndroid Build Coastguard Worker virtual ::ndk::ScopedAStatus onVsyncPeriodTimingChanged( 60*4d7e907cSAndroid Build Coastguard Worker int64_t in_display, 61*4d7e907cSAndroid Build Coastguard Worker const ::aidl::android::hardware::graphics::composer3::VsyncPeriodChangeTimeline& 62*4d7e907cSAndroid Build Coastguard Worker in_updatedTimeline) override; 63*4d7e907cSAndroid Build Coastguard Worker virtual ::ndk::ScopedAStatus onVsyncIdle(int64_t in_display) override; 64*4d7e907cSAndroid Build Coastguard Worker virtual ::ndk::ScopedAStatus onRefreshRateChangedDebug( 65*4d7e907cSAndroid Build Coastguard Worker const RefreshRateChangedDebugData&) override; 66*4d7e907cSAndroid Build Coastguard Worker virtual ::ndk::ScopedAStatus onHotplugEvent(int64_t in_display, 67*4d7e907cSAndroid Build Coastguard Worker common::DisplayHotplugEvent) override; 68*4d7e907cSAndroid Build Coastguard Worker virtual ::ndk::ScopedAStatus onHdcpLevelsChanged( 69*4d7e907cSAndroid Build Coastguard Worker int64_t in_display, const ::aidl::android::hardware::drm::HdcpLevels&) override; 70*4d7e907cSAndroid Build Coastguard Worker 71*4d7e907cSAndroid Build Coastguard Worker mutable std::mutex mMutex; 72*4d7e907cSAndroid Build Coastguard Worker // the set of all currently connected displays 73*4d7e907cSAndroid Build Coastguard Worker std::vector<int64_t> mDisplays GUARDED_BY(mMutex); 74*4d7e907cSAndroid Build Coastguard Worker // true only when vsync is enabled 75*4d7e907cSAndroid Build Coastguard Worker bool mVsyncAllowed GUARDED_BY(mMutex) = true; 76*4d7e907cSAndroid Build Coastguard Worker // true only when RefreshRateChangedCallbackDebugEnabled is set to true. 77*4d7e907cSAndroid Build Coastguard Worker bool mRefreshRateChangedDebugDataEnabledCallbackAllowed GUARDED_BY(mMutex) = false; 78*4d7e907cSAndroid Build Coastguard Worker 79*4d7e907cSAndroid Build Coastguard Worker std::optional<VsyncPeriodChangeTimeline> mTimeline GUARDED_BY(mMutex); 80*4d7e907cSAndroid Build Coastguard Worker 81*4d7e907cSAndroid Build Coastguard Worker std::vector<RefreshRateChangedDebugData> mRefreshRateChangedDebugData GUARDED_BY(mMutex); 82*4d7e907cSAndroid Build Coastguard Worker 83*4d7e907cSAndroid Build Coastguard Worker int32_t mVsyncIdleCount GUARDED_BY(mMutex) = 0; 84*4d7e907cSAndroid Build Coastguard Worker int64_t mVsyncIdleTime GUARDED_BY(mMutex) = 0; 85*4d7e907cSAndroid Build Coastguard Worker 86*4d7e907cSAndroid Build Coastguard Worker // track invalid callbacks 87*4d7e907cSAndroid Build Coastguard Worker int32_t mInvalidHotplugCount GUARDED_BY(mMutex) = 0; 88*4d7e907cSAndroid Build Coastguard Worker int32_t mInvalidRefreshCount GUARDED_BY(mMutex) = 0; 89*4d7e907cSAndroid Build Coastguard Worker int32_t mInvalidVsyncCount GUARDED_BY(mMutex) = 0; 90*4d7e907cSAndroid Build Coastguard Worker int32_t mInvalidVsyncPeriodChangeCount GUARDED_BY(mMutex) = 0; 91*4d7e907cSAndroid Build Coastguard Worker int32_t mInvalidSeamlessPossibleCount GUARDED_BY(mMutex) = 0; 92*4d7e907cSAndroid Build Coastguard Worker int32_t mInvalidRefreshRateDebugEnabledCallbackCount GUARDED_BY(mMutex) = 0; 93*4d7e907cSAndroid Build Coastguard Worker int32_t mHdcpLevelChangedCount GUARDED_BY(mMutex) = 0; 94*4d7e907cSAndroid Build Coastguard Worker }; 95*4d7e907cSAndroid Build Coastguard Worker 96*4d7e907cSAndroid Build Coastguard Worker } // namespace aidl::android::hardware::graphics::composer3::vts 97