/* * Copyright 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #include #include #include #include #include #include #include #include #include #define ERROR_HAS_CHANGES 5 namespace android { namespace hardware::graphics::composer::hal { namespace types = android::hardware::graphics::common; namespace V2_1 = android::hardware::graphics::composer::V2_1; namespace V2_2 = android::hardware::graphics::composer::V2_2; namespace V2_3 = android::hardware::graphics::composer::V2_3; namespace V2_4 = android::hardware::graphics::composer::V2_4; namespace V3_0 = ::aidl::android::hardware::graphics::composer3; using types::V1_0::ColorTransform; using types::V1_0::Transform; using types::V1_1::RenderIntent; using types::V1_2::ColorMode; using types::V1_2::Dataspace; using types::V1_2::PixelFormat; using V2_1::Error; using V2_4::IComposer; using V2_4::IComposerCallback; using V2_4::IComposerClient; using V2_4::VsyncPeriodChangeTimeline; using V2_4::VsyncPeriodNanos; using Attribute = IComposerClient::Attribute; using BlendMode = IComposerClient::BlendMode; using Connection = IComposerCallback::Connection; using ContentType = IComposerClient::ContentType; using Capability = IComposer::Capability; using ClientTargetProperty = IComposerClient::ClientTargetProperty; using DisplayHotplugEvent = aidl::android::hardware::graphics::common::DisplayHotplugEvent; using DisplayRequest = IComposerClient::DisplayRequest; using DisplayType = IComposerClient::DisplayType; using HWConfigId = V2_1::Config; using HWDisplayId = V2_1::Display; using HWError = V2_1::Error; using HWLayerId = V2_1::Layer; using LayerGenericMetadataKey = IComposerClient::LayerGenericMetadataKey; using LayerRequest = IComposerClient::LayerRequest; using PerFrameMetadata = IComposerClient::PerFrameMetadata; using PerFrameMetadataKey = IComposerClient::PerFrameMetadataKey; using PerFrameMetadataBlob = IComposerClient::PerFrameMetadataBlob; using PowerMode = IComposerClient::PowerMode; using Vsync = IComposerClient::Vsync; using VsyncPeriodChangeConstraints = IComposerClient::VsyncPeriodChangeConstraints; using Hdr = aidl::android::hardware::graphics::common::Hdr; using DisplayConfiguration = V3_0::DisplayConfiguration; using VrrConfig = V3_0::VrrConfig; } // namespace hardware::graphics::composer::hal inline bool hasChangesError(hardware::graphics::composer::hal::Error error) { return ERROR_HAS_CHANGES == static_cast(error); } inline std::string to_string(hardware::graphics::composer::hal::Attribute attribute) { switch (attribute) { case hardware::graphics::composer::hal::Attribute::INVALID: return "Invalid"; case hardware::graphics::composer::hal::Attribute::WIDTH: return "Width"; case hardware::graphics::composer::hal::Attribute::HEIGHT: return "Height"; case hardware::graphics::composer::hal::Attribute::VSYNC_PERIOD: return "VsyncPeriod"; case hardware::graphics::composer::hal::Attribute::DPI_X: return "DpiX"; case hardware::graphics::composer::hal::Attribute::DPI_Y: return "DpiY"; default: return "Unknown"; } } inline std::string to_string( aidl::android::hardware::graphics::composer3::Composition composition) { switch (composition) { case aidl::android::hardware::graphics::composer3::Composition::INVALID: return "Invalid"; case aidl::android::hardware::graphics::composer3::Composition::CLIENT: return "Client"; case aidl::android::hardware::graphics::composer3::Composition::DEVICE: return "Device"; case aidl::android::hardware::graphics::composer3::Composition::SOLID_COLOR: return "SolidColor"; case aidl::android::hardware::graphics::composer3::Composition::CURSOR: return "Cursor"; case aidl::android::hardware::graphics::composer3::Composition::SIDEBAND: return "Sideband"; case aidl::android::hardware::graphics::composer3::Composition::DISPLAY_DECORATION: return "DisplayDecoration"; case aidl::android::hardware::graphics::composer3::Composition::REFRESH_RATE_INDICATOR: return "RefreshRateIndicator"; default: return "Unknown"; } } inline std::string to_string( aidl::android::hardware::graphics::composer3::DisplayCapability displayCapability) { switch (displayCapability) { case aidl::android::hardware::graphics::composer3::DisplayCapability::INVALID: return "Invalid"; case aidl::android::hardware::graphics::composer3::DisplayCapability:: SKIP_CLIENT_COLOR_TRANSFORM: return "SkipColorTransform"; case aidl::android::hardware::graphics::composer3::DisplayCapability::DOZE: return "Doze"; case aidl::android::hardware::graphics::composer3::DisplayCapability::BRIGHTNESS: return "Brightness"; case aidl::android::hardware::graphics::composer3::DisplayCapability::PROTECTED_CONTENTS: return "ProtectedContents"; case aidl::android::hardware::graphics::composer3::DisplayCapability::AUTO_LOW_LATENCY_MODE: return "AutoLowLatencyMode"; case aidl::android::hardware::graphics::composer3::DisplayCapability::SUSPEND: return "Suspend"; case aidl::android::hardware::graphics::composer3::DisplayCapability::DISPLAY_IDLE_TIMER: return "DisplayIdleTimer"; default: return "Unknown"; } } inline std::string to_string( const std::optional& vrrConfig) { if (vrrConfig) { std::ostringstream out; out << "{minFrameIntervalNs=" << vrrConfig->minFrameIntervalNs << ", "; out << "frameIntervalPowerHints={"; if (vrrConfig->frameIntervalPowerHints) { const auto& powerHint = *vrrConfig->frameIntervalPowerHints; for (size_t i = 0; i < powerHint.size(); i++) { if (i > 0) out << ", "; out << "[frameIntervalNs=" << powerHint[i]->frameIntervalNs << ", averageRefreshPeriodNs=" << powerHint[i]->averageRefreshPeriodNs << "]"; } } out << "}, "; out << "notifyExpectedPresentConfig={"; if (vrrConfig->notifyExpectedPresentConfig) { out << "headsUpNs=" << vrrConfig->notifyExpectedPresentConfig->headsUpNs << ", timeoutNs=" << vrrConfig->notifyExpectedPresentConfig->timeoutNs; } out << "}}"; return out.str(); } return "N/A"; } inline std::string to_string(hardware::graphics::composer::hal::V2_4::Error error) { // 5 is reserved for historical reason, during validation 5 means has changes. if (ERROR_HAS_CHANGES == static_cast(error)) { return "HasChanges"; } switch (error) { case hardware::graphics::composer::hal::V2_4::Error::NONE: return "None"; case hardware::graphics::composer::hal::V2_4::Error::BAD_CONFIG: return "BadConfig"; case hardware::graphics::composer::hal::V2_4::Error::BAD_DISPLAY: return "BadDisplay"; case hardware::graphics::composer::hal::V2_4::Error::BAD_LAYER: return "BadLayer"; case hardware::graphics::composer::hal::V2_4::Error::BAD_PARAMETER: return "BadParameter"; case hardware::graphics::composer::hal::V2_4::Error::NO_RESOURCES: return "NoResources"; case hardware::graphics::composer::hal::V2_4::Error::NOT_VALIDATED: return "NotValidated"; case hardware::graphics::composer::hal::V2_4::Error::UNSUPPORTED: return "Unsupported"; case hardware::graphics::composer::hal::V2_4::Error::SEAMLESS_NOT_ALLOWED: return "SeamlessNotAllowed"; case hardware::graphics::composer::hal::V2_4::Error::SEAMLESS_NOT_POSSIBLE: return "SeamlessNotPossible"; default: return "Unknown"; } } inline std::string to_string(hardware::graphics::composer::hal::Error error) { return to_string(static_cast(error)); } // For utils::Dumper ADL. namespace hardware::graphics::composer { namespace V2_2 { inline std::string to_string(hardware::graphics::composer::hal::PowerMode mode) { switch (mode) { case hardware::graphics::composer::hal::PowerMode::OFF: return "Off"; case hardware::graphics::composer::hal::PowerMode::DOZE: return "Doze"; case hardware::graphics::composer::hal::PowerMode::ON: return "On"; case hardware::graphics::composer::hal::PowerMode::DOZE_SUSPEND: return "DozeSuspend"; case hardware::graphics::composer::hal::PowerMode::ON_SUSPEND: return "OnSuspend"; default: return "Unknown"; } } } // namespace V2_2 namespace V2_1 { inline std::string to_string(hardware::graphics::composer::hal::Vsync vsync) { switch (vsync) { case hardware::graphics::composer::hal::Vsync::ENABLE: return "Enable"; case hardware::graphics::composer::hal::Vsync::DISABLE: return "Disable"; default: return "Unknown"; } } } // namespace V2_1 } // namespace hardware::graphics::composer } // namespace android