AIDL for Hardware Composer HAL

از 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، فروشندگان تشویق می شوند تا به جای نسخه HIDL، AIDL composer HAL را با شروع اندروید 13 اجرا کنند. برای اطلاعات بیشتر به بخش پیاده سازی مراجعه کنید.

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

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

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

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

    متد executeCommands در IComposerClient.aidl به صورت تعریف شده است

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

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

  • حذف IComposerClient.getClientTargetSupport زیرا هیچ کلاینت فعالی برای این روش وجود ندارد.

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

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

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

    فیلد brightness در LayerCommand به SurfaceFlinger اجازه می دهد روشنایی هر لایه را مشخص کند، به طوری که HWC محتوای لایه را در فضای نور خطی، بر خلاف فضای گاما، کم رنگ می کند.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    • استفاده از پاسخ تماس IComposerCallback.onVsyncIdle به پلتفرم نشان می دهد که صفحه نمایش بیکار است و آهنگ vsync تغییر کرده است. پلتفرم با تنظیم مجدد مدل vsync خود به این تماس پاسخ می دهد. یک vsync resync را در فریم بعدی مجبور می کند و آهنگ vsync جدید را یاد می گیرد.

پیاده سازی

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

یک پیاده سازی مرجع برای AIDL HWC HAL در شبیه سازهای اندروید پیاده سازی شده است.

آزمایش کردن

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