]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.impl/src/org/simantics/db/impl/graph/ReadGraphImpl.java
Diagram threading and ThreadLogger improvements
[simantics/platform.git] / bundles / org.simantics.db.impl / src / org / simantics / db / impl / graph / ReadGraphImpl.java
index 3e955febc54743e25134184a2d7c3d9d85b9135c..a693b29228e026c1e1f6a5c7f3652c8d4320eb4c 100644 (file)
@@ -188,6 +188,8 @@ import org.simantics.utils.DataContainer;
 import org.simantics.utils.Development;
 import org.simantics.utils.datastructures.Pair;
 import org.simantics.utils.datastructures.collections.CollectionUtils;
+import org.simantics.utils.threads.logger.ITask;
+import org.simantics.utils.threads.logger.ThreadLogger;
 import org.slf4j.LoggerFactory;
 
 import gnu.trove.map.hash.TObjectIntHashMap;
@@ -1923,7 +1925,12 @@ public class ReadGraphImpl implements AsyncReadGraph {
        @Override
        public <T> T syncRequest(final Read<T> request) throws DatabaseException {
                assert (request != null);
-               return (T)QueryCache.runnerReadEntry(this, request, parent, null, null, true);
+
+               ITask task = ThreadLogger.task(request);
+               T result = (T)QueryCache.runnerReadEntry(this, request, parent, null, null, true);
+               task.finish();
+               return result;
+               
        }
 
        @Override
@@ -1943,9 +1950,11 @@ public class ReadGraphImpl implements AsyncReadGraph {
 
                assert (request != null);
 
+               ITask task = ThreadLogger.task(request);
                ListenerBase listener = procedure != null ? getListenerBase(procedure) : null;
-
-               return QueryCache.resultReadEntry(this, request, parent, listener, procedure);
+               T result = QueryCache.resultReadEntry(this, request, parent, listener, procedure);
+               task.finish();
+               return result;
 
        }
 
@@ -2029,11 +2038,11 @@ public class ReadGraphImpl implements AsyncReadGraph {
 
                assert (request != null);
 
+               ITask task = ThreadLogger.task(request);
                ListenerBase listener = getListenerBase(procedure);
-
-//             BlockingAsyncProcedure<T> ap = new BlockingAsyncProcedure<>(this, procedure, request);
-               return (T)QueryCache.runnerAsyncReadEntry(this, request, parent, listener, procedure, true);
-//             return ap.get();
+               T result = (T)QueryCache.runnerAsyncReadEntry(this, request, parent, listener, procedure, true); 
+               task.finish();
+               return result;
 
        }
 
@@ -5232,13 +5241,29 @@ public class ReadGraphImpl implements AsyncReadGraph {
                assert (request != null);
                assert (procedure != null);
 
+               ITask task = ThreadLogger.task(request);
+
                processor.scheduleNow(new SessionTask(this) {
 
                        @Override
                        public void run0(int thread) {
                                try {
                                        final ListenerBase listener = getListenerBase(procedure);
-                                       QueryCache.runnerAsyncReadEntry(ReadGraphImpl.this, request, parent, listener, procedure, false);
+                                       QueryCache.runnerAsyncReadEntry(ReadGraphImpl.this, request, parent, listener, new AsyncProcedure<T>() {
+
+                                               @Override
+                                               public void execute(AsyncReadGraph graph, T result) {
+                                                       task.finish();
+                                                       procedure.execute(graph, result);
+                                               }
+
+                                               @Override
+                                               public void exception(AsyncReadGraph graph, Throwable throwable) {
+                                                       task.finish();
+                                                       procedure.exception(graph, throwable);
+                                               }
+                                               
+                                       }, false);
                                } catch (DatabaseException e) {
                                        Logger.defaultLogError(e);
                                }