Avisos de descontinuação do (P)NaCl
Considerando o impulso do suporte a vários navegadores do WebAssembly, planejamos concentrar nossos
esforços de código nativo no WebAssembly e remover o suporte para
PNaCl no 4º trimestre de 2019 (exceto para apps do Chrome). Acreditamos que a
ecossistema em torno do WebAssembly
o torna mais adequado para aplicativos novos e atuais de alto desempenho
aplicativos da Web e que o uso do PNaCl seja baixo o suficiente para justificar a descontinuação.
A partir do Chrome 76, o PNaCl na Web aberta foi movido para um
teste de origem,
que é um mecanismo para que os desenvolvedores da Web se registrem e tenham acesso a um recurso que não está ativado por padrão.
Geralmente, esse é um novo recurso proposto, mas, neste caso, é um recurso que está sendo descontinuado.
Um desenvolvedor pode se registrar no Console de teste de origem.
e receber um token, que pode ser incorporado a uma página e ativará o recurso sem que o usuário precise usar uma sinalização.
Para mais detalhes, consulte o guia vinculado. O teste está programado para durar até o Chrome 78, aproximadamente até dezembro de 2019.
Essa mudança não afeta o NaCl ou o PNaCl em apps ou extensões do Chrome, e a flag "enable-nacl"
em chrome://flags também pode ser usada para ativar o PNaCl localmente para testes.
Essa flag também mantém a função atual de ativar o NaCl "nativo" não PNaCl em qualquer página.
Também anunciamos recentemente a descontinuação dos
apps do Chrome
fora do ChromeOS no primeiro trimestre de 2018.
Para a maioria dos casos de uso (P)NaCl, recomendamos a transição
do SDK NaCl para o Emscripten.
A migração provavelmente será razoavelmente simples
se o aplicativo for portátil para Linux, usar
SDL ou APIs POSIX.
Embora o suporte direto para APIs NaCl / Pepper não esteja disponível,
tentamos listar equivalentes da API Web.
Para casos de portabilidade mais desafiadores, entre em contato em
native-client-discuss@googlegroups.com
Migração da API
Descrevemos aqui o status dos substitutos da Plataforma da Web para cada
uma das APIs expostas a (P)NaCl.
Além disso, a tabela lista a biblioteca ou opção em Emscripten
que ofereça o substituto mais próximo.
Esperamos adicionar suporte a linhas de execução de memória compartilhada ao WebAssembly em 2017,
já que as linhas de execução são essenciais para corresponder aos casos de uso
mais interessantes do (P)NaCl. Os itens de migração que assumem a compatibilidade com linhas de execução futuras
estão marcados abaixo. Se o controle de fluxo de seu aplicativo depende muito do bloqueio
APIs, você também pode achar que o suporte a linhas de execução é necessário para uma portabilidade conveniente.
Embora tenhamos tentado ser precisos nesta tabela,
é possível que haja erros ou omissões.
Se você encontrar alguma, entre em contato conosco pelo
native-client-discuss@googlegroups.com
PPAPI
PPB_Audio
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
x |
SDL (parcial) |
GAP (parcial): AudioWorkletNode MAIS OU MENOS equivalente |
O AudioWorkletSpec foi concluído, mas o AudioDeviceClient pode ser mais adequado para essa API. O AudioDeviceClient ainda está sendo especificado pela comunidade. O worklet pode não ser o equivalente aproximado para essa API. |
GetCurrentConfig |
|
SDL |
AudioContext.* (recupera as configurações transmitidas) |
|
StartPlayback |
|
SDL |
AudioBufferSourceNode.start |
|
StopPlayback |
|
SDL |
AudioBufferSourceNode.stop |
|
PPB_AudioBuffer
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
GetTimestamp |
|
SDL |
AudioBufferSourceNode.start (parâmetro) |
São transmitidos toda vez, em vez de serem anexados ao buffer. |
SetTimestamp |
|
SDL |
AudioBufferSourceNode.start (parâmetro) |
|
GetSampleRate |
|
SDL |
AudioBuffer.sampleRate |
|
GetSampleSize |
|
GAP |
GAP: o WebAudio só usa float de 32 bits, e a PPAPI usa int de 16 bits. |
Teoricamente, a PPAPI oferece suporte a vários tamanhos de amostragem. Na prática, ele é compatível apenas com amostras de 16 bits. Infelizmente, os desenvolvedores solicitaram tamanhos de amostra de 16 bits para economizar no uso de memória. A próxima versão da especificação de áudio da Web vai implementar o suporte a amostras de 16 bits. Uma otimização para o AudioBuffer pode ser implementada de forma similar ao Firefox usando um buffer de 16 bits para o áudio que vem do decodeAudioData |
GetNumberOfChannels |
|
SDL |
AudioBuffer.numberOfChannels |
|
GetDataBuffer |
|
SDL |
AudioBuffer.getChannelData |
|
GetBufferSize |
|
SDL |
AudioBuffer.length |
|
PPB_AudioConfig
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
CreateStereo16Bit |
|
GAP |
GAP: apenas amostras de ponto flutuante de 32 bits são aceitas. |
A próxima versão da especificação Web Audio implementará o suporte para amostras de 16 bits. |
GetSampleRate |
|
SDL |
AudioContext.sampleRate |
|
GetSampleFrameCount |
|
SDL |
AudioBuffer.length |
|
RecommendSampleRate |
|
SDL |
AudioContext.sampleRate (da construção padrão) |
Um AudioContext terá a taxa de amostragem preferencial que corresponde à taxa de amostragem real do dispositivo de áudio de hardware por padrão. |
RecommendSampleFrameCount |
|
GAP |
GAP: seria processado com o AudioDeviceClient planejado. |
Há um problema em aberto para permitir um tamanho especificado pelo usuário, mas isso ainda está sendo definido. Provavelmente, isso funciona melhor com o AudioDeviceClient, que pode dizer qual seria o tamanho adequado para o hardware fornecido. |
PPB_Console
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Registro |
|
Utime |
console.log/warn/error/... |
|
LogWithSource |
|
GAP |
GAP |
A API Console é considerada uma substituição suficientemente completa, a menos que haja casos de uso específicos levantados pelos desenvolvedores para a funcionalidade fornecida pelo LogWithSource. Os mapas de origem do DevTools podem ser usados para depurar o JavaScript transcompilado no idioma de origem original. |
PPB_Core
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
getTime |
|
Utime |
new Date().getTime() |
|
getTimeTicks |
|
utime |
new Date().getTime() |
|
IsMainThread |
|
GAP |
window.document !== indefinido |
|
CallOnMainThread |
|
GAP |
Worker.postMessage + Atomics.wait |
É possível criar uma sincronização equivalente. |
PPB_FileIO
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
FS (parcial) |
window.chooseFileSystemEntries() |
Criar e abrir são usados de forma diferente, mas as peças têm a mesma potência. |
Abrir |
|
FS (parcial) |
window.chooseFileSystemEntries() |
|
Consultar |
|
FS (parcial) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified |
GAP (parcial) - Blob.type também pode ser usado para verificar o tipo MIME. O tipo de sistema de arquivos, o horário de criação e o horário do último acesso não podem ser determinados com a API Native File System. |
Toque |
|
FS (parcial) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
Ler |
|
FS (parcial) |
Blob.slice().arrayBuffer() |
|
Gravação |
|
FS (parcial) |
FileSystemWriter.write() |
|
SetLength |
|
FS (parcial) |
FileSystemWriter.truncate() |
|
Flush |
|
GAP (parcial) |
GAP (parcial): os arquivos são apagados quando FileSystemWrite.close() é chamado. |
Isso é intencional, porque os arquivos da API do sistema de arquivos nativo são expostos ao SO. Portanto, uma verificação da Navegação segura precisa ser realizada antes que os dados sejam mostrados ao SO. |
Fechar |
|
FS (parcial) |
FileSystemWriter.close() |
Não cancela operações pendentes, mas limpa todos os dados gravados até o momento no disco. |
ReadToArray |
|
GAP |
Blob.slice().arrayBuffer() ou Blob.arrayBuffer() |
Permite várias leituras de subintervalos em paralelo. |
PPB_FileRef
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
FS (parcial) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
GetFileSystemType |
|
FS (parcial) |
FileSystem.type |
|
GetName |
|
FS (parcial) |
File.name |
|
GetPath |
|
FS (parcial) |
GAP (parcial): com a API Native File System, o caminho relativo de um arquivo pode ser determinado a partir da referência a um diretório que contenha o arquivo usando FileSystemHandle.resolve(FileSystemHandle) |
O caminho absoluto de um arquivo não pode ser determinado, e o usuário precisa conceder permissão para acessar o diretório que contém o arquivo. |
GetParent |
|
FS (parcial) |
GAP (parcial): com a API Native File System, o caminho relativo de um arquivo pode ser determinado a partir da referência a um diretório que contenha o arquivo usando FileSystemHandle.resolve(FileSystemHandle) |
O usuário precisa conceder permissão para acessar o diretório que contém o arquivo. |
MakeDirectory |
|
FS (parcial) |
FileSystemHandle.getDirectory(..., {createIfNotExists: true}) |
|
Toque |
|
FS (parcial) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
O tempo de modificação pode ser alterado por escrito. |
Excluir |
|
FS (parcial) |
FileSystemDirectoryHandle.removeEntry() |
Ao contrário da PPAPI, os diretórios não precisam estar vazios. |
Renomear |
|
FS (parcial) |
GAP (parcial): com a API Native File System, o arquivo pode ser escrito com o novo nome usando uma combinação de FileSystemFileHandle.getFile() para o novo nome e FileSystemFileHandle.createWriter().write() com o conteúdo do arquivo antigo. Em seguida, use FileSystemDirectoryHandle.removeEntry() para excluir o arquivo antigo. |
Não há uma API direta que faça isso em uma etapa na API Native File System. |
Consultar |
|
GAP (parcial) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified |
GAP (parcial) - Blob.type também pode ser usado para verificar o tipo MIME. O tipo de sistema de arquivos, o horário de criação e o horário do último acesso não podem ser determinados com a API Native File System. |
ReadDirectoryEntries |
|
FS (parcial) |
FileSystemDirectoryHandle.getEntries() |
|
PPB_FileSystem
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
FS (parcial) |
window.requestFileSystem |
A API JS faz as duas coisas em uma única etapa |
Abrir |
|
GAP |
window.requestFileSystem |
A API JS faz as duas coisas em uma única etapa |
GetType |
|
GAP |
FileSystem.type |
|
PPB_Fullscreen
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
IsFullScreen |
|
html5.h |
Document.fullscreenEnabled |
|
SetFullscreen |
|
html5.h |
Document.requestFullscreen |
|
GetScreenSize |
|
html5.h |
Document.exitFullscreen |
|
PPB_Gamepad
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Exemplo |
|
SDL |
Gamepad.* |
O objeto Gamepad expõe um carimbo de data/hora relativo a navigationStart. Ela é atualizada quando os dados são recebidos do hardware: https://www.w3.org/TR/gamepad/#gamepad-interface |
PPB_Graphics2D
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
SDL |
Canvas.getContext('2d') |
|
Descrever |
|
SDL |
Canvas.clientWidth + Canvas.clientHeight. |
|
PaintImageData |
|
SDL |
CanvasRenderingContext2D.putImageData |
|
Rolagem |
|
GAP |
CanvasRenderingContext2D.scrollIntoView, CanvasRenderingContext2D.drawImage |
GAP (parcial): pode ser implementado desenhando a tela em si mesma, com um deslocamento, usando drawImage e preenchendo o restante. |
ReplaceContents |
|
SDL |
CanvasRenderingContext2D.drawImage |
|
Flush |
|
GAP |
Sem equivalente direto |
GAP (parcial):
sempre há um flush implícito no final do código de exibição. Isso provavelmente não
vai mudar. No entanto, a combinação
OffscreenCanvas
e
ImageBitmapRenderingContext
oferecem funcionalidades semelhantes. |
SetScale |
|
SDL |
CanvasRenderingContext2D.scale |
|
GetScale |
|
SDL |
CanvasRenderingContext2D.currentTransform |
|
SetLayerTransform |
|
SDL |
CanvasRenderingContext2D.setTransform
CanvasRenderingContext2D.scale
CanvasRenderingContext2D.translate |
|
PPB_Graphics3D
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
GetAttribMaxValue |
|
OpenGL ES 3.0 |
WebGL 2.0 |
GAP (parcial): a exposição do WebGL 2.0 e do Emscripten ao OpenGL ES 3.0 é compatível com framebuffers multiamostrados definidos pelo usuário, nos quais todos os parâmetros configuráveis por meio de PPAPI podem ser configurados. |
Criar |
|
SDL |
Canvas.getContext |
|
GetAttribs |
|
SDL |
WebGLRenderingContext.getContextAttributes |
|
SetAttribs |
|
SDL |
Canvas.getContext(.., OPTIONS) |
|
GetError |
|
SDL |
WebGLRenderingContext.getError |
|
ResizeBuffers |
|
SDL |
Canvas.width = w; Canvas.height = h; |
|
SwapBuffers |
|
GAP |
Sem equivalente direto |
GAP (parcial) -
Sempre há uma limpeza implícita no final do código do desenho. isso é improvável
mudar. No entanto, a combinação de
OffscreenCanvas
e
ImageBitmapRenderingContext
fornecem funcionalidades semelhantes. |
PPB_ImageData
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
GetNativeImageDataFormat |
|
SDL |
ImageData exige a ordem RGBA |
|
IsImageDataFormatSupported |
|
SDL |
ImageData exige a ordem RGBA |
|
Criar |
|
SDL |
CanvasRenderingContext2d.createImageData |
|
Descrição |
|
SDL |
ImageData nunca tem um salto |
|
Mapa |
|
SDL |
ImageData.data |
|
Desmapear |
|
SDL |
ImageData.data |
|
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
RequestInputEvents |
|
SDL |
Sem equivalente direto |
A falta desse recurso provavelmente é menos relevante, já que o JS / Wasm é executado na linha de execução principal e pode filtrar eventos de maneira mais econômica sem incorrer em uma ida e volta de processo cruzado. |
RequestFilteringInputEvents |
|
SDL |
Eventos de composição* de mouse*, tecla*, roda*, toque* |
|
|
|
SDL |
Element.addEventListener |
|
ClearInputEventRequest |
|
SDL |
Element.removeEventListener |
|
GetType |
|
SDL |
Descendentes da classe do evento |
|
GetTimeStamp |
|
SDL |
Event.timeStamp |
|
GetModifiers |
|
SDL |
*Event.altKey/shiftKey/metaKey/ctrlKey |
|
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
SDL |
MouseEvent |
|
GetButton |
|
SDL |
MouseEvent.button |
|
GetPosition |
|
SDL |
MouseEvent.client*/page*/offset* |
|
GetClickCount |
|
SDL |
clique duplo' em comparação a "mousedown" Eventos |
|
GetMovement |
|
SDL |
MouseEvent.movement* |
|
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
SDL |
WheelEvent |
|
GetDelta |
|
SDL |
WheelEvent.delta* |
|
GetTicks |
|
GAP |
GAP - deltaMode contém essas informações, mas de forma incompleta. |
Há uma discussão sobre a implementação de uma API WheelEvent.deltaMode: https://github.com/w3c/uievents/issues/181#issuecomment-537811017 |
GetScrollByPage |
|
GAP |
GAP - deltaMode contém essas informações, mas de forma incompleta. |
Há uma discussão sobre a implementação de uma API WheelEvent.deltaMode: https://github.com/w3c/uievents/issues/181#issuecomment-537811017 |
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
SDL |
KeyboardEvent |
|
GetKeyCode |
|
SDL |
KeyboardEvent.keyCode |
|
GetCharacterText |
|
SDL |
KeyboardEvent.key |
|
GetCode |
|
SDL |
KeyboardEvent.code |
|
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
SDL |
TouchEvent |
|
AddTouchPoint |
|
SDL |
TouchEvent.touches.push |
|
GetTouchCount |
|
SDL |
TouchEvent.touches.length |
|
GetTouchByIndex |
|
SDL |
TouchEvent.touches[i] |
|
GetTouchById |
|
SDL |
Touch.indentifer (para descobrir por conta própria) |
|
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
GAP |
CompositionEvent |
|
GetText |
|
GAP |
CompositionEvent.data |
|
GetSegmentNumber |
|
GAP |
GAP - Sem equivalente direto |
Esses dados podem ser recuperados de CompositionEvent.data. |
GetSegmentOffset |
|
GAP |
GAP: não há equivalente direto |
|
GetTargetSegment |
|
GAP |
GAP - Sem equivalente direto |
|
GetSelection |
|
GAP |
GAP - Sem equivalente direto |
|
PPB_Instance
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
BindGraphics |
|
SDL |
Canvas.getContext (impossível, porque a vinculação é automática). |
|
IsFullFrame |
|
GAP |
GAP: não há equivalente aos processadores de tipo MIME. |
Os apps NaCl podem ser registrados para processar um tipo MIME específico e serem proprietários de todo o documento. |
DidCreate |
|
N/A |
<Element>[key] |
O acesso geral ao DOM permite filtrar atributos de tag |
DidDestroy |
|
N/A |
N/A |
Não acionada para NaCl |
DidChangeView |
|
N/A |
Evento de redimensionamento do elemento |
|
DidChangeFocus |
|
N/A |
Elemento "foco", "foco", "foco" Eventos |
|
HandleDocumentLoad |
|
N/A |
GAP - Não há maneira de se registrar como gerenciador de tipo MIME |
Módulos NaCl via apps + uma entrada de manifesto pode ser configurada para processar determinados tipos MIME. |
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Configurar |
|
GAP |
getUserMedia() |
As restrições de getUserMedia() podem fornecer os valores de configuração a serem usados no MediaStreamTrack. |
GetAttrib |
|
GAP |
MediaStreamTrack.getSettings() |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetBuffer |
|
GAP |
GAP: sem equivalente |
|
RecycleBuffer |
|
GAP |
GAP: sem equivalente |
|
Fechar |
|
GAP |
MediaStreamTrack.stop() |
|
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
GAP |
Canvas Capture |
A captura de tela oferece a capacidade de introduzir frames de vídeo de forma programática. |
Configurar |
|
GAP |
applyConstraints(), getUserMedia() |
GAP (parcial): o escopo das configurações disponíveis na API da Web pode ser diferente do da PPAPI. |
GetAttrib |
|
GAP |
MediaStreamSettings.width |
|
|
|
GAP |
MediaStreamSettings.height |
|
|
|
GAP |
GAP: não é equivalente a PP_MEDIASTREAMVIDEOTRACK_ATTRIB_BUFFERED_FRAMES |
Não é possível pré-carregar o MediaStream, por isso ele nunca será armazenado em buffer: https://www.w3.org/TR/mediacapture-streams/#mediastreams-in-media-elements |
|
|
GAP |
GAP: não há equivalente para PP_MEDIASTREAMVIDEOTRACK_ATTRIB_FORMAT |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetFrame |
|
GAP |
GAP: sem equivalente |
|
RecycleFrame |
|
GAP |
GAP: sem equivalente |
|
Fechar |
|
GAP |
MediaStreamTrack.stop() |
|
GetEmptyFrame |
|
GAP |
GAP: sem equivalente |
|
PutFrame |
|
GAP |
GAP: sem equivalente |
|
PPB_MessageLoop
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
N/A |
Na maioria das vezes, os workers recebem um loop de evento implícito. |
|
GetForMainThread |
|
N/A |
Na maioria das vezes, os workers recebem um loop de evento implícito. |
|
GetCurrent |
|
N/A |
Na maioria das vezes, os workers recebem um loop de evento implícito. |
|
AttachToCurrentThread |
|
N/A |
Na maioria das vezes, os workers recebem um loop de evento implícito. |
|
Executar |
|
N/A |
Na maioria das vezes, os workers recebem um loop de evento implícito. |
|
PostWork |
|
N/A |
Na maioria das vezes, os workers recebem um loop de evento implícito. |
|
PostQuit |
|
N/A |
Na maioria das vezes, os workers recebem um loop de evento implícito. |
|
PPB_Messaging
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
PostMessage |
|
N/A |
Window.postMessage |
|
RegisterMessageHandler |
|
N/A |
Window.addEventListener |
|
UnregisterMessageHandler |
|
N/A |
Window.removeEventListener |
|
PPB_MouseCursor
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
SetCursor |
|
SDL |
Element.style.cursor |
É possível usar o mesmo conjunto de cursores de estoque.
Os cursores personalizados podem ser feitos com url(..).
Os cursores personalizados dinâmicos podem ser feitos com URIs de dados.
O CSS3 oferece suporte à especificação do ponto de acesso. |
PPB_MouseLock
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
LockMouse |
|
SDL |
Element.requestPointerLock |
|
UnlockMouse |
|
SDL |
Element.exitPointerLock |
|
PPB_OpenGLES2
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Vários métodos |
|
OpenGLES |
Funcionalidade parecida com a WebGL 1.0. |
|
|
x |
|
OffscreenCanvas |
|
PPB_TextInputController
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
SetTextInputType |
|
GAP |
GAP: possivelmente preenchido pela API Input Method Editor. |
Alguns desenvolvedores gostariam de poder dar dicas dessa maneira ou, preferivelmente, a capacidade de interceptar e exibir eventos / saídas do IME (editor de método de entrada, na sigla em inglês) inline dentro de uma tela. |
UpdateCaretPosition |
|
GAP |
GAP: potencialmente preenchido pela API Input Method Editor |
https://www.w3.org/TR/ime-api/ |
CancelCompositionText |
|
GAP |
GAP: potencialmente preenchido pela API Input Method Editor |
https://www.w3.org/TR/ime-api/ |
UpdateSurroundingText |
|
GAP |
GAP: potencialmente preenchido pela API Input Method Editor |
https://www.w3.org/TR/ime-api/ |
PPB_URLLoader
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
embind |
new XMLHttpRequest(); |
|
Abrir |
|
embind |
XMLHttpRequest.open |
|
FollowRedirect |
|
embind |
Request.redirect |
|
|
|
GAP |
GAP: sem XMLHTTPRequest equivalente |
|
GetUploadProgress |
|
embind |
XMLHttpRequest 'progress' Evento |
|
|
|
GAP |
FetchObserver |
Ainda não foi especificado ou implementado: https://github.com/whatwg/fetch/issues/607 |
GetDownloadProgress |
|
embind |
XMLHttpRequest 'progress' Evento |
|
|
|
GAP |
FetchObserver |
Ainda não foi especificado ou implementado: https://github.com/whatwg/fetch/issues/607 |
GetResponseInfo |
|
embind |
XMLHttpRequest.getAllResponseHeaders |
|
|
|
embind |
Buscar resposta.* |
|
ReadResponseBody |
|
embind |
XMLHttpRequest.response |
|
|
|
embind |
Corpo.* (A resposta é um corpo) |
|
FinishStreamingToFile |
|
embind |
GAP - Sem equivalente direto |
XMLHttpRequest e Fetch assumem o streaming para a memória, em vez de diretamente para um armazenamento. |
Fechar |
|
embind |
XMLHttpRequest.abort |
|
|
|
GAP |
API Fetch: AbortSignal e AbortController |
|
PPB_URLRequestInfo
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
embind |
XMLHttpRequest |
|
|
|
embind |
Solicitação de busca |
|
SetProperty |
|
GAP |
GAP - Nenhum equivalente direto para XMLHttpRequest |
O XMLHttpRequest não oferece maneiras diretas de limitar por solicitação após redirecionamentos, transmitir para um arquivo, definir o redirecionamento ou a política de credenciais. |
|
|
embind |
Solicitação.* |
|
AppendDataToBody |
|
embind |
XMLHttpRequest.send |
GAP: ambos precisam ter o corpo inteiro, não apenas um pedaço. |
|
|
embind |
fetch(.., options:body) |
|
AppendFileToBody |
|
GAP |
streaming de upload de busca |
https://www.chromestatus.com/features/5274139738767360 |
|
|
N/A |
<form> |
Você também pode ler com o FileReader e fazer upload, mas isso é mais parecido com AppendDataToBody. |
PPB_URLResponseInfo
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
GetProperty |
|
embind |
XMLHttpRequest.getAllResponseHeaders + outros |
|
|
|
embind |
Buscar resposta.* |
|
GetBodyAsFileRef |
|
embind |
Buscar resposta (corpo) .blob() |
Assume que a camada de armazenamento otimiza a transferência. |
PPB_Var
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
VarFromUtf8 |
|
embind |
TextDecoder.decode |
|
VarToUtf8 |
|
embind |
TextEncoder.encode |
|
VarFromResource |
|
N/A |
N/A |
|
VarToResource |
|
N/A |
N/A |
|
PPB_VarArray
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Get |
|
embind |
Matriz[i] |
|
Definir |
|
embind |
Array[i] = x |
|
GetLength |
|
embind |
Array.length |
|
SetLength |
|
embind |
Array.length = n |
|
PPB_VarArrayBuffer
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
embind |
new ArrayBuffer(n) |
|
ByteLength |
|
embind |
ArrayBuffer.byteLength |
|
Mapa |
|
GAP |
GAP - Sem equivalente direto |
Os módulos Asm.js / Wasm não conseguem mapear regiões de um ArrayBuffer diferente de sua única heap de memória linear.
Futuras recordações ou mapeamentos de memória podem melhorar isso. |
Desmapear |
|
GAP |
GAP - Sem equivalente direto |
|
PPB_VarDictionary
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
embind |
{} |
|
Get |
|
embind |
<Object>[i] |
|
Definir |
|
embind |
<Objeto>[i] = x |
|
Excluir |
|
embind |
excluir <Objeto>[i] |
|
HasKey |
|
embind |
x em <Object> |
|
GetKeys |
|
embind |
for (k in <Object>) {} |
Não há equivalente literal, mas pode ser criado. |
PPB_VideoDecoder
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
GAP |
GAP - Seria tratado com a API WebCodecs proposta usando VideoDecoder() |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Inicializar |
|
GAP |
GAP: seria processado com a API WebCodecs proposta usando parâmetros de inicialização VideoDecoder() (VideoDecoderInitParameters). |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Decode |
|
GAP |
GAP: seria processado com a API WebCodecs proposta usando ReadableStream.pipeThrough(VideoDecoder) |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
GetPicture |
|
GAP |
GAP - Seria tratado com a API WebCodecs proposta usando ReadableStream.pipe Through(VideoDecoder).pipeTo(VideoTrackWriter().writable) |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
RecyclePicture |
|
GAP |
GAP - Seria tratado com a API WebCodecs proposta. O design atual recicla automaticamente as imagens e mantém o processo de decodificação em andamento. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Flush |
|
GAP |
GAP: seria processado com a API WebCodecs proposta. A API será chamada de Flush(), mas ainda há discussão sobre como ela será sequenciada em relação a chamadas de decodificação. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Redefinir |
|
GAP |
GAP: seria processado com a API WebCodecs proposta, destruindo a instância VideoDecoder e criando uma nova. Isso não será tão eficiente quanto um método de redefinição dedicado, mas a semântica da API reset() ainda está sendo discutida. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
PPB_VideoEncoder
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
GAP |
GAP: seria processado com a API WebCodecs proposta usando VideoEncoder(). |
|
GetSupportedProfiles |
|
GAP |
GAP (parcial) - Navigator.mediaCapabilities.encodingInfo() |
Os perfis compatíveis precisam ser verificados um por um. |
Inicializar |
|
GAP |
GAP - Seria tratado com a API WebCodecs proposta usando parâmetros de inicialização VideoEncoder() |
|
GetFramesRequired |
|
GAP |
GAP: sem equivalente |
É improvável que o pool de frames usado internamente pela API Web Codecs seja exposto. |
GetFrameCodedSize |
|
GAP |
GAP: sem equivalente |
É improvável que o pool de frames usado internamente pela API Web Codecs seja exposto. |
GetVideoFrame |
|
GAP |
GAP - Seria tratado com a API WebCodecs proposta usando ReadableStream.pipe Through(VideoEncoder). Isso codificaria diretamente os dados no fluxo legível em vez de capturar um único frame para preencher com dados antes da codificação. |
|
Codificação |
|
GAP |
GAP - Será tratado com a API WebCodecs proposta usando ReadableStream.pipe Through(VideoEncoder) |
|
GetBitstreamBuffer |
|
GAP |
GAP - Seria tratado com a API WebCodecs proposta. O design atual passará automaticamente pelo buffer de bitstream codificado que é transmitido. |
Atualmente, a API WebCodecs pressupõe que o buffer de bitstream pode ser copiado em vez de estar em pool, por isso não precisa ser reciclado. |
RecycleBitstreamBuffer |
|
GAP |
GAP: seria processado com a API WebCodecs proposta. O design atual recicla automaticamente o buffer para manter o processo de codificação. |
É improvável que isso mude no futuro, já que as implicações de performance são menores. |
RequestEncodingParametersChange |
|
GAP |
GAP - Seria tratado pela API Web Codecs proposta. Certos parâmetros podem ser alterados em tempo real, enquanto outros exigem a desativação do codificador. |
|
Fechar |
|
GAP |
GAP - Seria tratado com a API WebCodecs proposta usando VideoEncoder.Close() |
|
PPB_VideoFrame
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
GetTimestamp |
|
GAP |
GAP - Seria tratado com a API WebCodecs proposta. |
|
SetTimestamp |
|
GAP |
GAP - Seria tratado com a API WebCodecs proposta. |
|
GetFormat |
|
GAP |
GAP: seria processado com a API WebCodecs proposta. |
|
GetSize |
|
GAP |
GAP: seria processado com a API WebCodecs proposta. |
|
GetDataBuffer |
|
GAP |
GAP - Seria tratado com a API WebCodecs proposta. |
|
GetDataBufferSize |
|
GAP |
GAP - Seria tratado com a API WebCodecs proposta. |
|
PPB_View
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
GetRect |
|
embind |
Element.getBoundingClientRect |
|
IsFullscreen |
|
embind |
Document.fullScreenEnabled |
Pertence ao documento, não apenas a um único elemento. |
IsVisible |
|
embind |
IntersectionObserver |
|
IsPageVisible |
|
embind |
document.visibilityState |
|
GetClipRect |
|
embind |
IntersectionObserver |
|
GetDeviceScale |
|
embind |
window.devicePixelRatio |
|
GetCSSScale |
|
embind |
<Element>.getBoundingClientRect().width / <Element>.offsetWidth |
|
GetScrollOffset |
|
embind |
<Element>.scrollTop / <Element>.scrollLeft |
|
PPB_WebSocket
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
GAP |
WebSocket.WebSocket |
|
Connect |
|
GAP |
WebSocket.WebSocket(url, ...)
Evento "open" do WebSocket |
|
Fechar |
|
GAP |
WebSocket.close |
|
ReceiveMessage |
|
GAP |
"Mensagem" do WebSocket Evento
"Erro" de WebSocket Evento
"fechar" WebSocket Evento |
|
SendMessage |
|
GAP |
WebSocket.send |
|
GetBufferedAmount |
|
GAP |
WebSocket.bufferedAmount |
|
GetCloseCode |
|
GAP |
CloseEvent.code |
|
GetCloseReason |
|
GAP |
CloseEvent.reason |
|
GetCloseWasClean |
|
GAP |
CloseEvent.wasClean |
|
GetExtensions |
|
GAP |
WebSocket.extensions |
|
GetProtocol |
|
GAP |
WebSocket.protocol |
|
GetReadyState |
|
GAP |
WebSocket.readyState |
|
GetURL |
|
GAP |
WebSocket.url |
|
PPP_Graphics3D
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Gráficos3DContextLost |
|
SDL |
Tela "webglcontextlost" Evento |
|
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
HandleInputEvent |
|
SDL |
Element.addEventListener |
|
PPP_Instance
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
DidCreate |
|
N/A |
<Element>[key] |
O acesso geral ao DOM permite filtrar atributos de tag |
DidDestroy |
|
N/A |
N/A |
Não acionada para NaCl |
DidChangeView |
|
N/A |
Evento de redimensionamento do elemento |
|
DidChangeFocus |
|
N/A |
Elemento "foco", "foco", "foco" Eventos |
|
HandleDocumentLoad |
|
N/A |
GAP - Não há maneira de se registrar como gerenciador de tipo MIME |
Módulos NaCl via apps + uma entrada de manifesto pode ser configurada para lidar com determinados tipos MIME. |
PPP_MessageHandler
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
HandleMessage |
|
embind |
Evento "message" da MessagePort
Evento "message" da janela |
|
HandleBlockingMessage |
|
N/A |
GAP: não há equivalente direto |
Uma sincronização semelhante pode ser feita fora da linha de execução principal com Atomics.wait. Isso foi adicionado para oferecer suporte à emulação de APIs de plug-in síncrono. |
PPP_Messaging
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
HandleMessage |
|
embind |
"Mensagem" do MessagePort Evento
Janela "message" Evento |
|
PPP_MouseLock
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
MouseLockLost |
|
SDL |
Eventos "pointerlockchange" e "pointerlockerror" do elemento |
|
IRT
PPB_Audio
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
x |
SDL (parcial) |
GAP (parcial): AudioWorkletNode MAIS OU MENOS equivalente |
O AudioWorkletSpec foi concluído, mas o AudioDeviceClient pode ser mais adequado para essa API. O AudioDeviceClient ainda está sendo especificado pela comunidade. O worklet pode não ser o equivalente aproximado para essa API. |
GetCurrentConfig |
|
SDL |
AudioContext.* (recupera as configurações transmitidas) |
|
StartPlayback |
|
SDL |
AudioBufferSourceNode.start |
|
StopPlayback |
|
SDL |
AudioBufferSourceNode.stop |
|
PPB_AudioBuffer
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
GetTimestamp |
|
SDL |
AudioBufferSourceNode.start (parâmetro) |
São transmitidos toda vez, em vez de serem anexados ao buffer. |
SetTimestamp |
|
SDL |
AudioBufferSourceNode.start (parâmetro) |
|
GetSampleRate |
|
SDL |
AudioBuffer.sampleRate |
|
GetSampleSize |
|
GAP |
GAP: o WebAudio só usa float de 32 bits, e a PPAPI usa int de 16 bits. |
Teoricamente, a PPAPI oferece suporte a vários tamanhos de amostragem. Na prática, ele é compatível apenas com amostras de 16 bits. Infelizmente, os desenvolvedores solicitaram tamanhos de amostra de 16 bits para economizar no uso de memória. A próxima versão da especificação de áudio da Web vai implementar o suporte a amostras de 16 bits. Uma otimização para o AudioBuffer pode ser implementada de forma similar ao Firefox usando um buffer de 16 bits para o áudio que vem do decodeAudioData |
GetNumberOfChannels |
|
SDL |
AudioBuffer.numberOfChannels |
|
GetDataBuffer |
|
SDL |
AudioBuffer.getChannelData |
|
GetBufferSize |
|
SDL |
AudioBuffer.length |
|
PPB_AudioConfig
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
CreateStereo16Bit |
|
GAP |
GAP: apenas amostras de ponto flutuante de 32 bits são aceitas. |
A próxima versão da especificação Web Audio implementará o suporte para amostras de 16 bits. |
GetSampleRate |
|
SDL |
AudioContext.sampleRate |
|
GetSampleFrameCount |
|
SDL |
AudioBuffer.length |
|
RecommendSampleRate |
|
SDL |
AudioContext.sampleRate (da construção padrão) |
Um AudioContext terá a taxa de amostragem preferencial que corresponde à taxa de amostragem real do dispositivo de áudio de hardware por padrão. |
RecommendSampleFrameCount |
|
GAP |
GAP: seria processado com o AudioDeviceClient planejado. |
Há um problema em aberto para permitir um tamanho especificado pelo usuário, mas isso ainda está sendo definido. Provavelmente, isso funciona melhor com o AudioDeviceClient, que pode dizer qual seria o tamanho adequado para o hardware fornecido. |
PPB_Console
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Registro |
|
Utime |
console.log/warn/error/... |
|
LogWithSource |
|
GAP |
GAP |
A API Console é considerada uma substituição suficientemente completa, a menos que haja casos de uso específicos levantados pelos desenvolvedores para a funcionalidade fornecida pelo LogWithSource. Os mapas de origem do DevTools podem ser usados para depurar o JavaScript transcompilado no idioma de origem original. |
PPB_Core
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
getTime |
|
Utime |
new Date().getTime() |
|
getTimeTicks |
|
utime |
new Date().getTime() |
|
IsMainThread |
|
GAP |
window.document !== indefinido |
|
CallOnMainThread |
|
GAP |
Worker.postMessage + Atomics.wait |
É possível criar uma sincronização equivalente. |
PPB_FileIO
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
FS (parcial) |
window.chooseFileSystemEntries() |
Criar e abrir são usados de forma diferente, mas as peças têm a mesma potência. |
Abrir |
|
FS (parcial) |
window.chooseFileSystemEntries() |
|
Consultar |
|
FS (parcial) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified |
GAP (parcial) - Blob.type também pode ser usado para verificar o tipo MIME. O tipo de sistema de arquivos, o horário de criação e o horário do último acesso não podem ser determinados com a API Native File System. |
Toque |
|
FS (parcial) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
Ler |
|
FS (parcial) |
Blob.slice().arrayBuffer() |
|
Gravação |
|
FS (parcial) |
FileSystemWriter.write() |
|
SetLength |
|
FS (parcial) |
FileSystemWriter.truncate() |
|
Flush |
|
GAP (parcial) |
GAP (parcial): os arquivos são apagados quando FileSystemWrite.close() é chamado. |
Isso é intencional, porque os arquivos da API do sistema de arquivos nativo são expostos ao SO. Portanto, uma verificação da Navegação segura precisa ser realizada antes que os dados sejam mostrados ao SO. |
Fechar |
|
FS (parcial) |
FileSystemWriter.close() |
Não cancela operações pendentes, mas limpa todos os dados gravados até o momento no disco. |
ReadToArray |
|
GAP |
Blob.slice().arrayBuffer() ou Blob.arrayBuffer() |
Permite várias leituras de subintervalos em paralelo. |
PPB_FileRef
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
FS (parcial) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
GetFileSystemType |
|
FS (parcial) |
FileSystem.type |
|
GetName |
|
FS (parcial) |
File.name |
|
GetPath |
|
FS (parcial) |
GAP (parcial): com a API Native File System, o caminho relativo de um arquivo pode ser determinado a partir da referência a um diretório que contenha o arquivo usando FileSystemHandle.resolve(FileSystemHandle) |
O caminho absoluto de um arquivo não pode ser determinado, e o usuário precisa conceder permissão para acessar o diretório que contém o arquivo. |
GetParent |
|
FS (parcial) |
GAP (parcial): com a API Native File System, o caminho relativo de um arquivo pode ser determinado a partir da referência a um diretório que contenha o arquivo usando FileSystemHandle.resolve(FileSystemHandle) |
O usuário precisa conceder permissão para acessar o diretório que contém o arquivo. |
MakeDirectory |
|
FS (parcial) |
FileSystemHandle.getDirectory(..., {createIfNotExists: true}) |
|
Toque |
|
FS (parcial) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
O tempo de modificação pode ser alterado por escrito. |
Excluir |
|
FS (parcial) |
FileSystemDirectoryHandle.removeEntry() |
Ao contrário da PPAPI, os diretórios não precisam estar vazios. |
Renomear |
|
FS (parcial) |
GAP (parcial): com a API Native File System, o arquivo pode ser escrito com o novo nome usando uma combinação de FileSystemFileHandle.getFile() para o novo nome e FileSystemFileHandle.createWriter().write() com o conteúdo do arquivo antigo. Em seguida, use FileSystemDirectoryHandle.removeEntry() para excluir o arquivo antigo. |
Não há uma API direta que faça isso em uma etapa na API Native File System. |
Consultar |
|
GAP (parcial) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified |
GAP (parcial) - Blob.type também pode ser usado para verificar o tipo MIME. O tipo de sistema de arquivos, o horário de criação e o horário do último acesso não podem ser determinados com a API Native File System. |
ReadDirectoryEntries |
|
FS (parcial) |
FileSystemDirectoryHandle.getEntries() |
|
PPB_FileSystem
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
FS (parcial) |
window.requestFileSystem |
A API JS faz as duas coisas em uma única etapa |
Abrir |
|
GAP |
window.requestFileSystem |
A API JS faz as duas coisas em uma única etapa |
GetType |
|
GAP |
FileSystem.type |
|
PPB_Fullscreen
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
IsFullScreen |
|
html5.h |
Document.fullscreenEnabled |
|
SetFullscreen |
|
html5.h |
Document.requestFullscreen |
|
GetScreenSize |
|
html5.h |
Document.exitFullscreen |
|
PPB_Gamepad
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Exemplo |
|
SDL |
Gamepad.* |
O objeto Gamepad expõe um carimbo de data/hora relativo a navigationStart. Ela é atualizada quando os dados são recebidos do hardware: https://www.w3.org/TR/gamepad/#gamepad-interface |
PPB_Graphics2D
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
SDL |
Canvas.getContext('2d') |
|
Descrever |
|
SDL |
Canvas.clientWidth + Canvas.clientHeight. |
|
PaintImageData |
|
SDL |
CanvasRenderingContext2D.putImageData |
|
Rolagem |
|
GAP |
CanvasRenderingContext2D.scrollIntoView, CanvasRenderingContext2D.drawImage |
GAP (parcial): pode ser implementado desenhando a tela em si mesma, com um deslocamento, usando drawImage e preenchendo o restante. |
ReplaceContents |
|
SDL |
CanvasRenderingContext2D.drawImage |
|
Flush |
|
GAP |
Sem equivalente direto |
GAP (parcial) -
Sempre há uma limpeza implícita no final do código do desenho. isso é improvável
mudar. No entanto, a combinação de
OffscreenCanvas
e
ImageBitmapRenderingContext
oferecem funcionalidades semelhantes. |
SetScale |
|
SDL |
CanvasRenderingContext2D.scale |
|
GetScale |
|
SDL |
CanvasRenderingContext2D.currentTransform |
|
SetLayerTransform |
|
SDL |
CanvasRenderingContext2D.setTransform
CanvasRenderingContext2D.scale
CanvasRenderingContext2D.translate |
|
PPB_Graphics3D
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
GetAttribMaxValue |
|
OpenGL ES 3.0 |
WebGL 2.0 |
GAP (parcial): a exposição do WebGL 2.0 e do Emscripten ao OpenGL ES 3.0 é compatível com framebuffers multiamostrados definidos pelo usuário, nos quais todos os parâmetros configuráveis por meio de PPAPI podem ser configurados. |
Criar |
|
SDL |
Canvas.getContext |
|
GetAttribs |
|
SDL |
WebGLRenderingContext.getContextAttributes |
|
SetAttribs |
|
SDL |
Canvas.getContext(.., OPTIONS) |
|
GetError |
|
SDL |
WebGLRenderingContext.getError |
|
ResizeBuffers |
|
SDL |
Canvas.width = w; Canvas.height = h; |
|
SwapBuffers |
|
GAP |
Sem equivalente direto |
GAP (parcial):
sempre há um flush implícito no final do código de exibição. Isso provavelmente não
vai mudar. No entanto, a combinação
OffscreenCanvas
e
ImageBitmapRenderingContext
oferecem funcionalidade semelhante. |
PPB_ImageData
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
GetNativeImageDataFormat |
|
SDL |
ImageData exige a ordem RGBA |
|
IsImageDataFormatSupported |
|
SDL |
ImageData exige a ordem RGBA |
|
Criar |
|
SDL |
CanvasRenderingContext2d.createImageData |
|
Descrição |
|
SDL |
ImageData nunca tem um salto |
|
Mapa |
|
SDL |
ImageData.data |
|
Desmapear |
|
SDL |
ImageData.data |
|
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
RequestInputEvents |
|
SDL |
Sem equivalente direto |
A falta desse recurso provavelmente é menos relevante, já que o JS / Wasm é executado na linha de execução principal e pode filtrar eventos de maneira mais econômica sem incorrer em uma ida e volta de processo cruzado. |
RequestFilteringInputEvents |
|
SDL |
Eventos de composição* de mouse*, tecla*, roda*, toque* |
|
|
|
SDL |
Element.addEventListener |
|
ClearInputEventRequest |
|
SDL |
Element.removeEventListener |
|
GetType |
|
SDL |
Descendentes da classe do evento |
|
GetTimeStamp |
|
SDL |
Event.timeStamp |
|
GetModifiers |
|
SDL |
*Event.altKey/shiftKey/metaKey/ctrlKey |
|
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
SDL |
MouseEvent |
|
GetButton |
|
SDL |
MouseEvent.button |
|
GetPosition |
|
SDL |
MouseEvent.client*/page*/offset* |
|
GetClickCount |
|
SDL |
clique duplo' em comparação a "mousedown" Eventos |
|
GetMovement |
|
SDL |
MouseEvent.movement* |
|
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
SDL |
WheelEvent |
|
GetDelta |
|
SDL |
WheelEvent.delta* |
|
GetTicks |
|
GAP |
GAP - deltaMode contém essas informações, mas de forma incompleta. |
Há uma discussão sobre a implementação de uma API WheelEvent.deltaMode: https://github.com/w3c/uievents/issues/181#issuecomment-537811017 |
GetScrollByPage |
|
GAP |
GAP - deltaMode contém essas informações, mas de forma incompleta. |
Há uma discussão sobre a implementação de uma API WheelEvent.deltaMode: https://github.com/w3c/uievents/issues/181#issuecomment-537811017 |
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
SDL |
KeyboardEvent |
|
GetKeyCode |
|
SDL |
KeyboardEvent.keyCode |
|
GetCharacterText |
|
SDL |
KeyboardEvent.key |
|
GetCode |
|
SDL |
KeyboardEvent.code |
|
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
SDL |
TouchEvent |
|
AddTouchPoint |
|
SDL |
TouchEvent.touches.push |
|
GetTouchCount |
|
SDL |
TouchEvent.touches.length |
|
GetTouchByIndex |
|
SDL |
TouchEvent.touches[i] |
|
GetTouchById |
|
SDL |
Touch.indentifer (para descobrir por conta própria) |
|
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
GAP |
CompositionEvent |
|
GetText |
|
GAP |
CompositionEvent.data |
|
GetSegmentNumber |
|
GAP |
GAP - Sem equivalente direto |
Esses dados podem ser recuperados de CompositionEvent.data. |
GetSegmentOffset |
|
GAP |
GAP: não há equivalente direto |
|
GetTargetSegment |
|
GAP |
GAP - Sem equivalente direto |
|
GetSelection |
|
GAP |
GAP - Sem equivalente direto |
|
PPB_Instance
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
BindGraphics |
|
SDL |
Canvas.getContext (impossível, porque a vinculação é automática). |
|
IsFullFrame |
|
GAP |
GAP: não há equivalente aos processadores de tipo MIME. |
Os apps NaCl podem ser registrados para processar um tipo MIME específico e serem proprietários de todo o documento. |
DidCreate |
|
N/A |
<Element>[key] |
O acesso geral ao DOM permite filtrar atributos de tag |
DidDestroy |
|
N/A |
N/A |
Não acionada para NaCl |
DidChangeView |
|
N/A |
Evento de redimensionamento do elemento |
|
DidChangeFocus |
|
N/A |
Elemento "foco", "foco", "foco" Eventos |
|
HandleDocumentLoad |
|
N/A |
GAP - Não há maneira de se registrar como gerenciador de tipo MIME |
Módulos NaCl via apps + uma entrada de manifesto pode ser configurada para processar determinados tipos MIME. |
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Configurar |
|
GAP |
getUserMedia() |
As restrições de getUserMedia() podem fornecer os valores de configuração a serem usados no MediaStreamTrack. |
GetAttrib |
|
GAP |
MediaStreamTrack.getSettings() |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetBuffer |
|
GAP |
GAP: sem equivalente |
|
RecycleBuffer |
|
GAP |
GAP: sem equivalente |
|
Fechar |
|
GAP |
MediaStreamTrack.stop() |
|
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
GAP |
Canvas Capture |
A captura de tela oferece a capacidade de introduzir frames de vídeo de forma programática. |
Configurar |
|
GAP |
applyConstraints(), getUserMedia() |
GAP (parcial): o escopo das configurações disponíveis na API da Web pode ser diferente do da PPAPI. |
GetAttrib |
|
GAP |
MediaStreamSettings.width |
|
|
|
GAP |
MediaStreamSettings.height |
|
|
|
GAP |
GAP: não é equivalente a PP_MEDIASTREAMVIDEOTRACK_ATTRIB_BUFFERED_FRAMES |
Não é possível pré-carregar o MediaStream, por isso ele nunca será armazenado em buffer: https://www.w3.org/TR/mediacapture-streams/#mediastreams-in-media-elements |
|
|
GAP |
GAP: não há equivalente para PP_MEDIASTREAMVIDEOTRACK_ATTRIB_FORMAT |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetFrame |
|
GAP |
GAP: sem equivalente |
|
RecycleFrame |
|
GAP |
GAP: sem equivalente |
|
Fechar |
|
GAP |
MediaStreamTrack.stop() |
|
GetEmptyFrame |
|
GAP |
GAP: sem equivalente |
|
PutFrame |
|
GAP |
GAP: sem equivalente |
|
PPB_MessageLoop
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
N/A |
Na maioria das vezes, os workers recebem um loop de evento implícito. |
|
GetForMainThread |
|
N/A |
Na maioria das vezes, os workers recebem um loop de evento implícito. |
|
GetCurrent |
|
N/A |
Na maioria das vezes, os workers recebem um loop de evento implícito. |
|
AttachToCurrentThread |
|
N/A |
Na maioria das vezes, os workers recebem um loop de evento implícito. |
|
Executar |
|
N/A |
Na maioria das vezes, os workers recebem um loop de evento implícito. |
|
PostWork |
|
N/A |
Na maioria das vezes, os workers recebem um loop de evento implícito. |
|
PostQuit |
|
N/A |
Na maioria das vezes, os workers recebem um loop de evento implícito. |
|
PPB_Messaging
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
PostMessage |
|
N/A |
Window.postMessage |
|
RegisterMessageHandler |
|
N/A |
Window.addEventListener |
|
UnregisterMessageHandler |
|
N/A |
Window.removeEventListener |
|
PPB_MouseCursor
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
SetCursor |
|
SDL |
Element.style.cursor |
É possível usar o mesmo conjunto de cursores de estoque.
Os cursores personalizados podem ser feitos com url(..).
Os cursores personalizados dinâmicos podem ser feitos com URIs de dados.
O CSS3 oferece suporte à especificação do ponto de acesso. |
PPB_MouseLock
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
LockMouse |
|
SDL |
Element.requestPointerLock |
|
UnlockMouse |
|
SDL |
Element.exitPointerLock |
|
PPB_OpenGLES2
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Vários métodos |
|
OpenGLES |
Funcionalidade parecida com a WebGL 1.0. |
|
|
x |
|
OffscreenCanvas |
|
PPB_TextInputController
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
SetTextInputType |
|
GAP |
GAP: possivelmente preenchido pela API Input Method Editor. |
Alguns desenvolvedores gostariam de poder dar dicas dessa maneira ou, preferivelmente, a capacidade de interceptar e exibir eventos / saídas do IME (editor de método de entrada, na sigla em inglês) inline dentro de uma tela. |
UpdateCaretPosition |
|
GAP |
GAP: potencialmente preenchido pela API Input Method Editor |
https://www.w3.org/TR/ime-api/ |
CancelCompositionText |
|
GAP |
GAP: potencialmente preenchido pela API Input Method Editor |
https://www.w3.org/TR/ime-api/ |
UpdateSurroundingText |
|
GAP |
GAP: potencialmente preenchido pela API Input Method Editor |
https://www.w3.org/TR/ime-api/ |
PPB_URLLoader
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
embind |
new XMLHttpRequest(); |
|
Abrir |
|
embind |
XMLHttpRequest.open |
|
FollowRedirect |
|
embind |
Request.redirect |
|
|
|
GAP |
GAP: sem XMLHTTPRequest equivalente |
|
GetUploadProgress |
|
embind |
XMLHttpRequest 'progress' Evento |
|
|
|
GAP |
FetchObserver |
Ainda não foi especificado ou implementado: https://github.com/whatwg/fetch/issues/607 |
GetDownloadProgress |
|
embind |
XMLHttpRequest 'progress' Evento |
|
|
|
GAP |
FetchObserver |
Ainda não foi especificado ou implementado: https://github.com/whatwg/fetch/issues/607 |
GetResponseInfo |
|
embind |
XMLHttpRequest.getAllResponseHeaders |
|
|
|
embind |
Buscar resposta.* |
|
ReadResponseBody |
|
embind |
XMLHttpRequest.response |
|
|
|
embind |
Corpo.* (A resposta é um corpo) |
|
FinishStreamingToFile |
|
embind |
GAP - Sem equivalente direto |
XMLHttpRequest e Fetch assumem o streaming para a memória, em vez de diretamente para um armazenamento. |
Fechar |
|
embind |
XMLHttpRequest.abort |
|
|
|
GAP |
API Fetch: AbortSignal e AbortController |
|
PPB_URLRequestInfo
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
embind |
XMLHttpRequest |
|
|
|
embind |
Solicitação de busca |
|
SetProperty |
|
GAP |
GAP - Nenhum equivalente direto para XMLHttpRequest |
O XMLHttpRequest não oferece maneiras diretas de limitar por solicitação após redirecionamentos, transmitir para um arquivo, definir o redirecionamento ou a política de credenciais. |
|
|
embind |
Solicitação.* |
|
AppendDataToBody |
|
embind |
XMLHttpRequest.send |
GAP: ambos precisam ter o corpo inteiro, não apenas um pedaço. |
|
|
embind |
fetch(.., options:body) |
|
AppendFileToBody |
|
GAP |
streaming de upload de busca |
https://www.chromestatus.com/features/5274139738767360 |
|
|
N/A |
<form> |
Você também pode ler com o FileReader e fazer upload, mas isso é mais parecido com AppendDataToBody. |
PPB_URLResponseInfo
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
GetProperty |
|
embind |
XMLHttpRequest.getAllResponseHeaders + outros |
|
|
|
embind |
Buscar resposta.* |
|
GetBodyAsFileRef |
|
embind |
Buscar resposta (corpo) .blob() |
Assume que a camada de armazenamento otimiza a transferência. |
PPB_Var
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
VarFromUtf8 |
|
embind |
TextDecoder.decode |
|
VarToUtf8 |
|
embind |
TextEncoder.encode |
|
VarFromResource |
|
N/A |
N/A |
|
VarToResource |
|
N/A |
N/A |
|
PPB_VarArray
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Get |
|
embind |
Matriz[i] |
|
Definir |
|
embind |
Array[i] = x |
|
GetLength |
|
embind |
Array.length |
|
SetLength |
|
embind |
Array.length = n |
|
PPB_VarArrayBuffer
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
embind |
new ArrayBuffer(n) |
|
ByteLength |
|
embind |
ArrayBuffer.byteLength |
|
Mapa |
|
GAP |
GAP - Sem equivalente direto |
Os módulos Asm.js / Wasm não conseguem mapear regiões de um ArrayBuffer diferente de sua única heap de memória linear.
Futuras recordações ou mapeamentos de memória podem melhorar isso. |
Desmapear |
|
GAP |
GAP - Sem equivalente direto |
|
PPB_VarDictionary
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
embind |
{} |
|
Get |
|
embind |
<Object>[i] |
|
Definir |
|
embind |
<Objeto>[i] = x |
|
Excluir |
|
embind |
excluir <Objeto>[i] |
|
HasKey |
|
embind |
x em <Object> |
|
GetKeys |
|
embind |
for (k in <Object>) {} |
Não há equivalente literal, mas pode ser criado. |
PPB_VideoDecoder
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
GAP |
GAP - Seria tratado com a API WebCodecs proposta usando VideoDecoder() |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Inicializar |
|
GAP |
GAP: seria processado com a API WebCodecs proposta usando parâmetros de inicialização VideoDecoder() (VideoDecoderInitParameters). |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Decode |
|
GAP |
GAP: seria processado com a API WebCodecs proposta usando ReadableStream.pipeThrough(VideoDecoder) |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
GetPicture |
|
GAP |
GAP - Seria tratado com a API WebCodecs proposta usando ReadableStream.pipe Through(VideoDecoder).pipeTo(VideoTrackWriter().writable) |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
RecyclePicture |
|
GAP |
GAP - Seria tratado com a API WebCodecs proposta. O design atual recicla automaticamente as imagens e mantém o processo de decodificação em andamento. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Flush |
|
GAP |
GAP: seria processado com a API WebCodecs proposta. A API será chamada de Flush(), mas ainda há discussão sobre como ela será sequenciada em relação a chamadas de decodificação. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Redefinir |
|
GAP |
GAP: seria processado com a API WebCodecs proposta, destruindo a instância VideoDecoder e criando uma nova. Isso não será tão eficiente quanto um método de redefinição dedicado, mas a semântica da API reset() ainda está sendo discutida. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
PPB_VideoEncoder
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
GAP |
GAP: seria processado com a API WebCodecs proposta usando VideoEncoder(). |
|
GetSupportedProfiles |
|
GAP |
GAP (parcial) - Navigator.mediaCapabilities.encodingInfo() |
Os perfis compatíveis precisam ser verificados um por um. |
Inicializar |
|
GAP |
GAP - Seria tratado com a API WebCodecs proposta usando parâmetros de inicialização VideoEncoder() |
|
GetFramesRequired |
|
GAP |
GAP: sem equivalente |
É improvável que o pool de frames usado internamente pela API Web Codecs seja exposto. |
GetFrameCodedSize |
|
GAP |
GAP: sem equivalente |
É improvável que o pool de frames usado internamente pela API Web Codecs seja exposto. |
GetVideoFrame |
|
GAP |
GAP - Seria tratado com a API WebCodecs proposta usando ReadableStream.pipe Through(VideoEncoder). Isso codificaria diretamente os dados no fluxo legível em vez de capturar um único frame para preencher com dados antes da codificação. |
|
Codificação |
|
GAP |
GAP - Será tratado com a API WebCodecs proposta usando ReadableStream.pipe Through(VideoEncoder) |
|
GetBitstreamBuffer |
|
GAP |
GAP - Seria tratado com a API WebCodecs proposta. O design atual passará automaticamente pelo buffer de bitstream codificado que é transmitido. |
Atualmente, a API WebCodecs pressupõe que o buffer de bitstream pode ser copiado em vez de estar em pool, por isso não precisa ser reciclado. |
RecycleBitstreamBuffer |
|
GAP |
GAP: seria processado com a API WebCodecs proposta. O design atual recicla automaticamente o buffer para manter o processo de codificação. |
É improvável que isso mude no futuro, já que as implicações de performance são menores. |
RequestEncodingParametersChange |
|
GAP |
GAP - Seria tratado pela API Web Codecs proposta. Certos parâmetros podem ser alterados em tempo real, enquanto outros exigem a desativação do codificador. |
|
Fechar |
|
GAP |
GAP - Seria tratado com a API WebCodecs proposta usando VideoEncoder.Close() |
|
PPB_VideoFrame
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
GetTimestamp |
|
GAP |
GAP - Seria tratado com a API WebCodecs proposta. |
|
SetTimestamp |
|
GAP |
GAP - Seria tratado com a API WebCodecs proposta. |
|
GetFormat |
|
GAP |
GAP: seria processado com a API WebCodecs proposta. |
|
GetSize |
|
GAP |
GAP: seria processado com a API WebCodecs proposta. |
|
GetDataBuffer |
|
GAP |
GAP - Seria tratado com a API WebCodecs proposta. |
|
GetDataBufferSize |
|
GAP |
GAP - Seria tratado com a API WebCodecs proposta. |
|
PPB_View
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
GetRect |
|
embind |
Element.getBoundingClientRect |
|
IsFullscreen |
|
embind |
Document.fullScreenEnabled |
Pertence ao documento, não apenas a um único elemento. |
IsVisible |
|
embind |
IntersectionObserver |
|
IsPageVisible |
|
embind |
document.visibilityState |
|
GetClipRect |
|
embind |
IntersectionObserver |
|
GetDeviceScale |
|
embind |
window.devicePixelRatio |
|
GetCSSScale |
|
embind |
<Element>.getBoundingClientRect().width / <Element>.offsetWidth |
|
GetScrollOffset |
|
embind |
<Element>.scrollTop / <Element>.scrollLeft |
|
PPB_WebSocket
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
|
GAP |
WebSocket.WebSocket |
|
Connect |
|
GAP |
WebSocket.WebSocket(url, ...)
Evento "open" do WebSocket |
|
Fechar |
|
GAP |
WebSocket.close |
|
ReceiveMessage |
|
GAP |
"Mensagem" do WebSocket Evento
"Erro" de WebSocket Evento
"fechar" WebSocket Evento |
|
SendMessage |
|
GAP |
WebSocket.send |
|
GetBufferedAmount |
|
GAP |
WebSocket.bufferedAmount |
|
GetCloseCode |
|
GAP |
CloseEvent.code |
|
GetCloseReason |
|
GAP |
CloseEvent.reason |
|
GetCloseWasClean |
|
GAP |
CloseEvent.wasClean |
|
GetExtensions |
|
GAP |
WebSocket.extensions |
|
GetProtocol |
|
GAP |
WebSocket.protocol |
|
GetReadyState |
|
GAP |
WebSocket.readyState |
|
GetURL |
|
GAP |
WebSocket.url |
|
PPP_Graphics3D
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Gráficos3DContextLost |
|
SDL |
Tela "webglcontextlost" Evento |
|
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
HandleInputEvent |
|
SDL |
Element.addEventListener |
|
PPP_Instance
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
DidCreate |
|
N/A |
<Element>[key] |
O acesso geral ao DOM permite filtrar atributos de tag |
DidDestroy |
|
N/A |
N/A |
Não acionada para NaCl |
DidChangeView |
|
N/A |
Evento de redimensionamento do elemento |
|
DidChangeFocus |
|
N/A |
Elemento "foco", "foco", "foco" Eventos |
|
HandleDocumentLoad |
|
N/A |
GAP - Não há maneira de se registrar como gerenciador de tipo MIME |
Módulos NaCl via apps + uma entrada de manifesto pode ser configurada para lidar com determinados tipos MIME. |
PPP_MessageHandler
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
HandleMessage |
|
embind |
Evento "message" da MessagePort
Evento "message" da janela |
|
HandleBlockingMessage |
|
N/A |
GAP: não há equivalente direto |
Uma sincronização semelhante pode ser feita fora da linha de execução principal com Atomics.wait. Isso foi adicionado para oferecer suporte à emulação de APIs de plug-in síncrono. |
PPP_Messaging
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
HandleMessage |
|
embind |
"Mensagem" do MessagePort Evento
Janela "message" Evento |
|
PPP_MouseLock
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
MouseLockLost |
|
SDL |
Eventos "pointerlockchange" e "pointerlockerror" do elemento |
|
PPAPI (apps)
PPB_HostResolver
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
x |
GAP |
GAP (parcial): sem equivalente direto |
|
Resolver |
x |
GAP |
GAP (parcial) - Sem equivalente direto |
|
GetCanonicalName |
x |
GAP |
GAP (parcial) - Sem equivalente direto |
|
GetNetAddressCount |
x |
GAP |
GAP (parcial) - Sem equivalente direto |
|
GetNetAddress |
x |
GAP |
GAP (parcial): sem equivalente direto |
|
PPB_NetAddress
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
CreateFromIPv4Address |
x |
GAP |
GAP (parcial): sem equivalente direto |
|
CreateFromIPv6Address |
x |
GAP |
GAP (parcial): sem equivalente direto |
|
GetFamily |
x |
GAP |
GAP (parcial) - Sem equivalente direto |
|
DescribeAsString |
x |
GAP |
GAP (parcial): sem equivalente direto |
|
DescribeAsIPv4Address |
x |
GAP |
GAP (parcial) - Sem equivalente direto |
|
DescribeAsIPv6Address |
x |
GAP |
GAP (parcial): sem equivalente direto |
|
PPB_NetworkList
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
GetCount |
x |
GAP |
GAP: não há equivalente direto |
|
GetName |
x |
GAP |
GAP - Sem equivalente direto |
|
GetType |
x |
GAP |
GAP - Sem equivalente direto |
|
GetState |
x |
GAP |
GAP - Sem equivalente direto |
|
GetIpAddress |
x |
GAP |
GAP - Sem equivalente direto |
|
GetDisplayName |
x |
GAP |
GAP: não há equivalente direto |
|
GetMTU |
x |
GAP |
GAP - Sem equivalente direto |
|
PPB_NetworkMonitor
Método da PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
Criar |
x |
GAP |
GAP: não há equivalente direto |
|
UpdateNetworkList |
x |
GAP |
GAP - Sem equivalente direto |
|
PPB_NetworkProxy
Método PPAPI |
Assume linhas de execução |
Emscripten |
API da Web |
Limitações |
GetProxyForURL |
x |
GAP |
GAP: não há equivalente direto |
|
PPB_TCPSocket e PPB_UDPSocket
Não há um mapeamento direto para a migração. Em vez disso, destacamos alguns
nos cenários de usuário abaixo e qual é o caminho recomendado.
Caso de uso |
Recomendações |
Compartilhamento de tela |
getDisplayMedia e
WebRTC (
demonstração)
|
Carregar de um
servidor local para minimizar o uso da largura de banda |
XHR, busca, streams, service worker, APIs de cache |
Como carregar de uma
instância local de um app da Web / Como se conectar a uma instância local de um app da Web |
WebRTC |
Chat |
WebSocket*
|
Comunicação de áudio/vídeo
em tempo real |
WebRTC |
Colaboração |
WebSocket*
|
Jogos multiplayer
em tempo real |
WebTransport**
a menos que P2P, caso em que WebRTC (ou
WebTransport sobre RTCIceTransport)
|
Tempo real
streaming interativo |
WebTransport**
|
comunicação
com o servidor legado |
Servidor proxy ou middleware para conversão de protocolo. Feedback para
bit.ly/network-api-gaps
|
*: Ou WebTransport no futuro
**: confira a disponibilidade no chromestatus