2013-07-22 4 views
5

Ich erlebe Abstürze von Kunden mit folgenden Backtrace:Der richtige Art und Weise GPU Zugang mit Core Image zu verhindern, wenn App im Hintergrund

0 libGPUSupportMercury.dylib   0x3542ae2e gpus_ReturnNotPermittedKillClient + 10 
1 IMGSGX543RC2GLDriver    0x30bbf5e5 SubmitPacketsIfAny + 245 
2 GLEngine       0x32f827db glFinish_Exec + 167 
3 CoreImage       0x31fb85b7 CI::GLESContext::recursive_render(CI::Node const*, CGRect, bool) + 219 
4 CoreImage       0x31fbb351 CI::GLESContext::render(CI::Node*,  CGRect) + 41 
5 CoreImage       0x31fc2901 CI::image_get_cgimage(CI::Context*, CI::Image*, CGRect, CGColorSpace*, CI::PixelFormat) + 1313 
6 CoreImage       0x31fa8427 -[CIContext createCGImage:fromRect:format:colorSpace:] + 487 
7 CoreImage       0x31fa81e9 -[CIContext createCGImage:fromRect:] + 89 
8 App         0x0013c9db -[PZTiledImageLayer drawInContext:] (PZTiledImageLayer.m:129) 

, die die GPU Zugriff fällig sind, wenn die Anwendung im Hintergrund ist (nicht erlaubt). diese

Der Code zu diesem Absturz führt, ist:

if([UIApplication sharedApplication].applicationState == UIApplicationStateActive) 
{ 
    cg_image = [self.imageContext createCGImage:im fromRect:rclip]; 
} 

Dies bedeutet, dass der App ändert seinen Zustand nach meinem Check, aber bevor GPU innerhalb des Core Image-API zugreifen.

Was ist der richtige Weg, um die Situation des App-Hintergrunds bei der Verwendung dieser Core Image API zu behandeln?

+0

Findet dies im Hauptthread oder in einem Worker-Thread statt? –

+0

Jede bewährte Lösung dafür? –

+0

@rsbbe, haben Sie etwas gefunden? –

Antwort

0

Wenn dies in einem Hintergrundthread passiert, können Sie versuchen, es in den Hauptthread zu verschieben. Auf diese Weise der Ausführung dieser Funktion ist nicht mit dem AppDelegate Rückruf verschachtelt

- (void)applicationDidEnterBackground:(UIApplication *)application 

und Sie können ohne sich Gedanken über Gleichzeitigkeit einige Signalisierung dort implementieren.

Verwandte Themen