Skip to content

Commit

Permalink
Merge PR #103: Remove Kompos-specific Protocol
Browse files Browse the repository at this point in the history
  • Loading branch information
smarr authored Jan 30, 2017
2 parents 8ac11b5 + 56ae8e1 commit bb114e5
Show file tree
Hide file tree
Showing 30 changed files with 971 additions and 883 deletions.
16 changes: 14 additions & 2 deletions src/som/interpreter/actors/Actor.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
import som.VM;
import som.interpreter.objectstorage.ObjectTransitionSafepoint;
import som.primitives.ObjectPrims.IsValue;
import som.vm.Activity;
import som.vm.ActivityThread;
import som.vm.VmSettings;
import som.vmobjects.SAbstractObject;
import som.vmobjects.SArray.STransferArray;
Expand All @@ -41,7 +43,7 @@
* - grabs the current mailbox
* - and sequentially executes all messages
*/
public class Actor {
public class Actor implements Activity {

public static Actor createActor() {
if (VmSettings.DEBUG_MODE) {
Expand Down Expand Up @@ -265,7 +267,7 @@ public ForkJoinWorkerThread newThread(final ForkJoinPool pool) {
}
}

public static final class ActorProcessingThread extends ForkJoinWorkerThread {
public static final class ActorProcessingThread extends ForkJoinWorkerThread implements ActivityThread {
public EventualMessage currentMessage;
private static AtomicInteger threadIdGen = new AtomicInteger(0);
protected Actor currentlyExecutingActor;
Expand All @@ -285,6 +287,11 @@ protected ActorProcessingThread(final ForkJoinPool pool) {
}
}

@Override
public Activity getActivity() {
return currentMessage.getTarget();
}

protected long generateActorId() {
long result = (threadId << THREAD_ID_SHIFT) | nextActorId;
nextActorId++;
Expand Down Expand Up @@ -371,6 +378,11 @@ public static final void forceSwapBuffers() {
}
}

@Override
public String getName() {
return toString();
}

@Override
public String toString() {
return "Actor";
Expand Down
46 changes: 41 additions & 5 deletions src/som/primitives/processes/ChannelPrimitives.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package som.primitives.processes;

import java.util.HashSet;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.ForkJoinPool.ForkJoinWorkerThreadFactory;
import java.util.concurrent.ForkJoinWorkerThread;
Expand All @@ -26,6 +27,8 @@
import som.primitives.Primitive;
import som.primitives.arrays.ToArgumentsArrayNode;
import som.primitives.arrays.ToArgumentsArrayNodeFactory;
import som.vm.Activity;
import som.vm.ActivityThread;
import som.vm.Symbols;
import som.vm.VmSettings;
import som.vm.constants.KernelObj;
Expand Down Expand Up @@ -63,18 +66,32 @@ public static void resetClassReferences() {
Out = null; OutId = null;
}

private static final HashSet<Process> activeProcesses = new HashSet<>();

public static HashSet<Process> getActiveProcesses() {
return activeProcesses;
}

private static final class ProcessThreadFactory implements ForkJoinWorkerThreadFactory {
@Override
public ForkJoinWorkerThread newThread(final ForkJoinPool pool) {
return new ProcessThread(pool);
}
}

public static final class ProcessThread extends ForkJoinWorkerThread {
public static final class ProcessThread extends ForkJoinWorkerThread
implements ActivityThread {
private Process current;

ProcessThread(final ForkJoinPool pool) { super(pool); }

@Override
public Activity getActivity() {
return current;
}
}

private static final class Process implements Runnable {
public static final class Process implements Activity, Runnable {
private final SObjectWithClass obj;

Process(final SObjectWithClass obj) {
Expand All @@ -83,9 +100,28 @@ private static final class Process implements Runnable {

@Override
public void run() {
SInvokable disp = (SInvokable) obj.getSOMClass().lookupMessage(
Symbols.symbolFor("run"), AccessModifier.PROTECTED);
disp.invoke(obj);
((ProcessThread) Thread.currentThread()).current = this;

synchronized (activeProcesses) {
activeProcesses.add(this);
}

try {
SInvokable disp = (SInvokable) obj.getSOMClass().lookupMessage(
Symbols.symbolFor("run"), AccessModifier.PROTECTED);
disp.invoke(obj);
} catch (Throwable t) {
t.printStackTrace();
} finally {
synchronized (activeProcesses) {
activeProcesses.remove(this);
}
}
}

@Override
public String getName() {
return obj.getSOMClass().getName().getString();
}
}

Expand Down
10 changes: 9 additions & 1 deletion src/som/primitives/threading/ThreadPrimitives.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
import som.primitives.Primitive;
import som.primitives.arrays.ToArgumentsArrayNode;
import som.primitives.arrays.ToArgumentsArrayNodeFactory;
import som.vm.Activity;
import som.vm.ActivityThread;
import som.vm.constants.Nil;
import som.vmobjects.SArray;
import som.vmobjects.SBlock;
Expand Down Expand Up @@ -113,7 +115,8 @@ public final SClass doSClass(final SClass module) {
}
}

public static final class SomThread extends Thread {
public static final class SomThread extends Thread
implements Activity, ActivityThread {
private final Object[] args;
private final SBlock block;

Expand All @@ -131,5 +134,10 @@ public void run() {
ObjectTransitionSafepoint.INSTANCE.unregister();
}
}

@Override
public Activity getActivity() {
return this;
}
}
}
6 changes: 6 additions & 0 deletions src/som/vm/Activity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package som.vm;


public interface Activity {
String getName();
}
6 changes: 6 additions & 0 deletions src/som/vm/ActivityThread.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package som.vm;


public interface ActivityThread {
Activity getActivity();
}
10 changes: 5 additions & 5 deletions src/som/vmobjects/SObject.java
Original file line number Diff line number Diff line change
Expand Up @@ -116,11 +116,11 @@ public static final class SMutableObject extends SObject {
private long primField4;
private long primField5;

@SuppressWarnings("unused") private Object field1;
@SuppressWarnings("unused") private Object field2;
@SuppressWarnings("unused") private Object field3;
@SuppressWarnings("unused") private Object field4;
@SuppressWarnings("unused") private Object field5;
private Object field1;
private Object field2;
private Object field3;
private Object field4;
private Object field5;

// this field exists because HotSpot reorders fields, and we need to keep
// the layouts in sync to avoid having to manage different offsets for
Expand Down
32 changes: 9 additions & 23 deletions src/tools/debugger/FrontendConnector.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
import org.java_websocket.WebSocket;

import com.google.gson.Gson;
import com.oracle.truffle.api.debug.SuspendedEvent;
import com.oracle.truffle.api.instrumentation.Instrumenter;
import com.oracle.truffle.api.nodes.RootNode;
import com.oracle.truffle.api.source.Source;
Expand All @@ -26,8 +25,8 @@
import som.vmobjects.SSymbol;
import tools.SourceCoordinate;
import tools.SourceCoordinate.TaggedSourceCoordinate;
import tools.concurrency.ActorExecutionTrace;
import tools.Tagging;
import tools.concurrency.ActorExecutionTrace;
import tools.debugger.frontend.Suspension;
import tools.debugger.message.Message;
import tools.debugger.message.Message.OutgoingMessage;
Expand All @@ -36,8 +35,8 @@
import tools.debugger.message.SourceMessage.SourceData;
import tools.debugger.message.StackTraceResponse;
import tools.debugger.message.StoppedMessage;
import tools.debugger.message.SuspendedEventMessage;
import tools.debugger.message.SymbolMessage;
import tools.debugger.message.ThreadsResponse;
import tools.debugger.message.VariablesResponse;
import tools.debugger.session.AsyncMessageReceiverBreakpoint;
import tools.debugger.session.Breakpoints;
Expand Down Expand Up @@ -193,6 +192,12 @@ private void sendBufferedSources(
}
}



public synchronized void sendThreads(final int requestId) {
send(ThreadsResponse.create(webDebugger.getAllActivities(), requestId));
}

public void sendLoadedSource(final Source source,
final Map<Source, Map<SourceSection, Set<Class<? extends Tags>>>> loadedSourcesTags,
final Map<Source, Set<RootNode>> rootNodes) {
Expand Down Expand Up @@ -230,13 +235,6 @@ public void awaitClient() {
log("[DEBUGGER] Debugger connected.");
}

public void sendSuspendedEvent(final Suspension suspension) {
sendTracingData();
send(SuspendedEventMessage.create(
suspension.getEvent(),
SUSPENDED_EVENT_ID_PREFIX + suspension.activityId));
}

public void sendStackTrace(final int startFrame, final int levels,
final Suspension suspension, final int requestId) {
send(StackTraceResponse.create(startFrame, levels, suspension, requestId));
Expand All @@ -250,7 +248,6 @@ public void sendScopes(final int frameId, final Suspension suspension,
public void sendVariables(final int varRef, final int requestId, final Suspension suspension) {
send(VariablesResponse.create(varRef, requestId, suspension));
}
private static final String SUSPENDED_EVENT_ID_PREFIX = "se-";

public void sendStoppedMessage(final Suspension suspension) {
send(StoppedMessage.create(suspension));
Expand Down Expand Up @@ -294,29 +291,18 @@ public Suspension getSuspension(final int activityId) {
return webDebugger.getSuspension(activityId);
}

public Suspension getSuspension(final String suspendedEventId) {
int activityId = Integer.valueOf(suspendedEventId.substring(SUSPENDED_EVENT_ID_PREFIX.length()));
return webDebugger.getSuspension(activityId);
}

public Suspension getSuspensionForGlobalId(final int globalId) {
return webDebugger.getSuspension(Suspension.getActivityIdFromGlobalId(globalId));
}

public SuspendedEvent getSuspendedEvent(final String id) {
int activityId = Integer.valueOf(id.substring(SUSPENDED_EVENT_ID_PREFIX.length()));
return webDebugger.getSuspendedEvent(activityId);
}

static void log(final String str) {
// Checkstyle: stop
System.out.println(str);
// Checkstyle: resume
}

public void completeConnection(final WebSocket conn, final boolean debuggerProtocol) {
public void completeConnection(final WebSocket conn) {
clientConnected.complete(conn);
webDebugger.useDebuggerProtocol(debuggerProtocol);
}

public void shutdown() {
Expand Down
Loading

0 comments on commit bb114e5

Please sign in to comment.