Mercurial > hg > truffle
comparison test/runtime/7158988/FieldMonitor.java @ 18041:52b4284cb496
Merge with jdk8u20-b26
author | Gilles Duboscq <duboscq@ssw.jku.at> |
---|---|
date | Wed, 15 Oct 2014 16:02:50 +0200 |
parents | 4ca6dc0799b6 |
children |
comparison
equal
deleted
inserted
replaced
17606:45d7b2c7029d | 18041:52b4284cb496 |
---|---|
32 */ | 32 */ |
33 import java.io.BufferedReader; | 33 import java.io.BufferedReader; |
34 import java.io.IOException; | 34 import java.io.IOException; |
35 import java.io.InputStream; | 35 import java.io.InputStream; |
36 import java.io.InputStreamReader; | 36 import java.io.InputStreamReader; |
37 import java.io.OutputStream; | |
38 import java.io.OutputStreamWriter; | |
39 import java.io.Reader; | |
40 import java.io.Writer; | |
41 import java.util.Iterator; | 37 import java.util.Iterator; |
42 import java.util.List; | 38 import java.util.List; |
43 import java.util.Map; | 39 import java.util.Map; |
44 | 40 |
45 import com.sun.jdi.Bootstrap; | 41 import com.sun.jdi.Bootstrap; |
54 import com.sun.jdi.event.Event; | 50 import com.sun.jdi.event.Event; |
55 import com.sun.jdi.event.EventQueue; | 51 import com.sun.jdi.event.EventQueue; |
56 import com.sun.jdi.event.EventSet; | 52 import com.sun.jdi.event.EventSet; |
57 import com.sun.jdi.event.ModificationWatchpointEvent; | 53 import com.sun.jdi.event.ModificationWatchpointEvent; |
58 import com.sun.jdi.event.VMDeathEvent; | 54 import com.sun.jdi.event.VMDeathEvent; |
55 import com.sun.jdi.event.VMStartEvent; | |
59 import com.sun.jdi.event.VMDisconnectEvent; | 56 import com.sun.jdi.event.VMDisconnectEvent; |
60 import com.sun.jdi.request.ClassPrepareRequest; | 57 import com.sun.jdi.request.ClassPrepareRequest; |
61 import com.sun.jdi.request.EventRequest; | 58 import com.sun.jdi.request.EventRequest; |
62 import com.sun.jdi.request.EventRequestManager; | 59 import com.sun.jdi.request.EventRequestManager; |
63 import com.sun.jdi.request.ModificationWatchpointRequest; | 60 import com.sun.jdi.request.ModificationWatchpointRequest; |
69 public static final String ARGUMENTS = "-Xshare:off -XX:+PrintGC"; | 66 public static final String ARGUMENTS = "-Xshare:off -XX:+PrintGC"; |
70 | 67 |
71 public static void main(String[] args) | 68 public static void main(String[] args) |
72 throws IOException, InterruptedException { | 69 throws IOException, InterruptedException { |
73 | 70 |
74 StringBuffer sb = new StringBuffer(); | |
75 | |
76 for (int i=0; i < args.length; i++) { | |
77 sb.append(' '); | |
78 sb.append(args[i]); | |
79 } | |
80 //VirtualMachine vm = launchTarget(sb.toString()); | 71 //VirtualMachine vm = launchTarget(sb.toString()); |
81 VirtualMachine vm = launchTarget(CLASS_NAME); | 72 VirtualMachine vm = launchTarget(CLASS_NAME); |
82 | 73 |
83 System.out.println("Vm launched"); | 74 System.out.println("Vm launched"); |
84 // set watch field on already loaded classes | |
85 List<ReferenceType> referenceTypes = vm | |
86 .classesByName(CLASS_NAME); | |
87 for (ReferenceType refType : referenceTypes) { | |
88 addFieldWatch(vm, refType); | |
89 } | |
90 // watch for loaded classes | |
91 addClassWatch(vm); | |
92 | 75 |
93 // process events | 76 // process events |
94 EventQueue eventQueue = vm.eventQueue(); | 77 EventQueue eventQueue = vm.eventQueue(); |
95 // resume the vm | 78 // resume the vm |
96 | 79 |
102 Thread errThread = new StreamRedirectThread("error reader", process.getErrorStream()); | 85 Thread errThread = new StreamRedirectThread("error reader", process.getErrorStream()); |
103 | 86 |
104 errThread.start(); | 87 errThread.start(); |
105 outThread.start(); | 88 outThread.start(); |
106 | 89 |
107 | |
108 vm.resume(); | |
109 boolean connected = true; | 90 boolean connected = true; |
91 int watched = 0; | |
110 while (connected) { | 92 while (connected) { |
111 EventSet eventSet = eventQueue.remove(); | 93 EventSet eventSet = eventQueue.remove(); |
112 for (Event event : eventSet) { | 94 for (Event event : eventSet) { |
113 if (event instanceof VMDeathEvent | 95 System.out.println("FieldMonitor-main receives: "+event); |
96 if (event instanceof VMStartEvent) { | |
97 addClassWatch(vm); | |
98 } else if (event instanceof VMDeathEvent | |
114 || event instanceof VMDisconnectEvent) { | 99 || event instanceof VMDisconnectEvent) { |
115 // exit | 100 // exit |
116 connected = false; | 101 connected = false; |
117 } else if (event instanceof ClassPrepareEvent) { | 102 } else if (event instanceof ClassPrepareEvent) { |
118 // watch field on loaded class | 103 // watch field on loaded class |
120 ClassPrepareEvent classPrepEvent = (ClassPrepareEvent) event; | 105 ClassPrepareEvent classPrepEvent = (ClassPrepareEvent) event; |
121 ReferenceType refType = classPrepEvent | 106 ReferenceType refType = classPrepEvent |
122 .referenceType(); | 107 .referenceType(); |
123 addFieldWatch(vm, refType); | 108 addFieldWatch(vm, refType); |
124 } else if (event instanceof ModificationWatchpointEvent) { | 109 } else if (event instanceof ModificationWatchpointEvent) { |
110 watched++; | |
125 System.out.println("sleep for 500 ms"); | 111 System.out.println("sleep for 500 ms"); |
126 Thread.sleep(500); | 112 Thread.sleep(500); |
127 System.out.println("resume..."); | |
128 | 113 |
129 ModificationWatchpointEvent modEvent = (ModificationWatchpointEvent) event; | 114 ModificationWatchpointEvent modEvent = (ModificationWatchpointEvent) event; |
130 System.out.println("old=" | 115 System.out.println("old=" |
131 + modEvent.valueCurrent()); | 116 + modEvent.valueCurrent()); |
132 System.out.println("new=" + modEvent.valueToBe()); | 117 System.out.println("new=" + modEvent.valueToBe()); |
133 System.out.println(); | |
134 } | 118 } |
135 } | 119 } |
120 System.out.println("resume..."); | |
136 eventSet.resume(); | 121 eventSet.resume(); |
137 } | 122 } |
138 // Shutdown begins when event thread terminates | 123 // Shutdown begins when event thread terminates |
139 try { | 124 try { |
140 errThread.join(); // Make sure output is forwarded | 125 errThread.join(); // Make sure output is forwarded |
141 outThread.join(); | 126 outThread.join(); |
142 } catch (InterruptedException exc) { | 127 } catch (InterruptedException exc) { |
143 // we don't interrupt | 128 // we don't interrupt |
129 } | |
130 | |
131 if (watched != 11) { // init + 10 modifications in TestPostFieldModification class | |
132 throw new Error("Expected to receive 11 times ModificationWatchpointEvent, but got "+watched); | |
144 } | 133 } |
145 } | 134 } |
146 | 135 |
147 /** | 136 /** |
148 * Find a com.sun.jdi.CommandLineLaunch connector | 137 * Find a com.sun.jdi.CommandLineLaunch connector |