Windows

Microsoft Images: migrando do UWP para o Home windows App SDK

A equipe do Microsoft Images App lançou recentemente uma grande atualização, mudando plataformas de UWP para Home windows App SDK. Esta postagem do weblog documenta nossa experiência na troca de plataformas, incluindo alguns benefícios impactantes e alguns desafios técnicos interessantes.

O novo aplicativo Fotos já foi totalmente implementado para Home windows Insiders e agora está sendo implementado para clientes de varejo a partir da versão 2024.11050.3002.0 e superior.

Desenvolvimento Simultâneo e Replataforma

Como um dos aplicativos usados ​​com mais frequência, lançamos continuamente novos recursos, como Apresentação de slides, Remoção de plano de fundo e Apagamento generativo. Manter a capacidade de fornecer novos recursos como esses na UWP e, ao mesmo tempo, progredir na mudança de plataforma para o Home windows App SDK foi elementary. Em termos simples, isso significava que todas as alterações – tanto os novos recursos quanto as alterações do Home windows App SDK – tinham que ir para nosso ramo de desenvolvimento principal. Para fazer isso com o mínimo de interrupção, adotamos algumas estratégias para garantir que as alterações de código fossem compatíveis com ambas as plataformas simultaneamente:

  1. Validação de compilação de solicitação pull paralela para variantes de aplicativo UWP e Home windows App SDK
  2. Compilação condicional (ifdefs) para APIs semelhantes, mas incompatíveis
  3. Aliases de namespace para APIs Home windows:: e Microsoft:: equivalentes
    #ifdef WIN_APP_SDK
    namespace WUXM = winrt::Microsoft::UI::Xaml::Media;
    #else
    namespace WUXM = winrt::Home windows::UI::Xaml::Media;
    #endif
  4. Inclusão condicional de arquivos de origem XAML, pois a compilação condicional não é compatível

Processos e nível de integridade

Em aplicativos UWP, os processos são executados em lowIL (baixo nível de integridade), também conhecido como 'AppContainer', o que significa que determinadas APIs são restritas ou podem exigir prompts adicionais de confirmação do usuário. Em aplicativos Win32, incluindo o Home windows App SDK, os processos geralmente são executados em MediumIL (nível de integridade médio), o que significa que o aplicativo tem um nível de privilégio mais alto.

Usando o Home windows App SDK, agora podemos salvar um arquivo editado na mesma pasta do arquivo authentic (por exemplo, “foo_edited.jpg”) sem solicitar que o usuário escolha a pasta de destino.

Devido a motivos que incluem compatibilidade entre plataformas e verificação de privilégios, APIs UWP equivalentes, como StorageFolder.GetFilesAsync, podem ser muito mais lentas do que suas APIs Win32 correspondentes, como FindNextFile. Isso é especialmente verdadeiro para APIs de sistema de arquivos e, ao lidar com grandes coleções de fotos abrangendo mais de 100.000 arquivos, a diferença de desempenho pode ser significativa – segundos versus minutos.

FotosService.exe

Exigir que os usuários esperem vários minutos para ver todas as suas mídias não seria uma ótima experiência para o usuário. Para obter um desempenho aceitável com a versão UWP do aplicativo Fotos, usamos uma arquitetura de vários processos, incluindo um processo primário de baixo IL e um processo em segundo plano de médio IL “PhotosService.exe” – um recurso restrito disponível apenas para editores verificados.

Implementar isso exigiu uma complexidade significativa:

  1. Usando WAP (Home windows Software Packaging) para empacotar aplicativos UWP e Win32 para implantação
  2. Adicionando o restrito “executarFullTrust” capacidade no AppxManifest para permitir a inclusão de um executável mediumIL no pacote
  3. Construindo um sistema IPC (comunicação entre processos) usando Named Pipes para permitir chamadas RPC entre dois processos:
Arquitetura de processo do aplicativo UWP Photos
Arquitetura de processo do aplicativo UWP Images

Com a migração para o Home windows App SDK, essa lógica complexa foi removida e integrada em um único processo, simplificando drasticamente a arquitetura do nosso aplicativo e trazendo melhor desempenho devido à remoção da comunicação entre processos.

Um ponto importante na nova abordagem é que o Images ainda é um aplicativo multithread e, para receber eventos de notificação do sistema de arquivos, foi necessário implementar uma janela headless em um thread separado para isolá-lo do thread de UI XAML.

Arquitetura de processo de aplicativo de fotos do SDK do aplicativo Windows
Arquitetura de processo de aplicativo de fotos do SDK do aplicativo Home windows

WebView2

Outro grande benefício do Home windows App SDK é a adição do WebView2, desenvolvido com base no novo navegador Edge baseado em Chromium. O aplicativo Fotos usa tecnologia da net em alguns lugares, inclusive com nosso editor de imagens multiplataforma usado no OneDrive e no aplicativo Fotos. Alguns benefícios principais do WebView2 incluem:

  1. Suporte WebGL permitindo melhor qualidade de renderização de imagem.
  2. Desempenho superior ao compartilhar imagens de alta qualidade entre as camadas nativa e net usando SharedBuffer.
  3. Oferece suporte a uma versão mais atualizada do Chromium, que traz as melhorias e atualizações de segurança mais recentes.
  4. Permitindo-nos otimizar o desempenho do nosso serviço de IA, que requer o envio de buffers de pixels do nosso Editor da Net para o nosso aplicativo nativo para inferência de IA.

Manutenção e Suporte

Como um aplicativo Inbox (incluído no Home windows), precisamos garantir que o Images esteja funcionando de maneira confiável para usuários em todas as versões suportadas do Home windows. No Home windows App SDK, a maior parte do código da plataforma é enviada como parte do pacote WindowsAppRuntime, em complete contraste com o UWP, onde tudo é enviado como parte do sistema operacional Home windows.

A principal diferença entre esses dois modelos é que os usuários obtêm automaticamente as atualizações de plataforma mais recentes para o aplicativo Fotos no SDK do aplicativo Home windows, enquanto no UWP eles teriam que esperar que essas alterações fossem incluídas nos patches de serviço do Home windows Replace.

Em termos práticos, isso significa que muitas vezes precisamos usar polyfills para corrigir bugs, reimplementar APIs ausentes ou até mesmo desabilitar recursos inteiramente em versões mais antigas do sistema operacional. Com o Home windows App SDK isso não é mais necessário, economizando um tempo precioso de desenvolvimento e reduzindo a sobrecarga de testes necessária para diferentes versões de sistema operacional.

Desafios Técnicos

ASTA x STA

Na UWP, o modelo de threading period baseado em ASTA (Software Single-Threaded Condo), que possui um mecanismo para proteger o thread da UI XAML contra reentrada. Por outro lado, o SDK do aplicativo Home windows usa um modelo STA common que requer alguns cuidados extras ao executar determinadas chamadas do thread de interface do usuário XAML, o que poderia causar reentrada e exceções armazenadas.

Na maioria dos casos, a correção seria enfileirar novamente a chamada problemática com o DispatcherQueue se ela precisasse ser executada no thread da interface do usuário. Outra abordagem é descarregar certas tarefas em um thread de segundo plano para desacoplar a lógica reentrante do thread de UI.

Suporte para reprodução automática

Um recurso importante do Images é a capacidade dos usuários de conectar unidades flash e dispositivos móveis para importar seus arquivos de mídia. No Home windows App SDK, esse recurso ainda não foi implementado, mas há uma boa alternativa usando APIs de shell Win32 e desktop3:AutoPlayHandler.

Este recurso funciona implantando e executando um processo de servidor COM separado que lida com a ativação da reprodução automática e inicia o fluxo de trabalho de importação do aplicativo Fotos.

Arquitetura de reprodução automática do aplicativo Fotos
Arquitetura de reprodução automática do aplicativo Fotos

Olhando para o futuro

A mudança para o SDK do aplicativo Home windows permitiu que o aplicativo Fotos continuasse usando os componentes de interface de usuário nativos, bonitos e coesos incluídos no WinUI, ao mesmo tempo em que adicionava a capacidade de chamar diretamente APIs Win32 e mantinha a compatibilidade com a maioria das APIs UWP. No lado da plataforma, a mudança para o SDK do aplicativo Home windows permite que todos os usuários do aplicativo Fotos recebam as melhorias mais recentes de estabilidade e desempenho imediatamente, uma vez que o Home windows App Runtime é atualizado como uma dependência da instalação do pacote do aplicativo Fotos.

A atualização do UWP para o Home windows App SDK representa uma mudança maior do que as atualizações anteriores da plataforma de aplicativos Home windows, mas os benefícios correspondentes superam significativamente o custo de desenvolvimento.


No futuro, aproveitaremos ainda mais o SDK do aplicativo Home windows, fazendo com que cada janela do aplicativo Fotos seja executada em seu próprio processo – uma arquitetura já usada com grande sucesso em navegadores da Net baseados em Chromium, como o Microsoft Edge. Aproveite esta prévia das próximas melhorias de desempenho!

Recursos

Para saber mais sobre como começar a usar o WinUI e o Home windows App SDK, visite https://aka.ms/windev e confira estes vídeos:

Navegando no desenvolvimento de aplicativos Win32 com WinUI e WPF | BRK241

Como criar experiências superiores com WinUI e WPF | BRK244

Related Articles

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to top button