author | Terrence Cole <terrence@mozilla.com> |
Tue, 16 Jun 2015 16:03:11 -0700 | |
changeset 249675 | 9c891ea3949c420f2c89101e51777f09c185e43e |
parent 249674 | ea281f1bffcba07c69045890e9e5cbdc726b7980 |
child 249676 | 4c3af36331e06dbb56da0b5d37feb5b97c07db61 |
push id | 28936 |
push user | ryanvm@gmail.com |
push date | Fri, 19 Jun 2015 20:34:42 +0000 |
treeherder | mozilla-central@c319f262ce3e [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | jonco |
bugs | 1174850 |
milestone | 41.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/js/src/gc/Barrier.h +++ b/js/src/gc/Barrier.h @@ -272,27 +272,27 @@ struct InternalGCMethods<Value> } } static void postBarrierRelocate(Value* vp) { MOZ_ASSERT(!CurrentThreadIsIonCompiling()); if (vp->isObject()) { gc::StoreBuffer* sb = reinterpret_cast<gc::Cell*>(&vp->toObject())->storeBuffer(); if (sb) - sb->putRelocatableValueFromAnyThread(vp); + sb->putValueFromAnyThread(vp); } } static void postBarrierRemove(Value* vp) { MOZ_ASSERT(vp); MOZ_ASSERT(vp->isMarkable()); MOZ_ASSERT(!CurrentThreadIsIonCompiling()); JSRuntime* rt = static_cast<js::gc::Cell*>(vp->toGCThing())->runtimeFromAnyThread(); JS::shadow::Runtime* shadowRuntime = JS::shadow::Runtime::asShadowRuntime(rt); - shadowRuntime->gcStoreBufferPtr()->removeRelocatableValueFromAnyThread(vp); + shadowRuntime->gcStoreBufferPtr()->unputValueFromAnyThread(vp); } static void readBarrier(const Value& v) { DispatchValueTyped(ReadBarrierFunctor<Value>(), v); } }; template <>
--- a/js/src/gc/Nursery.cpp +++ b/js/src/gc/Nursery.cpp @@ -440,24 +440,16 @@ js::Nursery::collect(JSRuntime* rt, JS:: TIME_START(traceSlots); sb.traceSlots(mover); TIME_END(traceSlots); TIME_START(traceWholeCells); sb.traceWholeCells(mover); TIME_END(traceWholeCells); - TIME_START(traceRelocatableValues); - sb.traceRelocatableValues(mover); - TIME_END(traceRelocatableValues); - - TIME_START(traceRelocatableCells); - sb.traceRelocatableCells(mover); - TIME_END(traceRelocatableCells); - TIME_START(traceGenericEntries); sb.traceGenericEntries(&mover); TIME_END(traceGenericEntries); TIME_START(markRuntime); rt->gc.markRuntime(&mover); TIME_END(markRuntime); @@ -552,34 +544,32 @@ js::Nursery::collect(JSRuntime* rt, JS:: rt->addTelemetry(JS_TELEMETRY_GC_MINOR_REASON_LONG, reason); TraceMinorGCEnd(); if (enableProfiling_ && totalTime >= profileThreshold_) { static bool printedHeader = false; if (!printedHeader) { fprintf(stderr, - "MinorGC: Reason PRate Size Time mkVals mkClls mkSlts mkWCll mkRVal mkRCll mkGnrc ckTbls mkRntm mkDbgr clrNOC collct swpABO updtIn runFin frSlts clrSB sweep resize pretnr\n"); + "MinorGC: Reason PRate Size Time mkVals mkClls mkSlts mkWCll mkGnrc ckTbls mkRntm mkDbgr clrNOC collct swpABO updtIn runFin frSlts clrSB sweep resize pretnr\n"); printedHeader = true; } #define FMT " %6" PRIu64 fprintf(stderr, - "MinorGC: %20s %5.1f%% %4d" FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT "\n", + "MinorGC: %20s %5.1f%% %4d" FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT FMT "\n", js::gcstats::ExplainReason(reason), promotionRate * 100, numActiveChunks_, totalTime, TIME_TOTAL(cancelIonCompilations), TIME_TOTAL(traceValues), TIME_TOTAL(traceCells), TIME_TOTAL(traceSlots), TIME_TOTAL(traceWholeCells), - TIME_TOTAL(traceRelocatableValues), - TIME_TOTAL(traceRelocatableCells), TIME_TOTAL(traceGenericEntries), TIME_TOTAL(checkHashTables), TIME_TOTAL(markRuntime), TIME_TOTAL(markDebugger), TIME_TOTAL(clearNewObjectCache), TIME_TOTAL(collectToFP), TIME_TOTAL(sweepArrayBufferViewList), TIME_TOTAL(updateJitActivations),
--- a/js/src/gc/StoreBuffer.cpp +++ b/js/src/gc/StoreBuffer.cpp @@ -39,18 +39,16 @@ StoreBuffer::enable() { if (enabled_) return true; if (!bufferVal.init() || !bufferCell.init() || !bufferSlot.init() || !bufferWholeCell.init() || - !bufferRelocVal.init() || - !bufferRelocCell.init() || !bufferGeneric.init()) { return false; } enabled_ = true; return true; } @@ -74,18 +72,16 @@ StoreBuffer::clear() aboutToOverflow_ = false; cancelIonCompilations_ = false; bufferVal.clear(); bufferCell.clear(); bufferSlot.clear(); bufferWholeCell.clear(); - bufferRelocVal.clear(); - bufferRelocCell.clear(); bufferGeneric.clear(); return true; } void StoreBuffer::setAboutToOverflow() { @@ -99,17 +95,15 @@ StoreBuffer::setAboutToOverflow() void StoreBuffer::addSizeOfExcludingThis(mozilla::MallocSizeOf mallocSizeOf, JS::GCSizes *sizes) { sizes->storeBufferVals += bufferVal.sizeOfExcludingThis(mallocSizeOf); sizes->storeBufferCells += bufferCell.sizeOfExcludingThis(mallocSizeOf); sizes->storeBufferSlots += bufferSlot.sizeOfExcludingThis(mallocSizeOf); sizes->storeBufferWholeCells += bufferWholeCell.sizeOfExcludingThis(mallocSizeOf); - sizes->storeBufferRelocVals += bufferRelocVal.sizeOfExcludingThis(mallocSizeOf); - sizes->storeBufferRelocCells += bufferRelocCell.sizeOfExcludingThis(mallocSizeOf); sizes->storeBufferGenerics += bufferGeneric.sizeOfExcludingThis(mallocSizeOf); } template struct StoreBuffer::MonoTypeBuffer<StoreBuffer::ValueEdge>; template struct StoreBuffer::MonoTypeBuffer<StoreBuffer::CellPtrEdge>; template struct StoreBuffer::MonoTypeBuffer<StoreBuffer::SlotsEdge>; template struct StoreBuffer::MonoTypeBuffer<StoreBuffer::WholeCellEdges>;
--- a/js/src/gc/StoreBuffer.h +++ b/js/src/gc/StoreBuffer.h @@ -346,73 +346,58 @@ class StoreBuffer if (edge.maybeInRememberedSet(nursery_)) buffer.put(this, edge); } MonoTypeBuffer<ValueEdge> bufferVal; MonoTypeBuffer<CellPtrEdge> bufferCell; MonoTypeBuffer<SlotsEdge> bufferSlot; MonoTypeBuffer<WholeCellEdges> bufferWholeCell; - MonoTypeBuffer<ValueEdge> bufferRelocVal; - MonoTypeBuffer<CellPtrEdge> bufferRelocCell; GenericBuffer bufferGeneric; bool cancelIonCompilations_; JSRuntime* runtime_; const Nursery& nursery_; bool aboutToOverflow_; bool enabled_; mozilla::DebugOnly<bool> mEntered; /* For ReentrancyGuard. */ public: explicit StoreBuffer(JSRuntime* rt, const Nursery& nursery) - : bufferVal(), bufferCell(), bufferSlot(), bufferWholeCell(), - bufferRelocVal(), bufferRelocCell(), bufferGeneric(), cancelIonCompilations_(false), - runtime_(rt), nursery_(nursery), aboutToOverflow_(false), enabled_(false), - mEntered(false) + : bufferVal(), bufferCell(), bufferSlot(), bufferWholeCell(), bufferGeneric(), + cancelIonCompilations_(false), runtime_(rt), nursery_(nursery), aboutToOverflow_(false), + enabled_(false), mEntered(false) { } bool enable(); void disable(); bool isEnabled() const { return enabled_; } bool clear(); /* Get the overflowed status. */ bool isAboutToOverflow() const { return aboutToOverflow_; } bool cancelIonCompilations() const { return cancelIonCompilations_; } /* Insert a single edge into the buffer/remembered set. */ - void putValueFromAnyThread(JS::Value* valuep) { putFromAnyThread(bufferVal, ValueEdge(valuep)); } + void putValueFromAnyThread(JS::Value* vp) { putFromAnyThread(bufferVal, ValueEdge(vp)); } + void unputValueFromAnyThread(JS::Value* vp) { unputFromAnyThread(bufferVal, ValueEdge(vp)); } void putCellFromAnyThread(Cell** cellp) { putFromAnyThread(bufferCell, CellPtrEdge(cellp)); } + void unputCellFromAnyThread(Cell** cellp) { unputFromAnyThread(bufferCell, CellPtrEdge(cellp)); } void putSlotFromAnyThread(NativeObject* obj, int kind, int32_t start, int32_t count) { putFromAnyThread(bufferSlot, SlotsEdge(obj, kind, start, count)); } void putWholeCellFromMainThread(Cell* cell) { MOZ_ASSERT(cell->isTenured()); putFromMainThread(bufferWholeCell, WholeCellEdges(cell)); } - /* Insert or update a single edge in the Relocatable buffer. */ - void putRelocatableValueFromAnyThread(JS::Value* valuep) { - putFromAnyThread(bufferRelocVal, ValueEdge(valuep)); - } - void removeRelocatableValueFromAnyThread(JS::Value* valuep) { - unputFromAnyThread(bufferRelocVal, ValueEdge(valuep)); - } - void putRelocatableCellFromAnyThread(Cell** cellp) { - putFromAnyThread(bufferRelocCell, CellPtrEdge(cellp)); - } - void removeRelocatableCellFromAnyThread(Cell** cellp) { - unputFromAnyThread(bufferRelocCell, CellPtrEdge(cellp)); - } - /* Insert an entry into the generic buffer. */ template <typename T> void putGeneric(const T& t) { putFromAnyThread(bufferGeneric, t);} /* Insert or update a callback entry. */ template <typename Key> void putCallback(void (*callback)(JSTracer* trc, Key* key, void* data), Key* key, void* data) { putFromAnyThread(bufferGeneric, CallbackRef<Key>(callback, key, data)); @@ -422,18 +407,16 @@ class StoreBuffer cancelIonCompilations_ = true; } /* Methods to trace the source of all edges in the store buffer. */ void traceValues(TenuringTracer& mover) { bufferVal.trace(this, mover); } void traceCells(TenuringTracer& mover) { bufferCell.trace(this, mover); } void traceSlots(TenuringTracer& mover) { bufferSlot.trace(this, mover); } void traceWholeCells(TenuringTracer& mover) { bufferWholeCell.trace(this, mover); } - void traceRelocatableValues(TenuringTracer& mover) { bufferRelocVal.trace(this, mover); } - void traceRelocatableCells(TenuringTracer& mover) { bufferRelocCell.trace(this, mover); } void traceGenericEntries(JSTracer *trc) { bufferGeneric.trace(this, trc); } /* For use by our owned buffers and for testing. */ void setAboutToOverflow(); void addSizeOfExcludingThis(mozilla::MallocSizeOf mallocSizeOf, JS::GCSizes* sizes); };
--- a/js/src/jsobj.h +++ b/js/src/jsobj.h @@ -625,26 +625,26 @@ JSObject::writeBarrierPost(JSObject* obj /* static */ MOZ_ALWAYS_INLINE void JSObject::writeBarrierPostRelocate(JSObject* obj, void* cellp) { MOZ_ASSERT(cellp); MOZ_ASSERT(obj); MOZ_ASSERT(obj == *static_cast<JSObject**>(cellp)); js::gc::StoreBuffer* storeBuffer = obj->storeBuffer(); if (storeBuffer) - storeBuffer->putRelocatableCellFromAnyThread(static_cast<js::gc::Cell**>(cellp)); + storeBuffer->putCellFromAnyThread(static_cast<js::gc::Cell**>(cellp)); } /* static */ MOZ_ALWAYS_INLINE void JSObject::writeBarrierPostRemove(JSObject* obj, void* cellp) { MOZ_ASSERT(cellp); MOZ_ASSERT(obj); MOZ_ASSERT(obj == *static_cast<JSObject**>(cellp)); - obj->shadowRuntimeFromAnyThread()->gcStoreBufferPtr()->removeRelocatableCellFromAnyThread( + obj->shadowRuntimeFromAnyThread()->gcStoreBufferPtr()->unputCellFromAnyThread( static_cast<js::gc::Cell**>(cellp)); } namespace js { inline bool IsCallable(const Value& v) {