De onde vêm os dados do site

Quais dados do site são lidos do código e quais são escritos à mão, como as versões estável e de desenvolvimento são separadas, o que o build confere e como o site é publicado e mantido.

Build 63Vale para a build 63 e para o main atual, que tem os mesmos ajustes e dados.

Editar esta página

Este site é gerado a partir do repositório do Xendroid+, em dois idiomas: o inglês na raiz do endereço e o português em pt-br/. Cada página existe nos dois, com o mesmo conteúdo, e o seletor de idioma do cabeçalho leva à mesma página no outro idioma. O que dá para ler do código é lido do código a cada build; o que precisa de explicação é escrito à mão, em Markdown, e conferido contra o código quando possível. Nada garante que um texto escrito à mão continue certo depois que o app muda: por isso cada página diz com qual versão foi revisada e avisa quando o código citado mudou depois disso.

Duas versões #

  • Estável: o commit da release mais recente publicada no GitHub, hoje a build 63 (732c64db). É a versão que a página inicial oferece para baixar e a base da documentação e do simulador.
  • Desenvolvimento: o commit do main em que o site é gerado (87b5c00f).

O build lê as duas separadamente: a estável numa árvore de trabalho própria, no commit da release. Quando as duas dão os mesmos dados (o main mudou só o site, um workflow ou comentários do código), o site mostra uma versão só e diz isso. Quando mudou, a referência de ajustes lista as diferenças, os trechos da documentação marcados com uma versão dizem a partir de qual build valem, e os dados das duas são publicados em dados/estavel.json e dados/desenvolvimento.json.

O que é lido do código #

DadoArquivo de origemComo é lidoVersão
Ajustes (nome, grupo, nível, textos, opções)app/src/main/java/xendroid/compose/settings/SettingsSchema.kt, app/src/main/java/xendroid/compose/settings/SettingCatalog.kt, app/src/main/java/xendroid/compose/ui/settings/SettingTexts.kt, app/src/main/java/xendroid/compose/ui/settings/XdSettings.ktlidos do Kotlin, com os textos de values-pt-rBR (inglês quando falta tradução) e, nas páginas em inglês, de values/estável e desenvolvimento
Padrão de cada ajusteemulator-core/src/main/assets/config/default_config.toml, app/src/main/java/xendroid/compose/settings/SettingsSchema.kto valor do modelo default_config.toml; sem ele, o do esquema, como o app fazestável e desenvolvimento
Cvars do núcleo (tipo, seção, padrão)emulator-core/src/main/cpp/xenia/src/xenia/DEFINE_* do C++, com o pré-processador do build Androidestável e desenvolvimento
Correções automáticas por jogoemulator-core/src/main/cpp/xenia/src/xenia/game_quirks.cctabela do game_quirks.ccestável
Patches de jogospatches/xenia-canary/patchesarquivos *.patch.toml copiados para o APK no buildestável
Nomes de jogos por Title IDpatches/xenia-canary/patches, emulator-core/src/main/cpp/xenia/assets/game-compatibility/master.jsonnome do arquivo de patch; senão a base vendorizada do Xenia (só o nome)estável
Pacote, Android mínimo, ABI e pastasapp/build.gradle, .github/workflows/XenDroid.yml, emulator-core/src/main/java/xendroid/compose/Application.java, app/src/main/java/xendroid/compose/settings/ConfigStore.kt, app/src/main/java/xendroid/compose/driver/DriverSources.ktpadrões no build.gradle, no workflow e no códigoestável e desenvolvimento
Medições de desempenhoREADME.md, README.pt-BR.mdtabela "## Desempenho" do README.pt-BR.md (páginas em português) e "## Performance snapshot" do README.md (páginas em inglês)desenvolvimento (README atual)
Versões publicadas e APKAPI de releases do GitHub, no momento do build; as páginas em português mostram o bloco update-summary:pt-BR de cada release, as em inglês o update-summary:enreleases
Prints das telasdocs/ui-redesign/prints/app/imagens dos testes de tela (Roborazzi), convertidas para WebPas do repositório

Os textos dos ajustes são os do próprio app: em português, os de values-pt-rBR (quando o app não tem tradução, o texto aparece em inglês, marcado como tal); em inglês, os de values. O resumo de cada release vem do bloco update-summary:pt-BR das notas nas páginas em português e do update-summary:en nas em inglês, e a tabela de desempenho vem do README.pt-BR.md e do README.md. A base de títulos do Xenia que acompanha o núcleo serve só para dar nome a um Title ID: o estado de compatibilidade dela é do Xenia para PC e não vale para o Xendroid+.

O que é escrito à mão #

  • As páginas da documentação, em website/content/docs/*.md (português) e website/content/docs/en/*.md (inglês).
  • Os textos da página inicial e as legendas dos prints, em website/scripts/site/landing.mjs, website/content/prints.mjs e website/content/prints.en.mjs.
  • As anotações e os dados de exemplo do simulador (jogos, sessões, perfis), marcados como exemplo na própria ferramenta. O simulador é escrito em português; o build gera a versão em inglês trocando cada texto pelo do dicionário website/content/simulador.en.json, ou pelo texto do próprio app em inglês quando é o mesmo rótulo do app, e para se faltar a tradução de algum texto.

Cada página da documentação diz no cabeçalho o commit com que foi revisada (conferido) e lista os arquivos do app que ela descreve (fontes). Se algum desses arquivos mudou entre a revisão e a versão estável, a página mostra um aviso no topo e o build registra o caso. Valores como a versão, o tamanho do APK, o pacote e as contagens entram nas páginas por referência aos dados ({{estavel.build}}, por exemplo), e não escritos no texto.

O que o build confere #

A cada build, o site confere:

  • se cada ajuste do app tem uma cvar no núcleo, na mesma seção, e se os valores que o app grava são do tipo que o núcleo aceita;
  • se as chaves do modelo default_config.toml existem no núcleo;
  • se as correções automáticas por jogo apontam para cvars que existem;
  • se os arquivos de patch têm o Title ID do nome;
  • se cada link interno, âncora, arquivo do repositório citado, print e tela do simulador existe;
  • se cada página tem a versão no outro idioma e se as duas apontam uma para a outra.

Um problema que torna o site errado (um dado que não pôde ser lido, um link quebrado) para a publicação. Uma inconsistência do próprio app não para o site: vai para a lista abaixo, que é o retrato do código da build 63.

Avisos sobre o código (17)

  • Vulkan|vulkan_validation = "false": a cvar é int32 e o valor seria boolean · app/src/main/java/xendroid/compose/settings/SettingsSchema.kt:20
  • Vulkan|vulkan_validation = "true": a cvar é int32 e o valor seria boolean · app/src/main/java/xendroid/compose/settings/SettingsSchema.kt:20
  • Kernel|stack_size_multiplier_hack: o core não define a cvar "stack_size_multiplier_hack"; o valor gravado é ignorado · app/src/main/java/xendroid/compose/settings/SettingsSchema.kt:105
  • emulator-core/src/main/assets/config/default_config.toml [CPU] disable_global_lock: o core não define essa cvar · emulator-core/src/main/assets/config/default_config.toml [CPU] disable_global_lock
  • emulator-core/src/main/assets/config/default_config.toml [GPU] gamma_render_target_as_srgb: o core não define essa cvar · emulator-core/src/main/assets/config/default_config.toml [GPU] gamma_render_target_as_srgb
  • emulator-core/src/main/assets/config/default_config.toml [GPU] query_occlusion_sample_lower_threshold: o core não define essa cvar · emulator-core/src/main/assets/config/default_config.toml [GPU] query_occlusion_sample_lower_threshold
  • emulator-core/src/main/assets/config/default_config.toml [GPU] query_occlusion_sample_upper_threshold: o core não define essa cvar · emulator-core/src/main/assets/config/default_config.toml [GPU] query_occlusion_sample_upper_threshold
  • emulator-core/src/main/assets/config/default_config.toml [GPU] readback_memexport: o core não define essa cvar · emulator-core/src/main/assets/config/default_config.toml [GPU] readback_memexport
  • emulator-core/src/main/assets/config/default_config.toml [General] notification_sound_path: o core não define essa cvar · emulator-core/src/main/assets/config/default_config.toml [General] notification_sound_path
  • emulator-core/src/main/assets/config/default_config.toml [Kernel] Allow_nui_initialization: o core não define essa cvar · emulator-core/src/main/assets/config/default_config.toml [Kernel] Allow_nui_initialization
  • emulator-core/src/main/assets/config/default_config.toml [Vulkan] vulkan_validation = false: a cvar é int32 e o valor seria boolean · emulator-core/src/main/assets/config/default_config.toml [Vulkan] vulkan_validation
  • [desenvolvimento] 464507E1 - Farming Simulator (TU1).patch.toml: title_id 464507DC difere do nome do arquivo
  • [desenvolvimento] 464507E1 - Farming Simulator.patch.toml: title_id 464507DC difere do nome do arquivo
  • [desenvolvimento] 534507D4 - Syndicate.patch.toml: title_id 45410923 difere do nome do arquivo
  • [estavel] 464507E1 - Farming Simulator (TU1).patch.toml: title_id 464507DC difere do nome do arquivo
  • [estavel] 464507E1 - Farming Simulator.patch.toml: title_id 464507DC difere do nome do arquivo
  • [estavel] 534507D4 - Syndicate.patch.toml: title_id 45410923 difere do nome do arquivo

Padrões do app diferentes dos do núcleo (12)

O app grava o valor dele na primeira abertura (o do modelo default_config.toml, ou o do esquema quando o modelo não traz a chave); o núcleo só usaria o próprio padrão se a chave faltasse no arquivo.

ChaveAppNúcleoDefinição no núcleo
Vulkan|vulkan_log_debug_messagesfalse (modelo)trueemulator-core/src/main/cpp/xenia/src/xenia/ui/vulkan/vulkan_instance.cc:170
Vulkan|vulkan_validationfalse (modelo)0emulator-core/src/main/cpp/xenia/src/xenia/ui/vulkan/vulkan_provider.cc:19
Vulkan|vulkan_pipeline_creation_threads4 (modelo)-1emulator-core/src/main/cpp/xenia/src/xenia/gpu/vulkan/vulkan_pipeline_cache.cc:72
Vulkan|vulkan_in_pass_resolvetrue (esquema)falseemulator-core/src/main/cpp/xenia/src/xenia/gpu/vulkan/vulkan_render_target_cache.cc:136
Kernel|staging_modefalse (modelo)0emulator-core/src/main/cpp/xenia/src/xenia/kernel/xam/xam_info.cc:50
Display|postprocess_dithertrue (modelo)falseemulator-core/src/main/cpp/xenia/src/xenia/app/emulator_window.cc:93
Display|postprocess_scaling_and_sharpening"" (modelo)bilinearemulator-core/src/main/cpp/xenia/src/xenia/app/emulator_window.cc:75
Display|postprocess_ffx_fsr_max_upsampling_passes4 (modelo)1emulator-core/src/main/cpp/xenia/src/xenia/app/emulator_window.cc:84
Display|present_safe_area_x90 (modelo)100emulator-core/src/main/cpp/xenia/src/xenia/ui/presenter.cc:67
Display|present_safe_area_y90 (modelo)100emulator-core/src/main/cpp/xenia/src/xenia/ui/presenter.cc:72
Display|postprocess_antialiasing"" (modelo)noneemulator-core/src/main/cpp/xenia/src/xenia/app/emulator_window.cc:71
GPU|framerate_limit0 (modelo)60emulator-core/src/main/cpp/xenia/src/xenia/gpu/gpu_flags.cc:72

Publicação #

O site é publicado pelo GitHub Pages com o workflow .github/workflows/pages.yml, que roda:

  • a cada push no main que muda o site ou um arquivo que ele lê: o app, o núcleo, os patches, os README e os documentos;
  • quando o workflow do APK termina com sucesso no main, o que cobre as releases novas (as releases criadas pelo próprio CI não disparam outros workflows);
  • uma vez por dia, para pegar releases publicadas ou editadas à mão;
  • sob pedido, pela aba Actions.

Num pull request, o workflow só gera e confere o site, sem publicar. O token do GitHub Actions é usado só durante o build, para ler as releases; ele nunca chega às páginas.

Manter o site #

  • Gerar e ver localmente: em website/, npm ci, npm run build e npm run serve, que serve o site no mesmo caminho do GitHub Pages.
  • Conferir: npm run check procura links e recursos quebrados; npm test roda os testes no navegador (layout, teclado, busca, simulador).
  • Uma página nova são dois arquivos Markdown, um em website/content/docs/ e outro em website/content/docs/en/, com título, descrição, seção e ordem no cabeçalho; o inglês leva também pt: <nome do arquivo em português>, que pareia as duas.
  • Depois de revisar uma página contra o código atual, atualize o conferido dela.

O guia de manutenção completo está no README do site.

Digite para buscar em todas as páginas da documentação, nos ajustes do app e nas chaves do TOML.

↑ ↓ escolherEnter abrirEsc fechar