示例#1
0
int checkPart (int partid,int partidx,int partsrno,int slotIndex)
{
    int jid,m,tt;

    /* we have found slots for all jobs for this part */
   if (partidx >= parts[partid].totjobs) return 1;

   jid = parts[partid].jobs[partidx];

   for (tt=slotIndex;tt<tsec;tt++) {
      for (m=0;m<total_machines;m++) {
         if (!machineCanDo (m,jid)) continue;

         if (checkSlotsFor (m,jid,tt)) {
            markSlots(m,partid,partsrno,jid,tt,jobs[jid].rtime);

            if (checkPart (partid,partidx+1,partsrno,tt+jobs[jid].rtime)) return 1;
            else {
               markSlots(m,-1,-1,-1,tt,jobs[jid].rtime);
               return 0;
            }
         }
      } 
   }
   return 0;
}
示例#2
0
MOZ_ALWAYS_INLINE void
ForkJoinNursery::traceObject(ForkJoinNurseryCollectionTracer *trc, JSObject *obj)
{
    const Class *clasp = obj->getClass();
    if (clasp->trace)
        clasp->trace(trc, obj);

    if (!obj->isNative())
        return;

    if (!obj->hasEmptyElements())
        markSlots(obj->getDenseElements(), obj->getDenseInitializedLength());

    HeapSlot *fixedStart, *fixedEnd, *dynStart, *dynEnd;
    obj->getSlotRange(0, obj->slotSpan(), &fixedStart, &fixedEnd, &dynStart, &dynEnd);
    markSlots(fixedStart, fixedEnd);
    markSlots(dynStart, dynEnd);
}
示例#3
0
MOZ_ALWAYS_INLINE void
ForkJoinNursery::markSlots(HeapSlot *vp, uint32_t nslots)
{
    markSlots(vp, vp + nslots);
}