崩溃日志
0 libGPUSupportMercury.dylib _gpus_ReturnNotPermittedKillClient + 12
1 AGXGLDriver gldUpdateDispatch + 7016
2 libGPUSupportMercury.dylib gpusSubmitDataBuffers + 176
3 AGXGLDriver gldUpdateDispatch + 12476
4 GLEngine gliBindViewES + 108
5 OpenGLES -[EAGLContext renderbufferStorage:fromDrawable:] + 504
6 WebCore WebCore::GraphicsContext3D::~GraphicsContext3D() + 240
7 WebCore WebCore::WebGLRenderingContextBase::destroyGraphicsContext3D() + 220
8 WebCore WebCore::WebGLRenderingContextBase::~WebGLRenderingContextBase() + 860
9 WebCore WebCore::WebGLRenderingContext::~WebGLRenderingContext() + 12
10 WebCore WebCore::HTMLCanvasElement::~HTMLCanvasElement() + 84
11 WebCore WebCore::HTMLCanvasElement::~HTMLCanvasElement() + 12
12 JavaScriptCore void JSC::MarkedBlock::Handle::specializedSweep<true, (JSC::MarkedBlock::Handle::EmptyMode)1, (JSC::MarkedBlock::Handle::SweepMode)1, (JSC::MarkedBlock::Handle::SweepDestructionMode)1, (JSC::MarkedBlock::Handle::ScribbleMode)0, (JSC::MarkedBlock::Handle::NewlyAllocatedMode)1, (JSC::MarkedBlock::Handle::MarksMode)1, JSC::JSDestructibleObjectDestroyFunc>(JSC::FreeList*, JSC::MarkedBlock::Handle::EmptyMode, JSC::MarkedBlock::Handle::SweepMode, JSC::MarkedBlock::Handle::SweepDestructionMode, JSC::MarkedBlock::Handle::ScribbleMode, JSC::MarkedBlock::Handle::NewlyAllocatedMode, JSC::MarkedBlock::Handle::MarksMode, JSC::JSDestructibleObjectDestroyFunc const&) + 212
13 JavaScriptCore void JSC::MarkedBlock::Handle::finishSweepKnowingHeapCellType<JSC::JSDestructibleObjectDestroyFunc>(JSC::FreeList*, JSC::JSDestructibleObjectDestroyFunc const&)::'lambda'()::operator()() const + 408
14 JavaScriptCore void JSC::MarkedBlock::Handle::finishSweepKnowingHeapCellType<JSC::JSDestructibleObjectDestroyFunc>(JSC::FreeList*, JSC::JSDestructibleObjectDestroyFunc const&) + 320
15 JavaScriptCore JSC::JSDestructibleObjectHeapCellType::finishSweep(JSC::MarkedBlock::Handle&, JSC::FreeList*) + 32
16 JavaScriptCore JSC::MarkedBlock::Handle::sweep(JSC::FreeList*) + 372
17 JavaScriptCore JSC::LocalAllocator::tryAllocateIn(JSC::MarkedBlock::Handle*) + 40
18 JavaScriptCore JSC::LocalAllocator::tryAllocateWithoutCollecting() + 48
19 JavaScriptCore JSC::LocalAllocator::allocateSlowCase(JSC::GCDeferralContext*, JSC::AllocationFailureMode) + 292
20 JavaScriptCore JSC::CompleteSubspace::allocateNonVirtual(JSC::VM&, unsigned long, JSC::GCDeferralContext*, JSC::AllocationFailureMode) + 216
21 WebCore std::__1::enable_if<std::is_same<WebCore::DOMRect, WebCore::DOMRect>::value, WebCore::JSDOMWrapperConverterTraits<WebCore::DOMRect>::WrapperClass*>::type WebCore::createWrapper<WebCore::DOMRect, WebCore::DOMRect>(WebCore::JSDOMGlobalObject*, WTF::Ref<WebCore::DOMRect, WTF::DumbPtrTraits<WebCore::DOMRect> >&&) + 216
22 WebCore WebCore::jsElementPrototypeFunctionGetBoundingClientRect(JSC::ExecState*) + 148
解决方案:
进入后台的时候 enableGL NO,进入前台 enableGL YES
typedef void (*CallFuc)(id, SEL, BOOL);
typedef BOOL (*GetFuc)(id, SEL);
- (BOOL)webView:(UIWebView *)view enableGL:(BOOL)bEnable {
BOOL bRet = NO;
do {
Ivar internalVar = class_getInstanceVariable([view class], "_internal");
if (!internalVar) {
break;
}
UIWebViewInternal *internalObj = object_getIvar(view, internalVar);
Ivar browserVar = class_getInstanceVariable(object_getClass(internalObj), "browserView");
if (!browserVar) {
break;
}
id webbrowser = object_getIvar(internalObj, browserVar);
Ivar webViewVar = class_getInstanceVariable(object_getClass(webbrowser), "_webView");
if (!webViewVar) {
break;
}
id webView = (id)object_getIvar(webbrowser, webViewVar);
if (!webView) {
}
if (object_getClass(webView) != NSClassFromString(@"WebView")) {
break;
}
SEL selector = NSSelectorFromString(@"_setWebGLEnabled:");
IMP impSet = [webView methodForSelector:selector];
CallFuc func = (CallFuc)impSet;
func(webView, selector, bEnable);
SEL selectorGet = NSSelectorFromString(@"_webGLEnabled");
IMP impGet = [webView methodForSelector:selectorGet];
GetFuc funcGet = (GetFuc)impGet;
BOOL val = funcGet(webView, selector);
bRet = (val == bEnable);
} while(NO);
return bRet;
}