در اندروید 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 به رفتار قدیمی با حداکثر دو نمایشگر فیزیکی بازمی گردد.