You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by sc...@apache.org on 2016/04/18 15:08:59 UTC
svn commit: r1739757 - in
/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima:
cas/impl/CASImpl.java internal/util/MiscImpl.java util/impl/MiscImpl.java
Author: schor
Date: Mon Apr 18 13:08:59 2016
New Revision: 1739757
URL: http://svn.apache.org/viewvc?rev=1739757&view=rev
Log:
[UIMA-4897] move changes to internal MiscImpl version of Misc class to a better place, add (disabled) trace support to CASImpl
Added:
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/MiscImpl.java
- copied, changed from r1739756, uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/util/impl/MiscImpl.java
Removed:
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/util/impl/MiscImpl.java
Modified:
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASImpl.java
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASImpl.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASImpl.java?rev=1739757&r1=1739756&r2=1739757&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASImpl.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASImpl.java Mon Apr 18 13:08:59 2016
@@ -19,10 +19,13 @@
package org.apache.uima.cas.impl;
+import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
+import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.MalformedURLException;
@@ -89,6 +92,7 @@ import org.apache.uima.cas.text.Annotati
import org.apache.uima.cas.text.AnnotationIndex;
import org.apache.uima.cas.text.Language;
import org.apache.uima.internal.util.IntVector;
+import org.apache.uima.internal.util.MiscImpl;
import org.apache.uima.internal.util.PositiveIntSet_impl;
import org.apache.uima.jcas.JCas;
import org.apache.uima.jcas.impl.JCasImpl;
@@ -105,6 +109,17 @@ import org.apache.uima.util.Misc;
public class CASImpl extends AbstractCas_ImplBase implements CAS, CASMgr, LowLevelCAS {
private static final boolean trace = false;
+ public static final boolean traceFSs = false; // debug - trace FS creation and update
+ private static final String traceFile = "traceFSs.log.txt";
+ private static final PrintStream traceOut;
+ static {
+ try {
+ System.out.println("Creating traceFSs file in directory " + System.getProperty("user.dir"));
+ traceOut = traceFSs ? new PrintStream(new BufferedOutputStream(new FileOutputStream(traceFile, false))) : null;
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
// debug
private static final AtomicInteger casIdProvider = new AtomicInteger(0);
@@ -338,6 +353,10 @@ public class CASImpl extends AbstractCas
private final int casId;
+ private final StringBuilder traceFScreationSb = traceFSs ? new StringBuilder() : null;
+ private int traceFSid = 0;
+ private boolean traceFSisCreate;
+
private SharedViewData(boolean useFSCache, Heap heap, CASImpl baseCAS, CASMetadata casMetadata) {
this.useFSCache = useFSCache;
this.heap = heap;
@@ -1118,6 +1137,9 @@ public class CASImpl extends AbstractCas
this.svd.cache_not_in_index = 0;
this.svd.fssTobeAddedback.clear();
this.svd.fssTobeAddedback.trimToSize();
+
+ svd.traceFSid = 0;
+ if (traceFSs) svd.traceFScreationSb.setLength(0);
}
/**
@@ -2218,6 +2240,9 @@ public class CASImpl extends AbstractCas
*/
void setFeatureValueNotJournaled(int addr, int feat, int val) {
this.getHeap().heap[(addr + this.svd.casMetadata.featureOffset[feat])] = val;
+ if (traceFSs) {
+ traceFSfeat(ll_getFSForRef(addr), (FeatureImpl) getTypeSystemImpl().ll_getFeatureForCode(feat), val);
+ }
}
public void setStringValue(int addr, int feat, String s) {
@@ -3263,6 +3288,9 @@ public class CASImpl extends AbstractCas
public final int ll_createFS(int typeCode) {
final int fsAddr = this.getHeap().add(this.svd.casMetadata.fsSpaceReq[typeCode], typeCode);
svd.cache_not_in_index = fsAddr;
+ if (traceFSs) {
+ traceFSCreate((FeatureStructureImpl) ll_getFSForRef(fsAddr));
+ }
return fsAddr;
}
@@ -3329,6 +3357,9 @@ public class CASImpl extends AbstractCas
final int addr = this.getHeap().add(arrayContentOffset + arrayLength, typeCode);
this.getHeap().heap[(addr + arrayLengthFeatOffset)] = arrayLength;
svd.cache_not_in_index = addr;
+ if (traceFSs) {
+ traceFSCreate((FeatureStructureImpl) ll_getFSForRef(addr));
+ }
return addr;
}
@@ -3336,6 +3367,9 @@ public class CASImpl extends AbstractCas
final int addr = this.getHeap().add(arrayContentOffset + 1, typeCode);
this.getHeap().heap[(addr + arrayLengthFeatOffset)] = arrayLength;
svd.cache_not_in_index = addr;
+ if (traceFSs) {
+ traceFSCreate((FeatureStructureImpl) ll_getFSForRef(addr));
+ }
return addr;
}
@@ -5153,4 +5187,104 @@ public class CASImpl extends AbstractCas
int getCasId() {
return svd.casId;
}
+
+ /******************************************
+ * DEBUGGING and TRACING
+ *
+ ******************************************/
+
+ void traceFSCreate(FeatureStructureImpl fs) {
+ StringBuilder b = svd.traceFScreationSb;
+ if (b.length() > 0) {
+ traceFSflush();
+ }
+ traceFSfs(fs);
+ svd.traceFSisCreate = true;
+ if (fs.getType().isArray()) {
+ int arraySize = ll_getArraySize(((FeatureStructureImpl)fs).getAddress());
+ b.append(" l:").append(arraySize);
+ }
+ if (fs.getAddress() > 190000 && fs.getAddress() < 200000 && fs.getType().getShortName().equals("Passage")) {
+ traceOut.println("Passage callback: " + MiscImpl.getCallers(3, 10));
+ }
+ }
+
+ void traceFSfs(FeatureStructureImpl fs) {
+ StringBuilder b = svd.traceFScreationSb;
+ svd.traceFSid = fs.getAddress();
+ b.append("c:").append(String.format("%-3d", getCasId()));
+ String viewName = fs.getCAS().getViewName();
+ if (null == viewName) {
+ viewName = "base";
+ }
+ b.append(" v:").append(MiscImpl.elide(viewName, 8));
+ b.append(" i:").append(String.format("%-5s", fs.getAddress()));
+ b.append(" t:").append(MiscImpl.elide(fs.getType().getShortName(), 10));
+ }
+
+ void traceFSfeat(FeatureStructure fs, FeatureImpl fi, int v) {
+ StringBuilder b = svd.traceFScreationSb;
+// assert (b.length() > 0); // may be 0 if fs created via deserialization
+ FeatureStructureImpl fsi = (FeatureStructureImpl) fs;
+ if (fsi.getAddress() != svd.traceFSid) {
+ traceFSfeatUpdate(fsi);
+ }
+ String fn = fi.getShortName();
+ String fv = getTraceRepOfObj(fi, v);
+ int i_v = Math.max(0, 10 - fn.length());
+ int i_n = Math.max(0, 10 - fv.length());
+
+ fn = MiscImpl.elide(fn, 10 + i_n, false);
+ fv = MiscImpl.elide(fv, 10 + i_v, false);
+
+ // debug
+// if (!svd.traceFSisCreate && fn.equals("uninf.dWord") && fv.equals("XsgTokens")) {
+// traceOut.println("debug uninf.dWord:XsgTokens: updated by " + MiscImpl.getCallers(3, 10));
+// }
+ b.append(' ').append(MiscImpl.elide(fn + ':' + fv, 21));
+ }
+
+ private String getTraceRepOfObj( FeatureImpl fi, int v) {
+ TypeImpl range = (TypeImpl) fi.getRange();
+ int rangeCode = range.getCode();
+ if (ll_isRefType(rangeCode)) {
+ if (v == 0) return "null";
+// FeatureStructureImpl fs = ll_getFSForRef(v);
+ Type type = getTypeSystemImpl().ll_getTypeForCode(getTypeCode(v));
+ return ((type == null) ? "unknwn"
+ : MiscImpl.elide(type.getShortName(), 5, false))
+ + ':' + v;
+ } else if (isStringType(rangeCode)){
+ String s = this.getStringHeap().getStringForCode(v);
+ s = MiscImpl.elide(s, 50, false);
+ return MiscImpl.replaceWhiteSpace(s, "_");
+ } else if (isFloatType(rangeCode)) {
+ return Float.toString(int2float(v));
+ } else if (isBooleanType(rangeCode)) {
+ return (v == 1) ? "true" : "false";
+ } else if (isLongType(rangeCode)) {
+ return Long.toString(this.getLongHeap().getHeapValue(v));
+ } else if (isDoubleType(rangeCode)) {
+ return Double.toString(long2double(this.getLongHeap().getHeapValue(v)));
+ } else {
+ return Integer.toString(v);
+ }
+ }
+
+ void traceFSfeatUpdate(FeatureStructureImpl fs) {
+ StringBuilder b = traceFSflush();
+ traceFSfs(fs);
+ svd.traceFSisCreate = false;
+ }
+
+ StringBuilder traceFSflush() {
+ StringBuilder b = svd.traceFScreationSb;
+// assert (b.length() > 0); // may be 0 if fs created via deserialization
+ if (b.length() > 0) {
+ traceOut.println((svd.traceFSisCreate ? "cr: " :
+ "up: ") + b);
+ b.setLength(0);
+ }
+ return b;
+ }
}
Copied: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/MiscImpl.java (from r1739756, uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/util/impl/MiscImpl.java)
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/MiscImpl.java?p2=uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/MiscImpl.java&p1=uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/util/impl/MiscImpl.java&r1=1739756&r2=1739757&rev=1739757&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/util/impl/MiscImpl.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/MiscImpl.java Mon Apr 18 13:08:59 2016
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.uima.util.impl;
+package org.apache.uima.internal.util;
import java.util.concurrent.Callable;
import java.util.regex.Pattern;