From dd998eff8268e5a346b075bb27b6b8f086a3c99f Mon Sep 17 00:00:00 2001 From: Claudio Maggioni Date: Wed, 3 Jan 2024 12:51:13 +0100 Subject: [PATCH] completed lab 6 --- .gitignore | 1 + README.md | 64 ++- .../inf/sp/dbi/agent/ClassTransformer.java | 35 +- .../src/ch/usi/inf/sp/dbi/Application.java | 40 +- hs_err_pid5684.log | 490 ------------------ .../ch/usi/inf/sp/dbi/profiler/CCTNode.java | 62 +++ .../src/ch/usi/inf/sp/dbi/profiler/Frame.java | 35 ++ .../ch/usi/inf/sp/dbi/profiler/IFrame.java | 6 + .../ch/usi/inf/sp/dbi/profiler/Profiler.java | 106 ++-- .../ch/usi/inf/sp/dbi/profiler/RootFrame.java | 13 + 10 files changed, 244 insertions(+), 608 deletions(-) delete mode 100644 hs_err_pid5684.log create mode 100644 profiler/src/ch/usi/inf/sp/dbi/profiler/CCTNode.java create mode 100644 profiler/src/ch/usi/inf/sp/dbi/profiler/Frame.java create mode 100644 profiler/src/ch/usi/inf/sp/dbi/profiler/IFrame.java create mode 100644 profiler/src/ch/usi/inf/sp/dbi/profiler/RootFrame.java diff --git a/.gitignore b/.gitignore index 2a8dd26..2df73dd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ +java-home-path.txt /out/ /agent/agent.jar diff --git a/README.md b/README.md index 25c152d..9b6ccc8 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,39 @@ -## Environment +# Lab 6 - Software Performance 2023 + +This is Lab 6 of the **Software Performance** course at USI. + +## Submission Info + +| Property | Value | +|------------|----------| +| First Name | Claudio | +| Last Name | Maggioni | + +## Setup + +To run this application, Java 1.8 is required. The following commands assume that the file `java-home-path.txt` contains +an absolute path pointing to a valid `JAVA_HOME` for Java 1.8. To automatically do this on macOS run: ```shell -export JAVA_HOME=`/usr/libexec/java_home -v 1.8.0_345` -export PATH="${JAVA_HOME}/bin:$PATH" +/usr/libexec/java_home -V ``` -## Agent - -### Compile the agent as JAR +to list all installed JVMs. Then run this command to populate `java-home-path.txt`: ```shell -export JAVA_HOME=`/usr/libexec/java_home -v 1.8.0_345` +/usr/libexec/java_home -v $VERSION > java-home-path.txt +``` + +Here `$VERSION` is the JVM version number for the Java 1.8 JVM chosen from the previous list. + +The following sections explain how to compile each module of this project. The shell blocks may be executed with +IntelliJ IDEA's _RunMarkdown_ feature by opening this file and clicking on the green run button to the side of each +shell block. + +## How to compile the agent as JAR + +```shell +export JAVA_HOME=`cat java-home-path.txt` export PATH="${JAVA_HOME}/bin:$PATH" cd agent/src find . -name '*.java' -print -exec javac -cp ../lib/\*:. -d ../../out/production/agent \{\} \; @@ -19,34 +42,37 @@ jar cfm agent.jar manifest.txt -C ../out/production/agent . jar tf agent.jar ``` -## Profiler - -### Compile the profiler +## How to compile the profiler classes ```shell -export JAVA_HOME=`/usr/libexec/java_home -v 1.8.0_345` +export JAVA_HOME=`cat java-home-path.txt` export PATH="${JAVA_HOME}/bin:$PATH" cd profiler/src find . -name '*.java' -print -exec javac -d ../../out/production/profiler \{\} \; cd ../.. ``` -## Application - -### Compile the application +## How to compile the application classes ```shell -export JAVA_HOME=`/usr/libexec/java_home -v 1.8.0_345` +export JAVA_HOME=`cat java-home-path.txt` export PATH="${JAVA_HOME}/bin:$PATH" cd application/src find . -name '*.java' -print -exec javac -d ../../out/production/application \{\} \; cd ../.. ``` -### Run application with agent +### Running + +To run the application compile the agent, the profiler and the application and then execute: ```shell -export JAVA_HOME=`/usr/libexec/java_home -v 1.8.0_345` +export JAVA_HOME=`cat java-home-path.txt` export PATH="${JAVA_HOME}/bin:$PATH" -java -javaagent:agent/agent.jar=hello -cp out/production/application -Xbootclasspath/p:out/production/profiler ch.usi.inf.sp.dbi.Application -``` \ No newline at end of file +java -javaagent:agent/agent.jar=hello \ + -cp out/production/application \ + -Xbootclasspath/p:out/production/profiler \ + ch.usi.inf.sp.dbi.Application +``` + +The output of this command will include the program output and the calling context tree for the application execution. \ No newline at end of file diff --git a/agent/src/ch/usi/inf/sp/dbi/agent/ClassTransformer.java b/agent/src/ch/usi/inf/sp/dbi/agent/ClassTransformer.java index b9c4ad8..bf4b022 100644 --- a/agent/src/ch/usi/inf/sp/dbi/agent/ClassTransformer.java +++ b/agent/src/ch/usi/inf/sp/dbi/agent/ClassTransformer.java @@ -6,11 +6,21 @@ import org.objectweb.asm.Opcodes; import org.objectweb.asm.tree.*; import java.lang.instrument.ClassFileTransformer; -import java.lang.instrument.IllegalClassFormatException; import java.security.ProtectionDomain; -import java.util.Set; +import java.util.Arrays; +import java.util.List; public class ClassTransformer implements ClassFileTransformer { + + private static final List classBlacklist = Arrays.asList( + "java/", + "javax/", + "sun/", + "com/sun/", + "jdk/", + "ch/usi/inf/sp/dbi/profiler/" + ); + public static byte[] instrument(final byte[] bytecode) { final ClassReader cr = new ClassReader(bytecode); final ClassNode cn = new ClassNode(); @@ -28,7 +38,6 @@ public class ClassTransformer implements ClassFileTransformer { instrumentEntry(cn, mn); instrumentExit(cn, mn); } - } private static void instrumentEntry(ClassNode cn, MethodNode mn) { @@ -67,26 +76,22 @@ public class ClassTransformer implements ClassFileTransformer { String className, Class classBeingRedefined, ProtectionDomain protectionDomain, - byte[] classfileBuffer) throws IllegalClassFormatException { -// className.startsWith("java/") || -// className.startsWith("javax/") || -// className.startsWith("sun/") || -// className.startsWith("com/sun/") || -// className.startsWith("jdk/") || + byte[] classfileBuffer) { - if (!className.startsWith("ch/usi/inf/sp/dbi/") || - className.startsWith("ch/usi/inf/sp/dbi/agent/") || - className.startsWith("ch/usi/inf/sp/dbi/profiler/")) { - System.out.println("Skipping class <" + loader + ", " + className + ">"); + if (classBlacklist.stream().anyMatch(className::startsWith)) { + System.out.printf("Skipping class <%s, %s> (in blacklist)%n", loader, className); return classfileBuffer; } - System.out.println("About to transform class <" + loader + ", " + className + ">"); + System.out.printf("About to transform class <%s, %s>%n", loader, className); + try { return instrument(classfileBuffer); } catch (Throwable e) { + System.out.printf("Error instrumenting class <%s>: %s%n", className, e.getMessage()); e.printStackTrace(System.err); - return classfileBuffer; + + return classfileBuffer; // return non-instrumented class } } } diff --git a/application/src/ch/usi/inf/sp/dbi/Application.java b/application/src/ch/usi/inf/sp/dbi/Application.java index c8e8eac..5cd71fe 100644 --- a/application/src/ch/usi/inf/sp/dbi/Application.java +++ b/application/src/ch/usi/inf/sp/dbi/Application.java @@ -2,17 +2,43 @@ package ch.usi.inf.sp.dbi; public class Application { public static void main(String... args) { - fib(20); + fib(5); + final Parent[] children = new Parent[] {new Child(), new Child2()}; } public static int fib(int n) { - System.out.println("fib(" + n + ")"); - if (n == 0 || n == 1) { - return n; + if (n == 0) { + return return0(); + } else if (n == 1) { + return return1(); } else { - int i = fib(n-1) + fib(n-2); - System.out.println("fib(" + n + ") = " + i); - return i; + return fib(n - 1) + fib(n - 2); + } + } + + private static int return1() { + return 1; + } + + private static int return0() { + return 0; + } + + static class Parent { + static { + fib(1); + } + } + + static class Child extends Parent { + static { + fib(3); + } + } + + static class Child2 extends Parent { + static { + fib(2); } } } diff --git a/hs_err_pid5684.log b/hs_err_pid5684.log deleted file mode 100644 index 4f942c1..0000000 --- a/hs_err_pid5684.log +++ /dev/null @@ -1,490 +0,0 @@ -# -# A fatal error has been detected by the Java Runtime Environment: -# -# Internal Error (exceptions.cpp:471), pid=5684, tid=0x0000000000001703 -# fatal error: ExceptionMark destructor expects no pending exceptions -# -# JRE version: OpenJDK Runtime Environment (8.0_345-b01) (build 1.8.0_345-b01) -# Java VM: OpenJDK 64-Bit Server VM (25.345-b01 mixed mode bsd-amd64 compressed oops) -# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again -# -# If you would like to submit a bug report, please visit: -# https://github.com/adoptium/adoptium-support/issues -# - ---------------- T H R E A D --------------- - -Current thread (0x00007f77bc80a800): JavaThread "main" [_thread_in_vm, id=5891, stack(0x0000700002fed000,0x00007000030ed000)] - -Stack: [0x0000700002fed000,0x00007000030ed000], sp=0x00007000030ecc50, free space=1023k -Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) -V [libjvm.dylib+0x59ba9e] VMError::report_and_die()+0x440 -V [libjvm.dylib+0x1d2b84] report_vm_error(char const*, int, char const*, char const*)+0x55 -V [libjvm.dylib+0x22c3e9] ExceptionMark::~ExceptionMark()+0x71 -V [libjvm.dylib+0x562cd4] Threads::create_vm(JavaVMInitArgs*, bool*)+0xe2e -V [libjvm.dylib+0x313f1d] JNI_CreateJavaVM+0x5d -C [java+0x24be] JavaMain+0x10b -C [libsystem_pthread.dylib+0x6202] _pthread_start+0x63 -C [libsystem_pthread.dylib+0x1bab] thread_start+0xf -C 0x0000000000000000 - - ---------------- P R O C E S S --------------- - -Java Threads: ( => current thread ) - 0x00007f77ba811000 JavaThread "C1 CompilerThread3" daemon [_thread_blocked, id=22019, stack(0x0000700004329000,0x0000700004429000)] - 0x00007f77bc851000 JavaThread "C2 CompilerThread2" daemon [_thread_blocked, id=21763, stack(0x0000700004226000,0x0000700004326000)] - 0x00007f77bc80e800 JavaThread "C2 CompilerThread1" daemon [_thread_blocked, id=19203, stack(0x0000700004123000,0x0000700004223000)] - 0x00007f77bc013000 JavaThread "C2 CompilerThread0" daemon [_thread_blocked, id=19715, stack(0x0000700004020000,0x0000700004120000)] - 0x00007f77bc00c000 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=18435, stack(0x0000700003f1d000,0x000070000401d000)] - 0x00007f77bb82e800 JavaThread "Finalizer" daemon [_thread_blocked, id=16643, stack(0x0000700003d14000,0x0000700003e14000)] - 0x00007f77bb82b800 JavaThread "Reference Handler" daemon [_thread_blocked, id=13315, stack(0x0000700003c11000,0x0000700003d11000)] -=>0x00007f77bc80a800 JavaThread "main" [_thread_in_vm, id=5891, stack(0x0000700002fed000,0x00007000030ed000)] - -Other Threads: - 0x00007f77bb827000 VMThread [stack: 0x0000700003b0e000,0x0000700003c0e000] [id=13571] - -VM state:not at safepoint (normal execution) - -VM Mutex/Monitor currently owned by a thread: None - -heap address: 0x00000006c0000000, size: 4096 MB, Compressed Oops mode: Zero based, Oop shift amount: 3 -Narrow klass base: 0x0000000000000000, Narrow klass shift: 3 -Compressed class space size: 1073741824 Address: 0x00000007c0000000 - -Heap: - PSYoungGen total 76288K, used 6610K [0x000000076ab00000, 0x0000000770000000, 0x00000007c0000000) - eden space 65536K, 10% used [0x000000076ab00000,0x000000076b174b90,0x000000076eb00000) - from space 10752K, 0% used [0x000000076f580000,0x000000076f580000,0x0000000770000000) - to space 10752K, 0% used [0x000000076eb00000,0x000000076eb00000,0x000000076f580000) - ParOldGen total 175104K, used 0K [0x00000006c0000000, 0x00000006cab00000, 0x000000076ab00000) - object space 175104K, 0% used [0x00000006c0000000,0x00000006c0000000,0x00000006cab00000) - Metaspace used 3336K, capacity 4920K, committed 5120K, reserved 1056768K - class space used 343K, capacity 424K, committed 512K, reserved 1048576K - -Card table byte_map: [0x0000000104301000,0x0000000104b02000] byte_map_base: 0x0000000100d01000 - -Marking Bits: (ParMarkBitMap*) 0x000000010544cf08 - Begin Bits: [0x00000001150bd000, 0x00000001190bd000) - End Bits: [0x00000001190bd000, 0x000000011d0bd000) - -Polling page: 0x0000000103a00000 - -CodeCache: size=245760Kb used=1258Kb max_used=1258Kb free=244501Kb - bounds [0x0000000105b67000, 0x0000000105dd7000, 0x0000000114b67000] - total_blobs=364 nmethods=94 adapters=186 - compilation: enabled - -Compilation events (10 events): -Event: 0.135 Thread 0x00007f77ba811000 nmethod 92 0x0000000105c97690 code [0x0000000105c97860, 0x0000000105c98308] -Event: 0.135 Thread 0x00007f77ba811000 94 3 org.objectweb.asm.SymbolTable::addType (81 bytes) -Event: 0.136 Thread 0x00007f77ba811000 nmethod 94 0x0000000105c9a6d0 code [0x0000000105c9a8a0, 0x0000000105c9afb8] -Event: 0.136 Thread 0x00007f77ba811000 85 3 org.objectweb.asm.MethodWriter::addSuccessorToCurrentBasicBlock (24 bytes) -Event: 0.136 Thread 0x00007f77ba811000 nmethod 85 0x0000000105c9b310 code [0x0000000105c9b480, 0x0000000105c9b750] -Event: 0.136 Thread 0x00007f77ba811000 55 1 org.objectweb.asm.SymbolTable::getMajorVersion (5 bytes) -Event: 0.136 Thread 0x00007f77ba811000 nmethod 55 0x0000000105c973d0 code [0x0000000105c97520, 0x0000000105c97630] -Event: 0.136 Thread 0x00007f77ba811000 90 3 org.objectweb.asm.Frame::pop (42 bytes) -Event: 0.136 Thread 0x00007f77ba811000 nmethod 90 0x0000000105c9b890 code [0x0000000105c9ba00, 0x0000000105c9bbf0] -Event: 0.136 Thread 0x00007f77ba811000 89 3 org.objectweb.asm.Frame::getAbstractTypeFromDescriptor (415 bytes) - -GC Heap History (0 events): -No events - -Deoptimization events (1 events): -Event: 0.135 Thread 0x00007f77bc80a800 Uncommon trap: reason=unstable_if action=reinterpret pc=0x0000000105c9358c method=org.objectweb.asm.Frame.merge(Lorg/objectweb/asm/SymbolTable;I[II)Z @ 55 - -Classes redefined (0 events): -No events - -Internal exceptions (5 events): -Event: 0.026 Thread 0x00007f77bc80a800 Exception (0x000000076ab07cc0) thrown at [/Users/jenkins/workspace/build-scripts/jobs/jdk8u/jdk8u-mac-x64-temur -Event: 0.026 Thread 0x00007f77bc80a800 Exception (0x000000076ab07fa8) thrown at [/Users/jenkins/workspace/build-scripts/jobs/jdk8u/jdk8u-mac-x64-temurin/workspace/build -Event: 0.136 Thread 0x00007f77bc80a800 Exception (0x000000076b02d3c8) thrown at [/Users/jenkins/workspace/build-scripts/jobs/jdk8u/jdk8u-mac-x64-temurin/workspace/build/src/hotspot/src/share/vm/classfile/systemDictionary -Event: 0.136 Thread 0x00007f77bc80a800 Exception (0x000000076b02d3c8) thrown at [/Users/jenkins/workspace/build-scripts/jobs/jdk8u/jdk8u-mac-x64-temurin/workspace/build/src/hotspot/src/share/vm/oops/instanceKlass.cpp, line 964] -Event: 0.136 Thread 0x00007f77bc80a800 Exception (0x000000076b02d3c8) thrown at [/Users/jenkins/workspace/build-scripts/jobs/jdk8u/jdk8u-mac-x64-temurin/workspace/build/src/hotspot/src/share/vm/oops/instanceKlass.cpp, line 964] - -Events (10 events): -Event: 0.118 Thread 0x00007f77ba811000 Thread added: 0x00007f77ba811000 -Event: 0.118 loading class java/lang/invoke/MethodHandleImpl -Event: 0.119 loading class org/objectweb/asm/tree/TryCatchBlockNode -Event: 0.119 loading class org/objectweb/asm/tree/TryCatchBlockNode done -Event: 0.135 Thread 0x00007f77bc80a800 Uncommon trap: trap_request=0xffffff65 fr.pc=0x0000000105c9358c -Event: 0.135 Thread 0x00007f77bc80a800 DEOPT PACKING pc=0x0000000105c9358c sp=0x00007000030eaa30 -Event: 0.135 Thread 0x00007f77bc80a800 DEOPT UNPACKING pc=0x0000000105bac47a sp=0x00007000030ea9c0 mode 2 -Event: 0.136 loading class java/lang/invoke/MethodHandleImpl done -Event: 0.136 loading class ch/usi/inf/sp/dbi/profiler/Profiler -Event: 0.136 loading class ch/usi/inf/sp/dbi/profiler/Profiler done - - -Dynamic libraries: -0x00007ff81ea17000 /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa -0x00007ff8076b7000 /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit -0x00007ff80a914000 /System/Library/Frameworks/CoreData.framework/Versions/A/CoreData -0x00007ff805023000 /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation -0x00007ff810e78000 /usr/lib/libSystem.B.dylib -0x00007ff808abd000 /System/Library/PrivateFrameworks/UIFoundation.framework/Versions/A/UIFoundation -0x00007ffb0edf5000 /System/Library/PrivateFrameworks/CollectionViewCore.framework/Versions/A/CollectionViewCore -0x00007ff818350000 /System/Library/PrivateFrameworks/RemoteViewServices.framework/Versions/A/RemoteViewServices -0x00007ff80ec07000 /System/Library/PrivateFrameworks/XCTTargetBootstrap.framework/Versions/A/XCTTargetBootstrap -0x00007ff81380c000 /System/Library/PrivateFrameworks/InternationalSupport.framework/Versions/A/InternationalSupport -0x00007ff813895000 /System/Library/PrivateFrameworks/UserActivity.framework/Versions/A/UserActivity -0x00007ffc10131000 /System/Library/PrivateFrameworks/WindowManagement.framework/Versions/A/WindowManagement -0x00007ff804cdc000 /System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration -0x00007ff812bc3000 /usr/lib/libspindump.dylib -0x00007ff808c99000 /System/Library/Frameworks/UniformTypeIdentifiers.framework/Versions/A/UniformTypeIdentifiers -0x00007ff80cc4d000 /usr/lib/libapp_launch_measurement.dylib -0x00007ff80bdc5000 /System/Library/PrivateFrameworks/CoreAnalytics.framework/Versions/A/CoreAnalytics -0x00007ff80cc50000 /System/Library/PrivateFrameworks/CoreAutoLayout.framework/Versions/A/CoreAutoLayout -0x00007ff80e47c000 /System/Library/Frameworks/Metal.framework/Versions/A/Metal -0x00007ff80f3ce000 /usr/lib/liblangid.dylib -0x00007ff80ec0c000 /System/Library/PrivateFrameworks/CoreSVG.framework/Versions/A/CoreSVG -0x00007ff80964f000 /System/Library/PrivateFrameworks/SkyLight.framework/Versions/A/SkyLight -0x00007ff809aa3000 /System/Library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics -0x00007ff818aa5000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate -0x00007ff812a27000 /System/Library/PrivateFrameworks/IconServices.framework/Versions/A/IconServices -0x00007ff80e45d000 /System/Library/Frameworks/IOSurface.framework/Versions/A/IOSurface -0x00007ff80bdf1000 /usr/lib/libDiagnosticMessagesClient.dylib -0x00007ff810d8d000 /usr/lib/libz.1.dylib -0x00007ff81c41f000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices -0x00007ff80ebf3000 /System/Library/PrivateFrameworks/DFRFoundation.framework/Versions/A/DFRFoundation -0x00007ff806f74000 /usr/lib/libicucore.A.dylib -0x00007ff8147de000 /System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox -0x00007ff813818000 /System/Library/PrivateFrameworks/DataDetectorsCore.framework/Versions/A/DataDetectorsCore -0x00007ff90d15c000 /System/Library/PrivateFrameworks/TextInput.framework/Versions/A/TextInput -0x00007ff8095a9000 /usr/lib/libMobileGestalt.dylib -0x00007ff80e957000 /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox -0x00007ff80c588000 /System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore -0x00007ff806bd7000 /System/Library/Frameworks/Security.framework/Versions/A/Security -0x00007ff818388000 /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SpeechRecognition.framework/Versions/A/SpeechRecognition -0x00007ff80c97c000 /System/Library/PrivateFrameworks/CoreUI.framework/Versions/A/CoreUI -0x00007ff8064c9000 /System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio -0x00007ff80bed1000 /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration -0x00007ff812ff9000 /System/Library/PrivateFrameworks/MultitouchSupport.framework/Versions/A/MultitouchSupport -0x00007ff8095a8000 /usr/lib/libenergytrace.dylib -0x00007ff822d9f000 /System/Library/PrivateFrameworks/RenderBox.framework/Versions/A/RenderBox -0x00007ff807590000 /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit -0x00007ff8187a0000 /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices -0x00007ff80cbe4000 /System/Library/PrivateFrameworks/PerformanceAnalysis.framework/Versions/A/PerformanceAnalysis -0x00007ffa1f5dd000 /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL -0x00007ff80cc99000 /usr/lib/libxml2.2.dylib -0x00007ff8101c7000 /System/Library/PrivateFrameworks/MobileKeyBag.framework/Versions/A/MobileKeyBag -0x00007ff803c3b000 /usr/lib/libobjc.A.dylib -0x00007ff803f33000 /usr/lib/libc++.1.dylib -0x00007ff818717000 /System/Library/Frameworks/Accessibility.framework/Versions/A/Accessibility -0x00007ff80a25c000 /System/Library/Frameworks/ColorSync.framework/Versions/A/ColorSync -0x00007ff80406b000 /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation -0x00007ff80ef74000 /System/Library/Frameworks/CoreImage.framework/Versions/A/CoreImage -0x00007ff8062c4000 /System/Library/Frameworks/CoreText.framework/Versions/A/CoreText -0x00007ffb053e6000 /System/Library/Frameworks/CoreTransferable.framework/Versions/A/CoreTransferable -0x00007ffb0582f000 /System/Library/Frameworks/DeveloperToolsSupport.framework/Versions/A/DeveloperToolsSupport -0x00007ff80ec45000 /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO -0x00007ffb09de7000 /System/Library/Frameworks/Symbols.framework/Versions/A/Symbols -0x00007ff810e7e000 /System/Library/PrivateFrameworks/SoftLinking.framework/Versions/A/SoftLinking -0x00007ff814256000 /usr/lib/swift/libswiftCore.dylib -0x00007ff909e25000 /usr/lib/swift/libswiftCoreFoundation.dylib -0x00007ff907d55000 /usr/lib/swift/libswiftCoreGraphics.dylib -0x00007ff909e62000 /usr/lib/swift/libswiftCoreImage.dylib -0x00007ff907d5c000 /usr/lib/swift/libswiftDarwin.dylib -0x00007ff81a10f000 /usr/lib/swift/libswiftDispatch.dylib -0x00007ff909e63000 /usr/lib/swift/libswiftIOKit.dylib -0x00007ff915e23000 /usr/lib/swift/libswiftMetal.dylib -0x00007ff922880000 /usr/lib/swift/libswiftOSLog.dylib -0x00007ff81c881000 /usr/lib/swift/libswiftObjectiveC.dylib -0x00007ff919a28000 /usr/lib/swift/libswiftQuartzCore.dylib -0x00007ff91da9b000 /usr/lib/swift/libswiftUniformTypeIdentifiers.dylib -0x00007ff909e35000 /usr/lib/swift/libswiftXPC.dylib -0x00007ffc1883d000 /usr/lib/swift/libswift_Concurrency.dylib -0x00007ff81c885000 /usr/lib/swift/libswiftos.dylib -0x00007ff90d0be000 /usr/lib/swift/libswiftsimd.dylib -0x00007ff811016000 /usr/lib/libcompression.dylib -0x00007ff81374c000 /System/Library/PrivateFrameworks/TextureIO.framework/Versions/A/TextureIO -0x00007ff8126cd000 /usr/lib/libate.dylib -0x00007ff810e72000 /usr/lib/system/libcache.dylib -0x00007ff810e2d000 /usr/lib/system/libcommonCrypto.dylib -0x00007ff810e56000 /usr/lib/system/libcompiler_rt.dylib -0x00007ff810e4c000 /usr/lib/system/libcopyfile.dylib -0x00007ff803d7c000 /usr/lib/system/libcorecrypto.dylib -0x00007ff803e61000 /usr/lib/system/libdispatch.dylib -0x00007ff804012000 /usr/lib/system/libdyld.dylib -0x00007ff810e68000 /usr/lib/system/libkeymgr.dylib -0x00007ff810e09000 /usr/lib/system/libmacho.dylib -0x00007ff8102a1000 /usr/lib/system/libquarantine.dylib -0x00007ff810e66000 /usr/lib/system/libremovefile.dylib -0x00007ff80961a000 /usr/lib/system/libsystem_asl.dylib -0x00007ff803d1a000 /usr/lib/system/libsystem_blocks.dylib -0x00007ff803eab000 /usr/lib/system/libsystem_c.dylib -0x00007ff810e5e000 /usr/lib/system/libsystem_collections.dylib -0x00007ff80f3bf000 /usr/lib/system/libsystem_configuration.dylib -0x00007ff80e434000 /usr/lib/system/libsystem_containermanager.dylib -0x00007ff810a66000 /usr/lib/system/libsystem_coreservices.dylib -0x00007ff80720a000 /usr/lib/system/libsystem_darwin.dylib -0x00007ffc18b59000 /usr/lib/system/libsystem_darwindirectory.dylib -0x00007ff810e69000 /usr/lib/system/libsystem_dnssd.dylib -0x00007ff803ea8000 /usr/lib/system/libsystem_featureflags.dylib -0x00007ff804040000 /usr/lib/system/libsystem_info.dylib -0x00007ff810da1000 /usr/lib/system/libsystem_m.dylib -0x00007ff803e28000 /usr/lib/system/libsystem_malloc.dylib -0x00007ff809590000 /usr/lib/system/libsystem_networkextension.dylib -0x00007ff807653000 /usr/lib/system/libsystem_notify.dylib -0x00007ff80f3c3000 /usr/lib/system/libsystem_sandbox.dylib -0x00007ff810e63000 /usr/lib/system/libsystem_secinit.dylib -0x00007ff803fcb000 /usr/lib/system/libsystem_kernel.dylib -0x00007ff804036000 /usr/lib/system/libsystem_platform.dylib -0x00007ff804006000 /usr/lib/system/libsystem_pthread.dylib -0x00007ff80b191000 /usr/lib/system/libsystem_symptoms.dylib -0x00007ff803d62000 /usr/lib/system/libsystem_trace.dylib -0x00007ff810e39000 /usr/lib/system/libunwind.dylib -0x00007ff803d1e000 /usr/lib/system/libxpc.dylib -0x00007ff803fb2000 /usr/lib/libc++abi.dylib -0x00007ff810e44000 /usr/lib/liboah.dylib -0x00007ff81247c000 /usr/lib/liblzma.5.dylib -0x00007ff810e7a000 /usr/lib/libfakelink.dylib -0x00007ff8091e3000 /System/Library/Frameworks/CFNetwork.framework/Versions/A/CFNetwork -0x00007ff810ecc000 /usr/lib/libarchive.2.dylib -0x00007ff816600000 /System/Library/Frameworks/Combine.framework/Versions/A/Combine -0x00007ffb0ee0a000 /System/Library/PrivateFrameworks/CollectionsInternal.framework/Versions/A/CollectionsInternal -0x00007ffc040bb000 /System/Library/PrivateFrameworks/ReflectionInternal.framework/Versions/A/ReflectionInternal -0x00007ffc0469c000 /System/Library/PrivateFrameworks/RuntimeInternal.framework/Versions/A/RuntimeInternal -0x00007ffc18978000 /usr/lib/swift/libswift_StringProcessing.dylib -0x00007ff80750f000 /System/Library/PrivateFrameworks/CoreServicesInternal.framework/Versions/A/CoreServicesInternal -0x00007ff8102c8000 /usr/lib/libbsm.0.dylib -0x00007ff810e11000 /usr/lib/system/libkxld.dylib -0x00007ff80cc18000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versions/A/FSEvents -0x00007ff807215000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore -0x00007ff80be39000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata -0x00007ff810a6c000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices -0x00007ff810f55000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit -0x00007ff80b117000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE -0x00007ff804506000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices -0x00007ff81242d000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices -0x00007ff80cc25000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SharedFileList.framework/Versions/A/SharedFileList -0x00007ff810fdf000 /usr/lib/libapple_nghttp2.dylib -0x00007ff80ada7000 /usr/lib/libsqlite3.dylib -0x00007ff80b199000 /System/Library/Frameworks/Network.framework/Versions/A/Network -0x00007ffc171dd000 /usr/lib/libCoreEntitlements.dylib -0x00007ffb1fbb1000 /System/Library/PrivateFrameworks/MessageSecurity.framework/Versions/A/MessageSecurity -0x00007ff80ad8e000 /System/Library/PrivateFrameworks/ProtocolBuffer.framework/Versions/A/ProtocolBuffer -0x00007ff810989000 /System/Library/PrivateFrameworks/AppleFSCompression.framework/Versions/A/AppleFSCompression -0x00007ff8102b0000 /usr/lib/libcoretls.dylib -0x00007ff812495000 /usr/lib/libcoretls_cfhelpers.dylib -0x00007ff811010000 /usr/lib/libpam.2.dylib -0x00007ff81250d000 /usr/lib/libxar.1.dylib -0x00007ff812a00000 /usr/lib/libheimdal-asn1.dylib -0x00007ff8091e2000 /usr/lib/libnetwork.dylib -0x00007ff810e7f000 /usr/lib/libpcap.A.dylib -0x00007ff80b187000 /usr/lib/libdns_services.dylib -0x00007ff80f3ca000 /System/Library/PrivateFrameworks/AppleSystemInfo.framework/Versions/A/AppleSystemInfo -0x00007ff80ffc9000 /System/Library/PrivateFrameworks/IOMobileFramebuffer.framework/Versions/A/IOMobileFramebuffer -0x00007ffc188c4000 /usr/lib/swift/libswift_RegexParser.dylib -0x00007ff810a57000 /usr/lib/libbz2.1.0.dylib -0x00007ff8102a4000 /usr/lib/libCheckFix.dylib -0x00007ff809631000 /System/Library/PrivateFrameworks/TCC.framework/Versions/A/TCC -0x00007ff80f3d0000 /System/Library/PrivateFrameworks/CoreNLP.framework/Versions/A/CoreNLP -0x00007ff80bdf3000 /System/Library/PrivateFrameworks/MetadataUtilities.framework/Versions/A/MetadataUtilities -0x00007ff8102d8000 /usr/lib/libmecab.dylib -0x00007ff804d63000 /usr/lib/libCRFSuite.dylib -0x00007ff810331000 /usr/lib/libgermantok.dylib -0x00007ff810fbb000 /usr/lib/libThaiTokenizer.dylib -0x00007ff80bed9000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vImage.framework/Versions/A/vImage -0x00007ff818773000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/vecLib -0x00007ff81254f000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvMisc.dylib -0x00007ff80fdb9000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvDSP.dylib -0x00007ff80490c000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib -0x00007ff8110f6000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib -0x00007ff810334000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLinearAlgebra.dylib -0x00007ff810ffa000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libSparseBLAS.dylib -0x00007ff8110f0000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libQuadrature.dylib -0x00007ff80f4df000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBNNS.dylib -0x00007ff804c64000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libSparse.dylib -0x00007ffb1e4ff000 /System/Library/PrivateFrameworks/MIL.framework/Versions/A/MIL -0x00007ff810eb4000 /usr/lib/libiconv.2.dylib -0x00007ff810e05000 /usr/lib/libcharset.1.dylib -0x00007ff80cbfc000 /System/Library/Frameworks/OpenDirectory.framework/Versions/A/Frameworks/CFOpenDirectory.framework/Versions/A/CFOpenDirectory -0x00007ff80cbf0000 /System/Library/Frameworks/OpenDirectory.framework/Versions/A/OpenDirectory -0x00007ff812497000 /System/Library/PrivateFrameworks/APFS.framework/Versions/A/APFS -0x00007ff8101ea000 /System/Library/Frameworks/SecurityFoundation.framework/Versions/A/SecurityFoundation -0x00007ff81251b000 /usr/lib/libutil.dylib -0x00007ffb1c9cc000 /System/Library/PrivateFrameworks/InstalledContentLibrary.framework/Versions/A/InstalledContentLibrary -0x00007ff807550000 /System/Library/PrivateFrameworks/CoreServicesStore.framework/Versions/A/CoreServicesStore -0x00007ffb0cd3d000 /System/Library/PrivateFrameworks/AppleMobileFileIntegrity.framework/Versions/A/AppleMobileFileIntegrity -0x00007ff909e05000 /usr/lib/libmis.dylib -0x00007ff919ef5000 /System/Library/PrivateFrameworks/MobileSystemServices.framework/Versions/A/MobileSystemServices -0x00007ffa1788c000 /System/Library/PrivateFrameworks/ConfigProfileHelper.framework/Versions/A/ConfigProfileHelper -0x00007ff810fbd000 /System/Library/PrivateFrameworks/AppleSauce.framework/Versions/A/AppleSauce -0x00007ff805c62000 /System/Library/PrivateFrameworks/LanguageModeling.framework/Versions/A/LanguageModeling -0x00007ff81251f000 /usr/lib/libxslt.1.dylib -0x00007ff810ebb000 /usr/lib/libcmph.dylib -0x00007ff80ff98000 /System/Library/PrivateFrameworks/CoreEmoji.framework/Versions/A/CoreEmoji -0x00007ff80f4da000 /System/Library/PrivateFrameworks/LinguisticData.framework/Versions/A/LinguisticData -0x00007ff804b81000 /System/Library/PrivateFrameworks/Lexicon.framework/Versions/A/Lexicon -0x00007ff810273000 /System/Library/PrivateFrameworks/BackgroundTaskManagement.framework/Versions/A/BackgroundTaskManagement -0x00007ffc17359000 /usr/lib/libTLE.dylib -0x00007ff812ebb000 /System/Library/PrivateFrameworks/AppleJPEG.framework/Versions/A/AppleJPEG -0x00007ff8129e5000 /usr/lib/libexpat.1.dylib -0x00007ff8135a2000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libPng.dylib -0x00007ff8135cf000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libTIFF.dylib -0x00007ff8136c4000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libGIF.dylib -0x00007ff812f07000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJP2.dylib -0x00007ff813663000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib -0x00007ff81365a000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libRadiance.dylib -0x00007ff80e7f7000 /System/Library/PrivateFrameworks/FontServices.framework/libFontParser.dylib -0x00007ff80b0b8000 /System/Library/PrivateFrameworks/RunningBoardServices.framework/Versions/A/RunningBoardServices -0x00007ff81f18b000 /System/Library/PrivateFrameworks/IOSurfaceAccelerator.framework/Versions/A/IOSurfaceAccelerator -0x00007ff812ff5000 /System/Library/PrivateFrameworks/WatchdogClient.framework/Versions/A/WatchdogClient -0x00007ff805e2b000 /System/Library/Frameworks/CoreDisplay.framework/Versions/A/CoreDisplay -0x00007ff80e6c9000 /System/Library/Frameworks/CoreMedia.framework/Versions/A/CoreMedia -0x00007ff80e473000 /System/Library/PrivateFrameworks/IOAccelerator.framework/Versions/A/IOAccelerator -0x00007ff80cd78000 /System/Library/Frameworks/CoreVideo.framework/Versions/A/CoreVideo -0x00007ff81100e000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/MetalPerformanceShaders -0x00007ff813036000 /System/Library/Frameworks/VideoToolbox.framework/Versions/A/VideoToolbox -0x00007ff80ce04000 /System/Library/PrivateFrameworks/UserManagement.framework/Versions/A/UserManagement -0x00007ff80afea000 /System/Library/PrivateFrameworks/BaseBoard.framework/Versions/A/BaseBoard -0x00007ff80f3c9000 /System/Library/PrivateFrameworks/AggregateDictionary.framework/Versions/A/AggregateDictionary -0x00007ffb0ccc1000 /System/Library/PrivateFrameworks/AppleKeyStore.framework/Versions/A/AppleKeyStore -0x00007ff813653000 /System/Library/PrivateFrameworks/GPUWrangler.framework/Versions/A/GPUWrangler -0x00007ff813637000 /System/Library/PrivateFrameworks/IOPresentment.framework/Versions/A/IOPresentment -0x00007ff81365d000 /System/Library/PrivateFrameworks/DSExternalDisplay.framework/Versions/A/DSExternalDisplay -0x00007ffb18a5e000 /System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/libllvm-flatbuffers.dylib -0x00007ffa1f5d1000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreFSCache.dylib -0x00007ffb155de000 /System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/32023/Libraries/libGPUCompilerUtils.dylib -0x00007ff8136ca000 /System/Library/PrivateFrameworks/CMCaptureCore.framework/Versions/A/CMCaptureCore -0x00007ffb05911000 /System/Library/Frameworks/ExtensionFoundation.framework/Versions/A/ExtensionFoundation -0x00007ff81a936000 /System/Library/PrivateFrameworks/CoreTime.framework/Versions/A/CoreTime -0x00007ff812bad000 /System/Library/PrivateFrameworks/AppServerSupport.framework/Versions/A/AppServerSupport -0x00007ff81512e000 /System/Library/PrivateFrameworks/perfdata.framework/Versions/A/perfdata -0x00007ff805f57000 /System/Library/PrivateFrameworks/AudioToolboxCore.framework/Versions/A/AudioToolboxCore -0x00007ff80e6a3000 /System/Library/PrivateFrameworks/caulk.framework/Versions/A/caulk -0x00007ff8149cc000 /usr/lib/libAudioStatistics.dylib -0x00007ff9091fe000 /System/Library/PrivateFrameworks/SystemPolicy.framework/Versions/A/SystemPolicy -0x00007ff814c98000 /usr/lib/libSMC.dylib -0x00007ff81e87b000 /System/Library/Frameworks/CoreMIDI.framework/Versions/A/CoreMIDI -0x00007ff813569000 /usr/lib/libAudioToolboxUtility.dylib -0x00007ff904c65000 /System/Library/PrivateFrameworks/OSAServicesClient.framework/Versions/A/OSAServicesClient -0x00007ff81513b000 /usr/lib/libperfcheck.dylib -0x00007ff8128c6000 /System/Library/PrivateFrameworks/PlugInKit.framework/Versions/A/PlugInKit -0x00007ff8101dd000 /System/Library/PrivateFrameworks/AssertionServices.framework/Versions/A/AssertionServices -0x00007ffa069ba000 /System/Library/PrivateFrameworks/Symbolication.framework/Versions/A/Symbolication -0x00007ffb23182000 /System/Library/PrivateFrameworks/PhotosensitivityProcessing.framework/Versions/A/PhotosensitivityProcessing -0x00007ffa20bdd000 /System/Library/Frameworks/OpenCL.framework/Versions/A/OpenCL -0x00007ff812b58000 /System/Library/PrivateFrameworks/GraphVisualizer.framework/Versions/A/GraphVisualizer -0x00007ffa1f62e000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib -0x00007ffa1f5f0000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGFXShared.dylib -0x00007ffa1f7ed000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib -0x00007ffa1f5f8000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLImage.dylib -0x00007ffa1f5ed000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCVMSPluginSupport.dylib -0x00007ffc17313000 /usr/lib/libRosetta.dylib -0x00007ffa1f5d8000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreVMClient.dylib -0x00007ffb1371c000 /System/Library/PrivateFrameworks/FontServices.framework/Versions/A/FontServices -0x00007ff812b67000 /System/Library/PrivateFrameworks/OTSVG.framework/Versions/A/OTSVG -0x00007ff80c930000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontRegistry.dylib -0x00007ff812bb7000 /System/Library/PrivateFrameworks/FontServices.framework/libhvf.dylib -0x00007ffb1371d000 /System/Library/PrivateFrameworks/FontServices.framework/libXTFontStaticRegistryData.dylib -0x00007ff80f33e000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSCore.framework/Versions/A/MPSCore -0x00007ff8108ef000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSImage.framework/Versions/A/MPSImage -0x00007ff81034a000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSNeuralNetwork.framework/Versions/A/MPSNeuralNetwork -0x00007ff8107c3000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSMatrix.framework/Versions/A/MPSMatrix -0x00007ff810576000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSRayIntersector.framework/Versions/A/MPSRayIntersector -0x00007ff8107fe000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSNDArray.framework/Versions/A/MPSNDArray -0x00007ffb075d5000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSFunctions.framework/Versions/A/MPSFunctions -0x00007ffb075b7000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSBenchmarkLoop.framework/Versions/A/MPSBenchmarkLoop -0x00007ff8047bc000 /System/Library/PrivateFrameworks/MetalTools.framework/Versions/A/MetalTools -0x00007ff90e3f8000 /System/Library/PrivateFrameworks/IOAccelMemoryInfo.framework/Versions/A/IOAccelMemoryInfo -0x00007ff919e07000 /System/Library/PrivateFrameworks/kperf.framework/Versions/A/kperf -0x00007ff909e18000 /System/Library/PrivateFrameworks/GPURawCounter.framework/Versions/A/GPURawCounter -0x00007ff81a82a000 /System/Library/PrivateFrameworks/CoreSymbolication.framework/Versions/A/CoreSymbolication -0x00007ff909dd6000 /System/Library/PrivateFrameworks/MallocStackLogging.framework/Versions/A/MallocStackLogging -0x00007ff81276d000 /System/Library/PrivateFrameworks/CrashReporterSupport.framework/Versions/A/CrashReporterSupport -0x00007ff81a7eb000 /System/Library/PrivateFrameworks/DebugSymbols.framework/Versions/A/DebugSymbols -0x00007ff91913a000 /System/Library/PrivateFrameworks/OSAnalytics.framework/Versions/A/OSAnalytics -0x00007ffc0e885000 /System/Library/PrivateFrameworks/VideoToolboxParavirtualizationSupport.framework/Versions/A/VideoToolboxParavirtualizationSupport -0x00007ff812995000 /System/Library/PrivateFrameworks/AppleVA.framework/Versions/A/AppleVA -0x00007ff814a10000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS -0x00007ff80a409000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices -0x00007ff8136d8000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore -0x00007ff814dee000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD -0x00007ff814de6000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSyncLegacy.framework/Versions/A/ColorSyncLegacy -0x00007ff8149e4000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis -0x00007ff813694000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATSUI.framework/Versions/A/ATSUI -0x00007ff814d78000 /usr/lib/libcups.2.dylib -0x00007ff81514a000 /System/Library/Frameworks/Kerberos.framework/Versions/A/Kerberos -0x00007ff815159000 /System/Library/Frameworks/GSS.framework/Versions/A/GSS -0x00007ff814a89000 /usr/lib/libresolv.9.dylib -0x00007ff812bc9000 /System/Library/PrivateFrameworks/Heimdal.framework/Versions/A/Heimdal -0x00007ff81c7ee000 /System/Library/Frameworks/Kerberos.framework/Versions/A/Libraries/libHeimdalProxy.dylib -0x00007ff8151a6000 /System/Library/PrivateFrameworks/CommonAuth.framework/Versions/A/CommonAuth -0x00007ffb04807000 /System/Library/Frameworks/AVFAudio.framework/Versions/A/AVFAudio -0x00007ff904cae000 /System/Library/PrivateFrameworks/AXCoreUtilities.framework/Versions/A/AXCoreUtilities -0x00007ff814954000 /System/Library/PrivateFrameworks/AudioSession.framework/Versions/A/AudioSession -0x00007ff8163c8000 /System/Library/Frameworks/IOBluetooth.framework/Versions/A/IOBluetooth -0x00007ff812aa4000 /System/Library/PrivateFrameworks/MediaExperience.framework/Versions/A/MediaExperience -0x00007ff8147a9000 /System/Library/PrivateFrameworks/AudioSession.framework/libSessionUtility.dylib -0x00007ff814dfa000 /System/Library/PrivateFrameworks/AudioResourceArbitration.framework/Versions/A/AudioResourceArbitration -0x00007ff8194ac000 /System/Library/PrivateFrameworks/PowerLog.framework/Versions/A/PowerLog -0x00007ff8193cd000 /System/Library/Frameworks/CoreBluetooth.framework/Versions/A/CoreBluetooth -0x00007ff81c7ef000 /System/Library/Frameworks/AudioUnit.framework/Versions/A/AudioUnit -0x00007ff810051000 /System/Library/PrivateFrameworks/CoreUtils.framework/Versions/A/CoreUtils -0x00007ffb11ef1000 /System/Library/PrivateFrameworks/CoreUtilsExtras.framework/Versions/A/CoreUtilsExtras -0x00007ffb1c859000 /System/Library/PrivateFrameworks/IO80211.framework/Versions/A/IO80211 -0x00007ff904cc5000 /usr/lib/libAccessibility.dylib -0x00007ff818aed000 /System/Library/Frameworks/MediaAccessibility.framework/Versions/A/MediaAccessibility -0x00007ff81a34a000 /System/Library/PrivateFrameworks/FrontBoardServices.framework/Versions/A/FrontBoardServices -0x00007ff81bde7000 /System/Library/PrivateFrameworks/BackBoardServices.framework/Versions/A/BackBoardServices -0x00007ff81a406000 /System/Library/PrivateFrameworks/BoardServices.framework/Versions/A/BoardServices -0x00007ff812a09000 /System/Library/PrivateFrameworks/IconFoundation.framework/Versions/A/IconFoundation -0x00007ff818378000 /System/Library/PrivateFrameworks/SpeechRecognitionCore.framework/Versions/A/SpeechRecognitionCore -0x00007ffa0a12f000 /System/Library/Frameworks/OSLog.framework/Versions/A/OSLog -0x00007ff909d63000 /System/Library/PrivateFrameworks/LoggingSupport.framework/Versions/A/LoggingSupport -0x0000000104d37000 /Users/maggicl/Library/Java/JavaVirtualMachines/temurin-1.8.0_345/Contents/Home/jre/lib/server/libjvm.dylib -0x0000000103a12000 /Users/maggicl/Library/Java/JavaVirtualMachines/temurin-1.8.0_345/Contents/Home/jre/lib/libverify.dylib -0x0000000103a69000 /Users/maggicl/Library/Java/JavaVirtualMachines/temurin-1.8.0_345/Contents/Home/jre/lib/libjava.dylib -0x0000000103aae000 /Users/maggicl/Library/Java/JavaVirtualMachines/temurin-1.8.0_345/Contents/Home/jre/lib/libinstrument.dylib -0x0000000103a33000 /Users/maggicl/Library/Java/JavaVirtualMachines/temurin-1.8.0_345/Contents/Home/jre/lib/libzip.dylib -0x0000000103d01000 /Users/maggicl/Library/Java/JavaVirtualMachines/temurin-1.8.0_345/Contents/Home/jre/lib/libnio.dylib -0x0000000103d1a000 /Users/maggicl/Library/Java/JavaVirtualMachines/temurin-1.8.0_345/Contents/Home/jre/lib/libnet.dylib - -VM Arguments: -jvm_args: -javaagent:agent/agent.jar=hello -java_command: ch.usi.inf.sp.dbi.Application -java_class_path (initial): out/production/application:out/production/profiler:agent/lib:agent/agent.jar -Launcher Type: SUN_STANDARD - -Environment Variables: -JAVA_HOME=/Users/maggicl/Library/Java/JavaVirtualMachines/temurin-1.8.0_345/Contents/Home -PATH=/Users/maggicl/Library/Java/JavaVirtualMachines/temurin-1.8.0_345/Contents/Home/bin:/Users/maggicl/Library/Java/JavaVirtualMachines/temurin-1.8.0_345/Contents/Home/bin:/usr/local/Caskroom/miniconda/base/bin:/usr/local/Caskroom/miniconda/base/condabin:/Users/maggicl/.opam/default/bin:/Users/maggicl/.local/bin:/Users/maggicl/Library/Java/JavaVirtualMachines/temurin-17.0.5/Contents/Home/bin:/Users/maggicl/bin:/Users/maggicl/git/github/hledger/bin:/usr/local/sbin:/usr/local/bin:/usr/local/bin:/usr/local/opt/coreutils/libexec/gnubin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/opt/X11/bin:/Library/TeX/texbin:/Applications/VMware Fusion.app/Contents/Public:/usr/local/zfs/bin -SHELL=/bin/zsh -DISPLAY=/private/tmp/com.apple.launchd.dJ1oHJt1k4/org.xquartz:0 - -Signal Handlers: -SIGSEGV: [libjvm.dylib+0x59c563], sa_mask[0]=11111111011111110111111111111111, sa_flags=SA_ONSTACK|SA_RESTART|SA_SIGINFO -SIGBUS: [libjvm.dylib+0x59c563], sa_mask[0]=11111111011111110111111111111111, sa_flags=SA_RESTART|SA_SIGINFO -SIGFPE: [libjvm.dylib+0x48f1f7], sa_mask[0]=11111111011111110111111111111111, sa_flags=SA_RESTART|SA_SIGINFO -SIGPIPE: [libjvm.dylib+0x48f1f7], sa_mask[0]=11111111011111110111111111111111, sa_flags=SA_RESTART|SA_SIGINFO -SIGXFSZ: [libjvm.dylib+0x48f1f7], sa_mask[0]=11111111011111110111111111111111, sa_flags=SA_RESTART|SA_SIGINFO -SIGILL: [libjvm.dylib+0x48f1f7], sa_mask[0]=11111111011111110111111111111111, sa_flags=SA_RESTART|SA_SIGINFO -SIGUSR1: SIG_DFL, sa_mask[0]=00000000000000000000000000000000, sa_flags=SA_RESTART -SIGUSR2: [libjvm.dylib+0x48faee], sa_mask[0]=00000000000000000000000000000000, sa_flags=SA_RESTART|SA_SIGINFO -SIGHUP: [libjvm.dylib+0x48dce1], sa_mask[0]=11111111011111110111111111111111, sa_flags=SA_RESTART|SA_SIGINFO -SIGINT: [libjvm.dylib+0x48dce1], sa_mask[0]=11111111011111110111111111111111, sa_flags=SA_RESTART|SA_SIGINFO -SIGTERM: [libjvm.dylib+0x48dce1], sa_mask[0]=11111111011111110111111111111111, sa_flags=SA_RESTART|SA_SIGINFO -SIGQUIT: [libjvm.dylib+0x48dce1], sa_mask[0]=11111111011111110111111111111111, sa_flags=SA_RESTART|SA_SIGINFO - - ---------------- S Y S T E M --------------- - -OS:Bsduname:Darwin 23.1.0 Darwin Kernel Version 23.1.0: Mon Oct 9 21:27:27 PDT 2023; root:xnu-10002.41.9~6/RELEASE_X86_64 x86_64 -rlimit: STACK 8192k, CORE 0k, NPROC 2784, NOFILE 10240, AS infinity -load average:2.37 2.10 1.88 - -CPU:total 12 (initial active 12) (6 cores per cpu, 2 threads per core) family 6 model 158 stepping 10, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, avx, avx2, aes, clmul, erms, 3dnowpref, lzcnt, ht, tsc, tscinvbit, bmi1, bmi2, adx - -Memory: 4k page, physical 16777216k(185044k free) - -/proc/meminfo: - - -vm_info: OpenJDK 64-Bit Server VM (25.345-b01) for bsd-amd64 JRE (1.8.0_345-b01), built on Aug 2 2022 11:46:33 by "jenkins" with gcc 4.2.1 Compatible Apple LLVM 10.0.1 (clang-1001.0.46.4) - -time: Tue Dec 19 16:09:37 2023 -timezone: CET -elapsed time: 0.147096 seconds (0d 0h 0m 0s) - diff --git a/profiler/src/ch/usi/inf/sp/dbi/profiler/CCTNode.java b/profiler/src/ch/usi/inf/sp/dbi/profiler/CCTNode.java new file mode 100644 index 0000000..ac1e7e8 --- /dev/null +++ b/profiler/src/ch/usi/inf/sp/dbi/profiler/CCTNode.java @@ -0,0 +1,62 @@ +package ch.usi.inf.sp.dbi.profiler; + +import java.util.*; + +public class CCTNode { + private static final String INDENTATION = " "; + + private final IFrame frame; + private final Map children = new HashMap<>(); + + public CCTNode(IFrame frame) { + this.frame = frame; + } + + public IFrame getFrame() { + return frame; + } + + public CCTNode getOrAddChild(IFrame frame) { + return children.computeIfAbsent(frame, CCTNode::new); + } + + public String toString() { + final StringBuilder text = new StringBuilder(); + int indentationLevel = 0; + + // build a stack of "list-of-children" stacks + final Deque> toVisit = new ArrayDeque<>(); + toVisit.push(new ArrayDeque<>(Collections.singletonList(this))); + + while (!toVisit.isEmpty()) { + // peek the first "list-of-children" stack. If it's empty, we're done so we de-indent and we pop + final Deque nodes = toVisit.getFirst(); + if (nodes.isEmpty()) { + indentationLevel--; + toVisit.pop(); + continue; + } + + // otherwise, we consume one of the children + final CCTNode node = nodes.pop(); + + // add indentation indentationLevel times + for (int i = 0; i < indentationLevel; i++) { + text.append(INDENTATION); + } + + // and we print it in the tree + text.append(node.frame.getName()); + text.append('\n'); + + // if this node has children, we explore them in DFS fashion by adding an element to the "list-of-children" + // stack + if (!node.children.isEmpty()) { + toVisit.push(new ArrayDeque<>(node.children.values())); + indentationLevel++; + } + } + + return text.toString(); + } +} diff --git a/profiler/src/ch/usi/inf/sp/dbi/profiler/Frame.java b/profiler/src/ch/usi/inf/sp/dbi/profiler/Frame.java new file mode 100644 index 0000000..5a0f00e --- /dev/null +++ b/profiler/src/ch/usi/inf/sp/dbi/profiler/Frame.java @@ -0,0 +1,35 @@ +package ch.usi.inf.sp.dbi.profiler; + +import java.util.Objects; + +public class Frame implements IFrame { + private final String className; + private final String methodName; + private final String methodDescriptor; + + public Frame(String className, String methodName, String methodDescriptor) { + this.className = className; + this.methodName = methodName; + this.methodDescriptor = methodDescriptor; + } + + @Override + public String getName() { + return String.format("%s.%s%s", className, methodName, methodDescriptor); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Frame frame = (Frame) o; + return Objects.equals(className, frame.className) && + Objects.equals(methodName, frame.methodName) && + Objects.equals(methodDescriptor, frame.methodDescriptor); + } + + @Override + public int hashCode() { + return Objects.hash(className, methodName, methodDescriptor); + } +} diff --git a/profiler/src/ch/usi/inf/sp/dbi/profiler/IFrame.java b/profiler/src/ch/usi/inf/sp/dbi/profiler/IFrame.java new file mode 100644 index 0000000..cdd4076 --- /dev/null +++ b/profiler/src/ch/usi/inf/sp/dbi/profiler/IFrame.java @@ -0,0 +1,6 @@ +package ch.usi.inf.sp.dbi.profiler; + +public interface IFrame { + String getName(); + boolean equals(Object o); +} diff --git a/profiler/src/ch/usi/inf/sp/dbi/profiler/Profiler.java b/profiler/src/ch/usi/inf/sp/dbi/profiler/Profiler.java index dfeced1..a18f714 100644 --- a/profiler/src/ch/usi/inf/sp/dbi/profiler/Profiler.java +++ b/profiler/src/ch/usi/inf/sp/dbi/profiler/Profiler.java @@ -1,95 +1,47 @@ package ch.usi.inf.sp.dbi.profiler; -import javax.sound.midi.*; -import javax.swing.*; +import java.util.ArrayDeque; +import java.util.Collections; +import java.util.Deque; public class Profiler { - - private static final DefaultListModel model = new DefaultListModel<>(); - private static int size = 0; + private static final CCTNode rootNode = new CCTNode(RootFrame.INSTANCE); + private static final Deque callStack = new ArrayDeque<>(Collections.singletonList(rootNode)); static { - SwingUtilities.invokeLater(() -> { - JFrame frame = new JFrame("Profiler"); - frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - model.add(0, "hello"); - JList list = new JList<>(model); - JScrollPane p = new JScrollPane(list); - frame.add(p); - frame.pack(); - frame.setVisible(true); - }); - + Runtime.getRuntime().addShutdownHook(new Thread(() -> { + System.out.println("\nCalling Context Tree:"); + System.out.println(rootNode); + })); } - private static MidiEvent createProgramChangeEvent(int channel, int program) throws InvalidMidiDataException { - ShortMessage message = new ShortMessage(); - message.setMessage(ShortMessage.PROGRAM_CHANGE, channel, program, 0); - return new MidiEvent(message, 0); - } - - public static void play() throws InterruptedException { - final Thread midi = new Thread(() -> { - try { - Sequencer player = MidiSystem.getSequencer(); - player.open(); - - Sequence seq = new Sequence(Sequence.PPQ, 4); - - Track track = seq.createTrack(); - - int channel = 1; - - int pitch = size * 2; - pitch = 20 + pitch % 118; - - track.add(createProgramChangeEvent(channel, 54)); - - ShortMessage a = new ShortMessage(); - a.setMessage(ShortMessage.NOTE_ON, channel, pitch, 100); - MidiEvent noteOn = new MidiEvent(a, 0); - track.add(noteOn); - - ShortMessage b = new ShortMessage(); - b.setMessage(ShortMessage.NOTE_OFF, channel, pitch, 100); - MidiEvent noteOff = new MidiEvent(b, 2); - track.add(noteOff); - - player.setSequence(seq); - player.start(); - - } catch (Exception ex) { - ex.printStackTrace(); - } - }); - - midi.start(); - midi.join(); + private static String indent(int n) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < n; i++) { + sb.append(" "); + } + return sb.toString(); } public static void entry(String clazz, String method, String desc) { - size++; - model.add(0, clazz + "." + method + desc); - log(clazz, method, desc, "entry"); + final CCTNode parent = callStack.getFirst(); + + final Frame frame = new Frame(clazz, method, desc); + callStack.push(parent.getOrAddChild(frame)); + +// System.out.println("profiler captured: > " + indent(callStack.size()) + callStack.getFirst().getFrame().getName()); } public static void exit(String clazz, String method, String desc) { - size--; - model.remove(0); - log(clazz, method, desc, "exit"); - } + final Frame exitingFrom = new Frame(clazz, method, desc); + final IFrame lastCalled = callStack.isEmpty() ? null : callStack.getFirst().getFrame(); - private static void log(String clazz, String method, String desc, String type) { - try { - System.err.println("Profiler: " + type + " " + clazz + "." + method + desc); - play(); - - try { - Thread.sleep(50); - } catch (InterruptedException ignored) { - } - } catch (Exception e) { - e.printStackTrace(System.err); + if (!exitingFrom.equals(lastCalled)) { + throw new IllegalStateException("Expecting to exit from " + lastCalled + ", but found " + exitingFrom); } + +// System.out.println("profiler captured: < " + indent(callStack.size()) + callStack.getFirst().getFrame().getName()); + + callStack.pop(); } } diff --git a/profiler/src/ch/usi/inf/sp/dbi/profiler/RootFrame.java b/profiler/src/ch/usi/inf/sp/dbi/profiler/RootFrame.java new file mode 100644 index 0000000..2349dd8 --- /dev/null +++ b/profiler/src/ch/usi/inf/sp/dbi/profiler/RootFrame.java @@ -0,0 +1,13 @@ +package ch.usi.inf.sp.dbi.profiler; + +public class RootFrame implements IFrame { + public static final RootFrame INSTANCE = new RootFrame(); + + private RootFrame() { + } + + @Override + public String getName() { + return "root"; + } +}