Preparing Your Metal App to Run in the Background

Panther·2021년 8월 15일
0

https://developer.apple.com/documentation/metal/preparing_your_metal_app_to_run_in_the_background

"Prepare your app to move into the background by pausing future GPU use and ensuring previous work is scheduled."

나중의 GPU 사용을 일시정지하고 이전 작업이 스케줄링 되는 것을 확실히 함으로써 앱이 백그라운드에 이동할 준비를 합니다.

Overview

iOS 및 tvOS는 포어그라운드 앱의 성능을 보장하기 위해 백그라운드 앱이 GPU에 접근하는 것을 제한합니다. 만약 Metal 명령 큐가 앱이 백그라운드로 이동한 후 명령 버퍼를 스케줄링하고자 시도하면, 시스템은 해당 명령 실행을 막습니다. 앱이 일시정지되는 중이며 백그라운드에 이동하고 있음을 UIKit이 알려주면, 앱은 Metal의 사용을 제한해야 합니다.

UIKit 생명주기에 대한 더 많은 정보는 Preparing Your UI to Run in the Background를 살펴보시기 바랍니다.

Preparing Your UI to Run in the Background
https://developer.apple.com/documentation/uikit/app_and_environment/scenes/preparing_your_ui_to_run_in_the_background
https://velog.io/@panther222128/Preparing-Your-UI-to-Run-in-the-Background

Disable Code that Commits New Command Buffers

앱이 비활성화되면, Metal에 전송하는 작업을 정지시킵니다. 앱이 재활성화된 후에만 코드가 재활성화될 수 있도록 확실히 하시기 바랍니다.

시스템이 앱에게 비활성화되는 중이라고 알려주면, 시스템이 앱의 메탈 사용을 제한하기 전에 약간의 시간이 있습니다. 앱이 백그라운드 상태가 되기 위해 앱이 준비해야 하는 추가적인 명령이 중요한 경우 추가적인 명령을 스케줄링할 수 있습니다. 유사하게 앱이 인코딩 명령의 중간에 이미 있었던 경우 앱은 더 이상의 작업을 멈추기 전에 현재 작업을 완료할 수 있습니다. 예를 들어 앱이 스크린에 애니메이션의 프레임을 렌더링하는 경우이면서 새 프레임에 대한 인코딩을 하는 중에 노티피케이션을 받으면, 렌더링 코드를 멈추기 전에 해당 프레임의 인코딩을 마무리할 수 있습니다.

Ensure All Previous Work is Scheduled for Execution

UIKit이 앱 딜리게이트의 applicationDidEnterBackground(_:) 메소드를 호출할 때, 앱이 시스템에 대한 컨트롤을 반환하기 전에 미리 커밋했던 모든 명령 버퍼를 메탈이 스케줄링할 것을 확실히 하시기 바랍니다. 각 명령 큐에서 만약 마지막 명령 버퍼가 미리 스케줄링되지 않았거나 완료되지 않았다면, waitUntilScheduled()를 호출해서 스케줄링되도록 강제해야 합니다.

새 명렁 버퍼를 인코딩하는 중간에 있다면, 이 단계들을 결합할 수 있습니다. 프레임을 렌더링하고 명령 버퍼를 커밋하기 위해서 인코딩 명령을 완료하시기 바라며, 이후 waitUntilScheduled()를 호출하시기 바랍니다.

앱이 백그라운드로 이동한 후 Metal이 앱으로부터 새 명령 버퍼를 보게 되면, 에러를 반환하고 명령 버퍼를 스케줄링하지 않습니다. 컴플리션 핸들러를 추가해서 이 에러를 테스트할 수 있습니다(addCompletedHandler(_:)). 컴플리션 핸들러 내부에서 상태 및 에러 속성을 확인하시기 바랍니다.

See Also


Command Setup

Setting Up a Command Structure

Metal이 GPU에서 명령을 실행하는 방법을 알아봅니다.

https://developer.apple.com/documentation/metal/setting_up_a_command_structure
https://velog.io/@panther222128/Setting-Up-a-Command-Structure

Counter Sampling

앱에서 GPU 통계를 측정해 성능을 향상시킵니다.

https://developer.apple.com/documentation/metal/counter_sampling
https://velog.io/@panther222128/Counter-Sampling


2개의 댓글

comment-user-thumbnail
2024년 1월 31일

Ensuring your metal app runs seamlessly in the background is crucial for optimal user experience. From efficient task handling to minimizing resource consumption, thorough preparation is key. Developers can find valuable insights and resources on this topic at . Stay ahead by mastering the nuances of background execution, enhancing your app's performance and user satisfaction.

답글 달기
comment-user-thumbnail
2024년 1월 31일

Ensuring your metal app runs seamlessly in the background is crucial for optimal user experience. From efficient task handling to minimizing resource consumption, thorough preparation is key. Developers can find valuable insights and resources on this topic at https://questok.com/. Stay ahead by mastering the nuances of background execution, enhancing your app's performance and user satisfaction.

답글 달기