Mercurial > hg > Members > kono > jpf-core
view src/main/gov/nasa/jpf/vm/DelegatingScheduler.java @ 0:61d41facf527
initial v8 import (history reset)
author | Peter Mehlitz <Peter.C.Mehlitz@nasa.gov> |
---|---|
date | Fri, 23 Jan 2015 10:14:01 -0800 |
parents | |
children |
line wrap: on
line source
/* * Copyright (C) 2014, United States Government, as represented by the * Administrator of the National Aeronautics and Space Administration. * All rights reserved. * * The Java Pathfinder core (jpf-core) platform is licensed under the * Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0. * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package gov.nasa.jpf.vm; import gov.nasa.jpf.Config; /** * a generic scheduler with configured SyncPolicy and SharednesPolicy objects it delegates to */ public class DelegatingScheduler implements Scheduler { protected SyncPolicy syncPolicy; protected SharednessPolicy sharednessPolicy; public DelegatingScheduler (Config config){ syncPolicy = config.getEssentialInstance("vm.scheduler.sync.class", SyncPolicy.class); sharednessPolicy = config.getEssentialInstance("vm.scheduler.sharedness.class", SharednessPolicy.class); } //--- Scheduler interface @Override public void initialize (VM vm, ApplicationContext appCtx) { syncPolicy.initializeSyncPolicy(vm, appCtx); sharednessPolicy.initializeSharednessPolicy(vm, appCtx); } //--- SyncPolicy interface @Override public void initializeSyncPolicy (VM vm, ApplicationContext appCtx) { syncPolicy.initializeSyncPolicy(vm, appCtx); } @Override public void initializeThreadSync (ThreadInfo tiCurrent, ThreadInfo tiNew) { syncPolicy.initializeThreadSync(tiCurrent, tiNew); } @Override public void setRootCG (){ syncPolicy.setRootCG(); } @Override public boolean setsBlockedThreadCG (ThreadInfo ti, ElementInfo ei) { return syncPolicy.setsBlockedThreadCG(ti, ei); } @Override public boolean setsLockAcquisitionCG (ThreadInfo ti, ElementInfo ei) { return syncPolicy.setsLockAcquisitionCG(ti, ei); } @Override public boolean setsLockReleaseCG (ThreadInfo ti, ElementInfo ei, boolean didUnblock) { return syncPolicy.setsLockReleaseCG(ti, ei, didUnblock); } @Override public boolean setsTerminationCG (ThreadInfo ti) { return syncPolicy.setsTerminationCG(ti); } @Override public boolean setsWaitCG (ThreadInfo ti, long timeout) { return syncPolicy.setsWaitCG(ti, timeout); } @Override public boolean setsNotifyCG (ThreadInfo ti, boolean didNotify) { return syncPolicy.setsNotifyCG(ti, didNotify); } @Override public boolean setsNotifyAllCG (ThreadInfo ti, boolean didNotify) { return syncPolicy.setsNotifyAllCG(ti, didNotify); } @Override public boolean setsStartCG (ThreadInfo tiCurrent, ThreadInfo tiStarted) { return syncPolicy.setsStartCG(tiCurrent, tiStarted); } @Override public boolean setsYieldCG (ThreadInfo ti) { return syncPolicy.setsYieldCG(ti); } @Override public boolean setsPriorityCG (ThreadInfo ti) { return syncPolicy.setsPriorityCG(ti); } @Override public boolean setsSleepCG (ThreadInfo ti, long millis, int nanos) { return syncPolicy.setsSleepCG(ti, millis, nanos); } @Override public boolean setsSuspendCG (ThreadInfo tiCurrent, ThreadInfo tiSuspended) { return syncPolicy.setsSuspendCG(tiCurrent, tiSuspended); } @Override public boolean setsResumeCG (ThreadInfo tiCurrent, ThreadInfo tiResumed) { return syncPolicy.setsResumeCG(tiCurrent, tiResumed); } @Override public boolean setsJoinCG (ThreadInfo tiCurrent, ThreadInfo tiJoin, long timeout) { return syncPolicy.setsJoinCG(tiCurrent, tiJoin, timeout); } @Override public boolean setsStopCG (ThreadInfo tiCurrent, ThreadInfo tiStopped) { return syncPolicy.setsStopCG(tiCurrent, tiStopped); } @Override public boolean setsInterruptCG (ThreadInfo tiCurrent, ThreadInfo tiInterrupted) { return syncPolicy.setsInterruptCG(tiCurrent, tiInterrupted); } @Override public boolean setsParkCG (ThreadInfo ti, boolean isAbsTime, long timeout) { return syncPolicy.setsParkCG(ti, isAbsTime, timeout); } @Override public boolean setsUnparkCG (ThreadInfo tiCurrent, ThreadInfo tiUnparked) { return syncPolicy.setsUnparkCG(tiCurrent, tiUnparked); } @Override public boolean setsBeginAtomicCG (ThreadInfo ti) { return syncPolicy.setsBeginAtomicCG(ti); } @Override public boolean setsEndAtomicCG (ThreadInfo ti) { return syncPolicy.setsEndAtomicCG(ti); } @Override public boolean setsRescheduleCG (ThreadInfo ti, String reason) { return syncPolicy.setsRescheduleCG(ti, reason); } @Override public boolean setsPostFinalizeCG (ThreadInfo tiFinalizer) { return syncPolicy.setsPostFinalizeCG(tiFinalizer); } //--- SharednessPolicy interface @Override public void initializeSharednessPolicy (VM vm, ApplicationContext appCtx) { sharednessPolicy.initializeSharednessPolicy( vm, appCtx); } @Override public void initializeObjectSharedness (ThreadInfo allocThread, DynamicElementInfo ei) { sharednessPolicy.initializeObjectSharedness(allocThread, ei); } @Override public void initializeClassSharedness (ThreadInfo allocThread, StaticElementInfo ei) { sharednessPolicy.initializeClassSharedness(allocThread, ei); } @Override public boolean canHaveSharedObjectCG (ThreadInfo ti, Instruction insn, ElementInfo eiFieldOwner, FieldInfo fi) { return sharednessPolicy.canHaveSharedObjectCG(ti, insn, eiFieldOwner, fi); } @Override public ElementInfo updateObjectSharedness (ThreadInfo ti, ElementInfo ei, FieldInfo fi) { return sharednessPolicy.updateObjectSharedness(ti, ei, fi); } @Override public boolean setsSharedObjectCG (ThreadInfo ti, Instruction insn, ElementInfo eiFieldOwner, FieldInfo fi) { return sharednessPolicy.setsSharedObjectCG(ti, insn, eiFieldOwner, fi); } @Override public boolean canHaveSharedClassCG (ThreadInfo ti, Instruction insn, ElementInfo eiFieldOwner, FieldInfo fi) { return sharednessPolicy.canHaveSharedClassCG(ti,insn,eiFieldOwner, fi); } @Override public ElementInfo updateClassSharedness (ThreadInfo ti, ElementInfo ei, FieldInfo fi) { return sharednessPolicy.updateClassSharedness(ti, ei, fi); } @Override public boolean setsSharedClassCG (ThreadInfo ti, Instruction insn, ElementInfo eiFieldOwner, FieldInfo fi) { return sharednessPolicy.setsSharedClassCG(ti, insn, eiFieldOwner, fi); } @Override public boolean canHaveSharedArrayCG (ThreadInfo ti, Instruction insn, ElementInfo eiArray, int idx) { return sharednessPolicy.canHaveSharedArrayCG(ti, insn, eiArray, idx); } @Override public ElementInfo updateArraySharedness (ThreadInfo ti, ElementInfo eiArray, int idx) { return sharednessPolicy.updateArraySharedness(ti,eiArray,idx); } @Override public boolean setsSharedArrayCG (ThreadInfo ti, Instruction insn, ElementInfo eiArray, int idx) { return sharednessPolicy.setsSharedArrayCG(ti, insn, eiArray, idx); } @Override public boolean setsSharedObjectExposureCG (ThreadInfo ti, Instruction insn, ElementInfo eiFieldOwner, FieldInfo fi, ElementInfo eiExposed) { return sharednessPolicy.setsSharedObjectExposureCG(ti,insn,eiFieldOwner,fi,eiExposed); } @Override public boolean setsSharedClassExposureCG (ThreadInfo ti, Instruction insn, ElementInfo eiFieldOwner, FieldInfo fi, ElementInfo eiExposed) { return sharednessPolicy.setsSharedClassExposureCG(ti, insn, eiFieldOwner, fi, eiExposed); } @Override public void cleanupThreadTermination (ThreadInfo ti) { sharednessPolicy.cleanupThreadTermination(ti); } }