تزئینات سیستم

در اندروید 9 (و پایین‌تر)، SurfaceFlinger و DisplayManagerService حداکثر دو نمایشگر فیزیکی با شناسه‌های کدگذاری سخت 0 و 1 را فرض کردند. همانطور که در Static Display Identifiers توضیح داده شد، SurfaceFlinger اکنون از API Hardware Composer (HWC) برای تولید نمایشگر پایدار استفاده می‌کند. شناسه‌ها، که به آن امکان می‌دهد تعداد دلخواه نمایش فیزیکی را مدیریت کند.

این فریم ورک می‌تواند رمز IBinder را برای نمایش فیزیکی از طریق SurfaceControl#getPhysicalDisplayToken پس از دریافت شناسه نمایش 64 بیتی از SurfaceControl#getPhysicalDisplayIds یا از یک رویداد hotplug DisplayEventReceiver جستجو کند.

در Android 10، صفحه نمایش داخلی اولیه TYPE_BUILT_IN است و همه نمایشگرهای ثانویه بدون در نظر گرفتن نوع اتصال به عنوان TYPE_HDMI علامت گذاری می شوند. بنابراین، نمایشگرهای داخلی اضافی در حال حاضر به عنوان خارجی در نظر گرفته می شوند. به عنوان یک راه حل، اگر HWC شناخته شده باشد و منطق تخصیص پورت قابل پیش بینی باشد، کد مخصوص دستگاه می تواند در مورد DisplayAddress.Physical#getPort مفروضاتی ایجاد کند.

پیاده سازی

پیش از این، نمایشگرها با شناسه‌های 32 بیتی شناسایی می‌شدند که 0 نمایشگر داخلی، 1 نمایشگر خارجی، [2، INT32_MAX] نمایشگرهای مجازی HWC، و -1 نمایشگر نامعتبر یا نمایش مجازی غیر HWC است. برای اینکه SurfaceFlinger و DisplayManagerService بیش از دو نمایشگر را ردیابی کنند و نمایشگرهای قبلاً دیده شده را شناسایی کنند، باید به نمایشگرها شناسه های پایدار و پایدار داده شود.

اگر HWC از IComposerClient.getDisplayIdentificationData پشتیبانی می‌کند و داده‌های شناسایی نمایشگر را ارائه می‌کند، SurfaceFlinger ساختار EDID را تجزیه می‌کند و شناسه‌های نمایشگر ۶۴ بیتی پایدار را برای نمایشگرهای فیزیکی و مجازی HWC اختصاص می‌دهد. شناسه ها با استفاده از یک نوع گزینه بیان می شوند، جایی که مقدار تهی نشان دهنده یک نمایشگر نامعتبر یا نمایش مجازی غیر HWC است. بدون پشتیبانی HWC، SurfaceFlinger به رفتار قدیمی با حداکثر دو نمایشگر فیزیکی بازمی گردد.

،

در اندروید 9 (و پایین‌تر)، SurfaceFlinger و DisplayManagerService حداکثر دو نمایشگر فیزیکی با شناسه‌های کدگذاری سخت 0 و 1 را فرض کردند. همانطور که در Static Display Identifiers توضیح داده شد، SurfaceFlinger اکنون از API Hardware Composer (HWC) برای تولید نمایشگر پایدار استفاده می‌کند. شناسه‌ها، که به آن امکان می‌دهد تعداد دلخواه نمایش فیزیکی را مدیریت کند.

این فریم ورک می‌تواند رمز IBinder را برای نمایش فیزیکی از طریق SurfaceControl#getPhysicalDisplayToken پس از دریافت شناسه نمایش 64 بیتی از SurfaceControl#getPhysicalDisplayIds یا از یک رویداد hotplug DisplayEventReceiver جستجو کند.

در Android 10، صفحه نمایش داخلی اولیه TYPE_BUILT_IN است و همه نمایشگرهای ثانویه بدون در نظر گرفتن نوع اتصال به عنوان TYPE_HDMI علامت گذاری می شوند. بنابراین، نمایشگرهای داخلی اضافی در حال حاضر به عنوان خارجی در نظر گرفته می شوند. به عنوان یک راه حل، اگر HWC شناخته شده باشد و منطق تخصیص پورت قابل پیش بینی باشد، کد مخصوص دستگاه می تواند در مورد DisplayAddress.Physical#getPort مفروضاتی ایجاد کند.

پیاده سازی

پیش از این، نمایشگرها با شناسه‌های 32 بیتی شناسایی می‌شدند که 0 نمایشگر داخلی، 1 نمایشگر خارجی، [2، INT32_MAX] نمایشگرهای مجازی HWC، و -1 نمایشگر نامعتبر یا نمایش مجازی غیر HWC است. برای اینکه SurfaceFlinger و DisplayManagerService بیش از دو نمایشگر را ردیابی کنند و نمایشگرهای قبلاً دیده شده را شناسایی کنند، باید به نمایشگرها شناسه های پایدار و پایدار داده شود.

اگر HWC از IComposerClient.getDisplayIdentificationData پشتیبانی می‌کند و داده‌های شناسایی نمایشگر را ارائه می‌کند، SurfaceFlinger ساختار EDID را تجزیه می‌کند و شناسه‌های نمایشگر ۶۴ بیتی پایدار را برای نمایشگرهای فیزیکی و مجازی HWC اختصاص می‌دهد. شناسه ها با استفاده از یک نوع گزینه بیان می شوند، جایی که مقدار تهی نشان دهنده یک نمایشگر نامعتبر یا نمایش مجازی غیر HWC است. بدون پشتیبانی HWC، SurfaceFlinger به رفتار قدیمی با حداکثر دو نمایشگر فیزیکی بازمی گردد.

،

در اندروید 9 (و پایین‌تر)، SurfaceFlinger و DisplayManagerService حداکثر دو نمایشگر فیزیکی با شناسه‌های کدگذاری سخت 0 و 1 را فرض کردند. همانطور که در Static Display Identifiers توضیح داده شد، SurfaceFlinger اکنون از API Hardware Composer (HWC) برای تولید نمایشگر پایدار استفاده می‌کند. شناسه‌ها، که به آن امکان می‌دهد تعداد دلخواه نمایش فیزیکی را مدیریت کند.

این فریم ورک می‌تواند رمز IBinder را برای نمایش فیزیکی از طریق SurfaceControl#getPhysicalDisplayToken پس از دریافت شناسه نمایش 64 بیتی از SurfaceControl#getPhysicalDisplayIds یا از یک رویداد hotplug DisplayEventReceiver جستجو کند.

در Android 10، صفحه نمایش داخلی اولیه TYPE_BUILT_IN است و همه نمایشگرهای ثانویه بدون در نظر گرفتن نوع اتصال به عنوان TYPE_HDMI علامت گذاری می شوند. بنابراین، نمایشگرهای داخلی اضافی در حال حاضر به عنوان خارجی در نظر گرفته می شوند. به عنوان یک راه حل، اگر HWC شناخته شده باشد و منطق تخصیص پورت قابل پیش بینی باشد، کد مخصوص دستگاه می تواند در مورد DisplayAddress.Physical#getPort مفروضاتی ایجاد کند.

پیاده سازی

پیش از این، نمایشگرها با شناسه‌های 32 بیتی شناسایی می‌شدند که 0 نمایشگر داخلی، 1 نمایشگر خارجی، [2، INT32_MAX] نمایشگرهای مجازی HWC، و -1 نمایشگر نامعتبر یا نمایش مجازی غیر HWC است. برای اینکه SurfaceFlinger و DisplayManagerService بیش از دو نمایشگر را ردیابی کنند و نمایشگرهای قبلاً دیده شده را شناسایی کنند، باید به نمایشگرها شناسه های پایدار و پایدار داده شود.

اگر HWC از IComposerClient.getDisplayIdentificationData پشتیبانی می‌کند و داده‌های شناسایی نمایشگر را ارائه می‌کند، SurfaceFlinger ساختار EDID را تجزیه می‌کند و شناسه‌های نمایشگر ۶۴ بیتی پایدار را برای نمایشگرهای فیزیکی و مجازی HWC اختصاص می‌دهد. شناسه ها با استفاده از یک نوع گزینه بیان می شوند، جایی که مقدار تهی نشان دهنده یک نمایشگر نامعتبر یا نمایش مجازی غیر HWC است. بدون پشتیبانی HWC، SurfaceFlinger به رفتار قدیمی با حداکثر دو نمایشگر فیزیکی بازمی گردد.