本文整理汇总了C++中ThreadContext::Next方法的典型用法代码示例。如果您正苦于以下问题:C++ ThreadContext::Next方法的具体用法?C++ ThreadContext::Next怎么用?C++ ThreadContext::Next使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ThreadContext
的用法示例。
在下文中一共展示了ThreadContext::Next方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Uninitialize
// This is called at process detach.
// threadcontext created from runtime should not be destroyed in ThreadBoundThreadContext
// we should clean them up at process detach only as runtime can be used in other threads
// even after the current physical thread was destroyed.
// This is called after ThreadBoundThreadContext are cleaned up, so the remaining items
// in the globalthreadContext linklist should be for jsrt only.
void JsrtRuntime::Uninitialize()
{
ThreadContext* currentThreadContext = ThreadContext::GetThreadContextList();
ThreadContext* tmpThreadContext;
while (currentThreadContext)
{
Assert(!currentThreadContext->IsScriptActive());
JsrtRuntime* currentRuntime = static_cast<JsrtRuntime*>(currentThreadContext->GetJSRTRuntime());
tmpThreadContext = currentThreadContext;
currentThreadContext = currentThreadContext->Next();
currentRuntime->CloseContexts();
RentalThreadContextManager::DestroyThreadContext(tmpThreadContext);
HeapDelete(currentRuntime);
}
}
示例2: Uninitialize
// This is called at process detach.
// threadcontext created from runtime should not be destroyed in ThreadBoundThreadContext
// we should clean them up at process detach only as runtime can be used in other threads
// even after the current physical thread was destroyed.
// This is called after ThreadBoundThreadContext are cleaned up, so the remaining items
// in the globalthreadContext linklist should be for jsrt only.
void JsrtRuntime::Uninitialize()
{
ThreadContext* currentThreadContext = ThreadContext::GetThreadContextList();
ThreadContext* tmpThreadContext;
while (currentThreadContext)
{
Assert(!currentThreadContext->IsScriptActive());
JsrtRuntime* currentRuntime = static_cast<JsrtRuntime*>(currentThreadContext->GetJSRTRuntime());
tmpThreadContext = currentThreadContext;
currentThreadContext = currentThreadContext->Next();
#ifdef CHAKRA_STATIC_LIBRARY
// xplat-todo: Cleanup staticlib shutdown. This only shuts down threads.
// Other closing contexts / finalizers having trouble with current
// runtime/context.
RentalThreadContextManager::DestroyThreadContext(tmpThreadContext);
#else
currentRuntime->CloseContexts();
RentalThreadContextManager::DestroyThreadContext(tmpThreadContext);
HeapDelete(currentRuntime);
#endif
}
}
示例3: PerformRundown
//.........这里部分代码省略.........
sourceContext,
scriptContext,
/* sourceFlags*/ 0,
sourceContextInfo->url));
}
});
}
}
else
{
JS_ETW(EventWriteScriptContextDCEnd(scriptContext));
if(scriptContext->GetSourceContextInfoMap() != nullptr)
{
scriptContext->GetSourceContextInfoMap()->Map( [=] (DWORD_PTR sourceContext, SourceContextInfo * sourceContextInfo)
{
if (sourceContext != Constants::NoHostSourceContext)
{
JS_ETW(LogSourceEvent(EventWriteSourceDCEnd,
sourceContext,
scriptContext,
/* sourceFlags*/ 0,
sourceContextInfo->url));
}
});
}
}
scriptContext->MapFunction([&start] (FunctionBody* body)
{
#if DYNAMIC_INTERPRETER_THUNK
if(body->HasInterpreterThunkGenerated())
{
if(start)
{
LogMethodInterpretedThunkEvent(EventWriteMethodDCStart, body);
}
else
{
LogMethodInterpretedThunkEvent(EventWriteMethodDCEnd, body);
}
}
#endif
#if ENABLE_NATIVE_CODEGEN
body->MapEntryPoints([&](int index, FunctionEntryPointInfo * entryPoint)
{
if(entryPoint->IsCodeGenDone())
{
if (start)
{
LogMethodNativeEvent(EventWriteMethodDCStart, body, entryPoint);
}
else
{
LogMethodNativeEvent(EventWriteMethodDCEnd, body, entryPoint);
}
}
});
body->MapLoopHeadersWithLock([&](uint loopNumber, LoopHeader* header)
{
header->MapEntryPoints([&](int index, LoopEntryPointInfo * entryPoint)
{
if(entryPoint->IsCodeGenDone())
{
if(start)
{
LogLoopBodyEventBG(EventWriteMethodDCStart, body, header, entryPoint, ((uint16)body->GetLoopNumberWithLock(header)));
}
else
{
LogLoopBodyEventBG(EventWriteMethodDCEnd, body, header, entryPoint, ((uint16)body->GetLoopNumberWithLock(header)));
}
}
});
});
#endif
});
scriptContext = scriptContext->next;
}
#ifdef NTBUILD
if (EventEnabledJSCRIPT_HOSTING_CEO_START())
{
threadContext->EtwLogPropertyIdList();
}
#endif
threadContext = threadContext->Next();
}
if(start)
{
JS_ETW(EventWriteDCStartComplete());
}
else
{
JS_ETW(EventWriteDCEndComplete());
}
}
示例4: WritePerfMap
void PerfTrace::WritePerfMap()
{
#if ENABLE_NATIVE_CODEGEN
// Lock threadContext list during etw rundown
AutoCriticalSection autoThreadContextCs(ThreadContext::GetCriticalSection());
ThreadContext * threadContext = ThreadContext::GetThreadContextList();
FILE * perfMapFile;
{
const size_t PERFMAP_FILENAME_MAX_LENGTH = 30;
char perfMapFilename[PERFMAP_FILENAME_MAX_LENGTH];
pid_t processId = getpid();
snprintf(perfMapFilename, PERFMAP_FILENAME_MAX_LENGTH, "/tmp/perf-%d.map", processId);
perfMapFile = fopen(perfMapFilename, "w");
if (perfMapFile == NULL) {
return;
}
}
while(threadContext != nullptr)
{
// Take etw rundown lock on this thread context
AutoCriticalSection autoEtwRundownCs(threadContext->GetFunctionBodyLock());
ScriptContext* scriptContext = threadContext->GetScriptContextList();
while(scriptContext != NULL)
{
if(scriptContext->IsClosed())
{
scriptContext = scriptContext->next;
continue;
}
scriptContext->MapFunction([=] (FunctionBody* body)
{
#if DYNAMIC_INTERPRETER_THUNK
if(body->HasInterpreterThunkGenerated())
{
const char16* functionName = body->GetExternalDisplayName();
fwprintf(perfMapFile, _u("%llX %llX %s(Interpreted)\n"),
body->GetDynamicInterpreterEntryPoint(),
body->GetDynamicInterpreterThunkSize(),
functionName);
}
#endif
#if ENABLE_NATIVE_CODEGEN
body->MapEntryPoints([&](int index, FunctionEntryPointInfo * entryPoint)
{
if(entryPoint->IsCodeGenDone())
{
const ExecutionMode jitMode = entryPoint->GetJitMode();
if (jitMode == ExecutionMode::SimpleJit)
{
fwprintf(perfMapFile, _u("%llX %llX %s(SimpleJIT)\n"),
entryPoint->GetNativeAddress(),
entryPoint->GetCodeSize(),
body->GetExternalDisplayName());
}
else
{
fwprintf(perfMapFile, _u("%llX %llX %s(FullJIT)\n"),
entryPoint->GetNativeAddress(),
entryPoint->GetCodeSize(),
body->GetExternalDisplayName());
}
}
});
body->MapLoopHeadersWithLock([&](uint loopNumber, LoopHeader* header)
{
header->MapEntryPoints([&](int index, LoopEntryPointInfo * entryPoint)
{
if(entryPoint->IsCodeGenDone())
{
const uint16 loopNumber = ((uint16)body->GetLoopNumberWithLock(header));
fwprintf(perfMapFile, _u("%llX %llX %s(Loop%u)\n"),
entryPoint->GetNativeAddress(),
entryPoint->GetCodeSize(),
body->GetExternalDisplayName(),
loopNumber+1);
}
});
});
#endif
});
scriptContext = scriptContext->next;
}
threadContext = threadContext->Next();
}
fflush(perfMapFile);
fclose(perfMapFile);
#endif
PerfTrace::mapsRequested = 0;
//.........这里部分代码省略.........