RPM Package Manager, CVS Repository http://rpm5.org/cvs/ ____________________________________________________________________________
Server: rpm5.org Name: Jeff Johnson Root: /v/rpm/cvs Email: j...@rpm5.org Module: rpm Date: 07-Jul-2017 13:29:12 Branch: rpm-5_4 Handle: 2017070711291200 Modified files: (Branch: rpm-5_4) rpm/js rpmjs45.cpp Log: - rpmjs45: WIP. Summary: Revision Changes Path 1.1.2.3 +61 -11 rpm/js/rpmjs45.cpp ____________________________________________________________________________ patch -p0 <<'@@ .' Index: rpm/js/rpmjs45.cpp ============================================================================ $ cvs diff -u -r1.1.2.2 -r1.1.2.3 rpmjs45.cpp --- rpm/js/rpmjs45.cpp 7 Jul 2017 05:06:15 -0000 1.1.2.2 +++ rpm/js/rpmjs45.cpp 7 Jul 2017 11:29:12 -0000 1.1.2.3 @@ -8369,8 +8369,12 @@ JS::SetLargeAllocationFailureCallback(I->rt, nullptr, nullptr); +#ifdef DYING if (I->cx) JS_DestroyContext(I->cx); +#else + DestroyContext(I->cx, true); +#endif I->cx = NULL; KillWatchdog(I->rt); @@ -8404,6 +8408,9 @@ JSPrincipals * _principals = NULL; bool ok; + I = (JSI_t) calloc(1, sizeof(*I)); +assert(I); + // Start the engine. if (rpmjss_nopens++ == 0) JS_Init(); @@ -8411,14 +8418,10 @@ ok = InitSharedArrayBufferMailbox(); assert(ok); - I = (JSI_t) calloc(1, sizeof(*I)); -assert(I); - static uint32_t _maxbytes = 8L * 1024L * 1024L; static uint32_t _maxNurseryBytes = JS::DefaultNurseryBytes; - JSRuntime * _parentRuntime = nullptr; - JSRuntime * rt = JS_NewRuntime(_maxbytes, _maxNurseryBytes, _parentRuntime); + JSRuntime * rt = JS_NewRuntime(_maxbytes, _maxNurseryBytes); assert(rt); I->rt = rt; @@ -8432,13 +8435,14 @@ #ifdef DYING JS_SetRuntimePrivate(rt, (void *)jss); #else - JS_SetRuntimePrivate(rt, sr); + JS_SetRuntimePrivate(rt, sr); // XXX sr.get() #endif JS_SetErrorReporter(rt, my_ErrorReporter); JS::SetOutOfMemoryCallback(rt, my_OOMCallback, nullptr); - // XXX SetRuntimeOptions(rt, op); + // XXX ok = SetRuntimeOptions(rt, op); + // XXX assert(ok); sr->interruptFunc.init(rt, NullValue()); sr->lastWarning.init(rt, NullValue()); @@ -8454,28 +8458,51 @@ JS_SetSecurityCallbacks(rt, &ShellPrincipals::securityCallbacks); JS_InitDestroyPrincipalsCallback(rt, ShellPrincipals::destroy); - // XXX JS_SetInterruptCallback(rt, ShellInterruptCallback); - + JS_SetInterruptCallback(rt, ShellInterruptCallback); JS::SetAsmJSCacheOps(rt, &asmJSCacheOps); JS_SetNativeStackQuota(rt, gMaxStackSize); - // XXX JS::dbg::SetDebuggerMallocSizeOf(rt, moz_malloc_size_of); + JS::dbg::SetDebuggerMallocSizeOf(rt, moz_malloc_size_of); + + ok = offThreadState.init(); +assert(ok); ok = InitWatchdog(rt); assert(ok); +#ifdef DYING JSContext * cx = JS_NewContext(rt, _stackChunkSize); +#else + JSContext * cx = NewContext(rt); +#endif assert(cx); I->cx = cx; +#ifdef DYING JS_SetContextPrivate(cx, (void *)jss); - // XXX JS_SetSecondContextPrivate(cx, (void *)jss); +#else + JS_SetSecondContextPrivate(cx, (void *)jss); +#endif JS_SetGCParameter(rt, JSGC_MODE, JSGC_MODE_INCREMENTAL); JS_SetGCParameterForThread(cx, JSGC_MAX_CODE_CACHE_BYTES, 16 * 1024 * 1024 ); JS::SetLargeAllocationFailureCallback(rt, my_LargeAllocFailCallback, (void *)cx); + // Set some parameters to allow incremental GC in low memory conditions, + // as is done for the browser, except in more-deterministic builds or when + // disabled by command line options. +#ifndef JS_MORE_DETERMINISTIC +#ifdef FIXME + if (!op.getBoolOption("no-incremental-gc")) +#endif + { + JS_SetGCParameter(rt, JSGC_DYNAMIC_HEAP_GROWTH, 1); + JS_SetGCParameter(rt, JSGC_DYNAMIC_MARK_SLICE, 1); + JS_SetGCParameter(rt, JSGC_SLICE_TIME_BUDGET, 10); + } +#endif + js::SetPreserveWrapperCallback(rt, DummyPreserveWrapperCallback); // result = Shell(cx, &op, envp); @@ -8486,6 +8513,29 @@ glob = NewGlobalObject(cx, options, _principals); assert(glob); I->global = glob; + + JSAutoCompartment ac(cx, glob); + +#ifdef FIXME + int result = ProcessArgs(cx, op); + +#ifdef FIXME + if (enableDisassemblyDumps) + js::DumpCompartmentPCCounts(cx); +#endif + + if (!op->getBoolOption("no-js-cache-per-process")) { + if (jsCacheAsmJSPath) { + unlink(jsCacheAsmJSPath); + JS_free(cx, const_cast<char*>(jsCacheAsmJSPath)); + } + if (jsCacheDir) { + rmdir(jsCacheDir); + JS_free(cx, const_cast<char*>(jsCacheDir)); + } + } +#endif /* FIXME */ + } return I; @@ . ______________________________________________________________________ RPM Package Manager http://rpm5.org CVS Sources Repository rpm-cvs@rpm5.org