AIDL برای «لایه انتزاع سخت‌افزار آهنگ‌ساز سخت‌افزار»

از Android 13،‏ Hardware Composer (HWC) HAL در AIDL تعریف می‌شود. نسخه‌های HIDL از android.hardware.graphics.composer@2.1 تا android.hardware.graphics.composer@2.4 منسوخ شده‌اند.

این صفحه تفاوت‌های بین AIDL و HIDL HAL را برای HWC توضیح می‌دهد، و نحوه پیاده‌سازی و آزمایش AIDL HAL را شرح می‌دهد.

ازآنجایی‌که AIDL مزایایی ارائه می‌دهد، فروشندگان می‌توانند HAL آهنگساز AIDL را از Android 13 به‌جای نسخه HIDL پیاده‌سازی کنند. برای اطلاعات بیشتر، به بخش پیاده‌سازی مراجعه کنید.

تفاوت بین AIDL و HIDL HAL

«لایه انتزاع سخت‌افزاری» آهنگساز AIDL جدید، با نام android.hardware.graphics.composer3، در IComposer.aidl تعریف شده است. این میانای برنامه‌سازی کاربردی شبیه HIDL HAL android.hardware.graphics.composer@2.4 است، اما تغییرات زیر را شامل می‌شود:

  • برداشتن صف پیام سریع (FMQ) به‌نفع فرمان‌های قابل‌بسته‌بندی.

    ‫AIDL HAL رابط فرمان را براساس انواع بسته‌بندی‌شده با نوع قوی به‌جای فرمان‌های سریال‌سازی‌شده ازطریق FMQ در HIDL تعریف می‌کند. این کار یک میانای پایدار برای دستورات و تعریف خواناتری از نحوه تفسیر سیستم از پایه‌بار دستور ارائه می‌دهد.

    روش executeCommands ۵ در IComposerClient.aidl تعریف شده است:

    CommandResultPayload[] executeCommands(in DisplayCommand[] commands);
    

    هر فرمان یک نوع قابل‌ارسال با نوع قوی است که در DisplayCommand.aidl تعریف شده است. پاسخ‌های فرمان به‌شدت از نوع parcelable تعریف‌شده در CommandResultPayload.aidl هستند.

  • برداشتن IComposerClient.getClientTargetSupport چون هیچ مشتری فعالی از این روش استفاده نمی‌کند.

  • نمایش رنگ‌ها به‌صورت شناور به‌جای بایت برای هم‌تراز کردن با پشته گرافیک بالایی در Android، همان‌گونه که در ASurfaceTransaction_setColor تعریف شده است.

  • افزودن فیلدهای جدید برای کنترل محتوای HDR.

    در AIDL HAL، پشته‌های لایه مختلط SDR/HDR از کم‌نور شدن یکپارچه لایه‌های SDR هنگامی که لایه HDR هم‌زمان روی صفحه است پشتیبانی می‌کنند.

    فیلد brightness در LayerCommand به SurfaceFlinger اجازه می‌دهد روشنایی هر لایه را مشخص کند. این کار باعث می‌شود «کنترل‌کننده سخت‌افزاری» محتوای لایه را در فضای نور خطی به‌جای فضای گاما کم‌نور کند.

    فیلد brightness در ClientTargetPropertyWithBrightness به HWC اجازه می‌دهد فضای روشنایی را برای ترکیب‌بندی کارخواه مشخص کند و به RenderEngine دستور می‌دهد که آیا لایه‌های SDR را در ترکیب‌بندی کارخواه کم‌نور کند یا نه.

    فیلد dimmingStage به HWC اجازه می‌دهد پیکربندی کند که RenderEngine چه زمانی محتوا را کم‌نور کند. این کار با ColorModesتعریف‌شده توسط فروشنده سازگار است که ممکن است ترجیح دهند در فضای گاما کم‌نور کنند تا بهبودهای کنتراست تعریف‌شده توسط فروشنده را در خطوط لوله رنگ خود فعال کنند.

  • افزودن نوع ترکیب، DISPLAY_DECORATION، در Composition.aidl برای تزئینات صفحه.

    برخی‌از دستگاه‌ها سخت‌افزار اختصاصی برای بهینه‌سازی طراحی ماسک آلفا دارند که گوشه‌های گرد و برش‌های نمایشگر را صاف می‌کند. دستگاه‌های دارای چنین سخت‌افزاری باید IComposerClient.getDisplayDecorationSupport را پیاده‌سازی کنند و ساختار DisplayDecorationSupport را همان‌گونه که در DisplayDecorationSupport.aidl تعریف شده است برگردانند. این ساختار PixelFormat و AlphaInterpretation تعداد ثابت‌های موردنیاز دستگاه را توصیف می‌کند. پس‌از این پیاده‌سازی، «میانای کاربر سیستم» لایه ماسک آلفا را به‌عنوان DISPLAY_DECORATION علامت‌گذاری می‌کند، نوعی ترکیب که از سخت‌افزار اختصاصی بهره می‌برد.

  • افزودن فیلد expectedPresentTime به DisplayCommand.aidl.

    فیلد expectedPresentTime به SurfaceFlinger اجازه می‌دهد زمان ارائه موردانتظار را برای وقتی که محتوای فعلی باید در صفحه نمایش داده شود تنظیم کند. با این ویژگی، SurfaceFlinger فرمان ارائه‌ای را پیش‌از موعد به پیاده‌سازی ارسال می‌کند که به آن اجازه می‌دهد کارهای ترکیب‌بندی بیشتری را خط‌لوله‌ای کند.

  • افزودن میاناهای برنامه‌سازی کاربردی جدید برای کنترل پیکربندی نمایشگر راه‌اندازی.

    بااستفاده از BOOT_DISPLAY_CONFIG، فروشندگان می‌توانند مشخص کنند که پیکربندی نمایشگر راه‌اندازی پشتیبانی می‌شود. روش‌های setBootDisplayConfig، clearBootDisplayConfig، و getPreferredBootDisplayConfig از BOOT_DISPLAY_CONFIG به این صورت استفاده می‌کنند:

    • چارچوب بااستفاده از setBootDisplayConfig، فروشندگان را از پیکربندی نمایش زمان راه‌اندازی مطلع می‌کند. فروشندگان باید پیکربندی نمایشگر راه‌اندازی را در حافظه نهان ذخیره کنند و در راه‌اندازی مجدد بعدی، در این پیکربندی راه‌اندازی کنند. اگر دستگاه نتواند با این پیکربندی راه‌اندازی شود، فروشنده باید پیکربندی‌ای پیدا کند که با وضوح و نرخ بازآوری این پیکربندی مطابقت داشته باشد. اگر چنین پیکربندی‌ای وجود نداشته باشد، فروشنده باید از پیکربندی نمایشگر ترجیحی خود استفاده کند.

    • بااستفاده از clearBootDisplayConfig، چارچوب به فروشندگان اطلاع می‌دهد پیکربندی نمایشگر راه‌اندازی را پاک کنند و در پیکربندی نمایشگر ترجیحی‌شان درطول راه‌اندازی مجدد بعدی راه‌اندازی کنند.

    • بااستفاده از getPreferredBootDisplayConfig، چارچوب حالت راه‌اندازی ترجیحی فروشنده را پُرسمان می‌کند.

    وقتی پیکربندی نمایشگر راه‌اندازی پشتیبانی نمی‌شود، این روش‌ها مقدار UNSUPPORTED را برمی‌گردانند.

  • افزودن میاناهای برنامه‌سازی کاربردی جدید برای کنترل زمان‌سنج بیکاری نمایشگر:

    • بااستفاده از DISPLAY_IDLE_TIMER، پیمانکاران می‌توانند مشخص کنند که زمان‌سنج عدم فعالیت توسط پیمانکار برای این نمایش اجرا می‌شود. وقتی دستگاه در حالت آماده‌به‌کار است، این قابلیت نرخ بازآوری را به تنظیم پایین‌تری تغییر می‌دهد تا توان را حفظ کند. این پلاتفرم از setIdleTimerEnabled برای کنترل مهلت زمانی تایمر استفاده می‌کند و در برخی موارد، برای غیرفعال کردن آن به‌منظور جلوگیری از تغییرات ناخواسته نرخ بازآوری در حالت بی‌کار.

    • استفاده از IComposerCallback.onVsyncIdle تماس برگشتی به پلاتفرم نشان می‌دهد که نمایشگر بیکار است و آهنگ vsync تغییر کرده است. پلاتفرم با بازنشانی مدل vsync خود به این برگشت‌پذیر پاسخ می‌دهد. این کار باعث می‌شود که در قاب بعدی، vsync دوباره همگام‌سازی شود و آهنگ جدید vsync را یاد بگیرد.

پیاده‌سازی

فروشندگان ملزم به پیاده‌سازی AIDL HAL برای Android 13 نیستند. بااین‌حال، به فروشندگان توصیه می‌شود به‌جای نسخه HIDL، آهنگساز AIDL HAL را پیاده‌سازی کنند تا از عملکرد و APIهای آهنگساز AIDL HAL استفاده کنند.

شبیه‌سازهای Android شامل پیاده‌سازی مرجع برای AIDL HWC HAL است.

آزمایش

برای آزمایش پیاده‌سازی‌تان، VtsHalGraphicsComposer3_TargetTest را اجرا کنید.