A mudança de contexto está usando um tempo significativo?

9

Eu tenho tido problemas com um aplicativo (que usa java e C ++ e OpenCV), que parece ser muito inconsistente na quantidade de tempo que leva para executar várias tarefas. Para ajudar a diagnosticar isso, criei uma função em java (chamada one_off_speed_test() ) que não fazia nada além de uma série de problemas matemáticos inteiros em um loop que leva cerca de meio segundo e depois imprime o tempo gasto no log. Se eu chamar essa função repetidamente de dentro de onCreate() , o tempo gasto para cada chamada será muito consistente (+ = 3%), mas se eu chamá-la de onCameraFrame() , uma função que o OpenCV chama quando tiver uma imagem pronta a partir da câmera, o tempo gasto para o teste de matemática em cada quadro varia de acordo com um fator de dois. Eu decidi tentar o sampler de execução no eclipse / DDMS e ver se eu poderia descobrir o que estava acontecendo. Eu vi que quando eu cliquei em one_off_speed_test() , ele listou os pais e filhos dessa função, junto com uma linha dizendo " (alternância de contexto) ". Então, nessa linha, sob uma coluna chamada " Incl Tempo real ", ele diz "66%". Agora eu não sou muito especialista em usar o DDMS, e eu só tenho uma idéia nebulosa sobre mudança de contexto, mas a partir da descrição até agora, parece que eu tenho um problema com a mudança de contexto tomando muito tempo? Ou estou entendendo mal a saída do DDMS.

    
por Mick 11.07.2014 в 19:31
fonte

1 resposta

2

O alternador de contexto descreve o tempo gasto para executar outros tópicos. Portanto, quando sua função é chamada de onCameraFrame() , ela compartilha a CPU com outros segmentos, não necessariamente com os segmentos que pertencem ao seu aplicativo.

Veja também as respostas link , link

No exemplo postado, onCameraFrame() gastou 14.413665 segundos no relógio de parede, dos quais 4.814454 segundos foram usados por one_off_speed_test() (presumivelmente, para 10 quadros) e 9.596984 segundos foram gastos esperando por outros encadeamentos. Isso faz sentido, porque onCameraFrame() de retorno de chamada compete pelo recurso de CPU com o serviço de câmera, que é executado em um processo de sistema separado.

    
por Alex Cohn 12.07.2014 / 17:03
fonte