1 7 package measurements.suites; 8 9 import junit.framework.Assert; 11 import junit.framework.Test; 12 import ch.ethz.inf.util.junit.PerformanceTest; 13 import ch.ethz.inf.util.junit.PerformanceTestSuite; 14 import ch.ethz.jvmai.*; 15 import ch.ethz.prose.*; 16 import ch.ethz.prose.crosscut.*; 17 import ch.ethz.prose.filter.*; 18 19 20 30 public class CrosscutMeasurement extends PerformanceTest { 31 32 { RANGE = new int[]{10000}; } 34 35 36 public static void staticVoidMethod() 37 { 38 } 39 40 public int toBeAccessedOrModified; 41 public String stringToBeAccessedOrModified; 42 43 public void voidMethod() 44 { 45 } 46 47 public void voidMethodLong(String a, String b) 48 { 49 } 50 51 public static class TestAspect extends DefaultAspect 52 { 53 54 public AbstractCrosscut allGetsCrsc = new GetCut() 55 { 56 public void joinPointAction(FieldAccessJoinPoint e) 57 {} 58 59 protected void GET_ARGS() 60 {} 61 62 protected PointCutter pointCutter() { return null;} 63 }; 64 65 public AbstractCrosscut allSetsCrsc = new SetCut() 66 { 67 68 public void joinPointAction(FieldModificationJoinPoint e) 69 {} 70 71 protected PointCutter pointCutter() { return null;} 72 73 protected void SET_ARGS() 74 {} 75 76 }; 77 78 79 80 public AbstractCrosscut alFast = new MethodCut() 81 { 82 protected PointCutter pointCutter() { return null;} 83 84 public void METHOD_ARGS() { } 85 86 }; 87 88 public AbstractCrosscut alNormalShort = new MethodCut() 89 { 90 protected PointCutter pointCutter() { return null;} 91 public void METHOD_ARGS() { } 92 }; 93 94 public AbstractCrosscut wcShort = new MethodCut() 95 { 96 protected PointCutter pointCutter() { return Within.method("voidMethod");} 97 98 public void METHOD_ARGS(ANY t0) { } 99 { 100 } 101 }; 102 103 public AbstractCrosscut wwLong = new MethodCut() 104 { 105 106 protected PointCutter pointCutter() { return Within.method("voidMethodLong");} 107 public void METHOD_ARGS(ANY t0, REST t1) { } 108 { 109 } 110 }; 111 112 public AbstractCrosscut cwLong = new MethodCut() 113 { 114 115 protected PointCutter pointCutter(){ return Within.method("voidMethodLong");} 116 public void METHOD_ARGS(CrosscutMeasurement t0, REST t1) { } 117 { 118 } 119 }; 120 121 public AbstractCrosscut ccShort = new MethodCut() 122 { 123 protected PointCutter pointCutter(){ return Within.method("voidMethod");} 124 125 public void METHOD_ARGS(CrosscutMeasurement tO) { } 126 { 127 } 128 }; 129 130 public AbstractCrosscut ccStaticShort = new MethodCut() 131 { 132 protected PointCutter pointCutter(){ return Within.method("staticVoidMethod");} 133 134 public void METHOD_ARGS(CrosscutMeasurement tO) { } 135 { 136 } 137 }; 138 139 140 141 public AbstractCrosscut ccLong = new MethodCut() 142 { 143 protected PointCutter pointCutter() { return Within.method("voidMethodLong");} 144 public void METHOD_ARGS(CrosscutMeasurement tO, String a, String b) { } 145 { 146 } 147 }; 148 149 150 151 public AbstractCrosscut notOptimizable = new MethodCut() 152 { 153 protected PointCutter pointCutter() { return Within.method("voidMethod");} 154 public void METHOD_ARGS(CrosscutMeasurement tO, ANY a, String b) 155 { 156 } 157 }; 158 } 159 160 public static class MeasurementExtension extends DefaultAspect 161 { 162 Object measuredCrosscut=null; 163 int range = 0; 164 public MeasurementExtension(Crosscut toMeasure,int r) 165 { 166 measuredCrosscut = toMeasure; 167 this.range = r; 168 } 169 170 boolean doAccess = true; 171 public AbstractCrosscut fieldsMsmt = new MySetCut(); 172 173 public class MySetCut extends SetCut 174 { 175 176 177 protected void SET_ARGS() 178 { 179 System.err.println("NOT REACHABLE"); 180 } 181 182 183 public void joinPointAction(FieldModificationJoinPoint fmo) 184 { 185 try 186 { 187 Crosscut mC = (Crosscut)measuredCrosscut; 188 PerformanceTest.startChronometer(); 189 for(int i = 0; i < range; i++) 190 { 191 mC.joinPointReached(fmo); 192 } 193 PerformanceTest.stopChronometer(); 194 } 195 catch (Exception e) 196 { 197 throw new RuntimeException (e.toString()); 198 } 199 } 200 201 202 public void joinPointAction(FieldAccessJoinPoint fac) 203 { 204 205 try 206 { 207 Crosscut mC = (Crosscut)measuredCrosscut; 208 PerformanceTest.startChronometer(); 209 for(int i = 0; i < range; i++) 210 { 211 mC.joinPointReached(fac); 212 } 213 PerformanceTest.stopChronometer(); 214 } 215 catch (Exception e) 216 { 217 throw new RuntimeException (e.toString()); 218 } 219 } 220 221 222 PointCutter theSpec = null; 223 public void setSpecializer(PointCutter cs) 224 { 225 theSpec = cs; 226 } 227 228 protected PointCutter pointCutter() 229 { 230 if (theSpec == null) 231 return (Fields.named("nevergonnabeafieldwiththisname")); 232 else 233 return theSpec; 234 } 235 236 }; 237 238 public AbstractCrosscut c1 = new MyMethodCut(); 239 public class MyMethodCut extends MethodCut 240 { 241 public void METHOD_ARGS() 242 { 243 try 244 { 245 PerformanceTest.startChronometer(); 246 Crosscut mC = (Crosscut)measuredCrosscut; 247 MethodEntryJoinPoint mejp = (MethodEntryJoinPoint)thisJoinPoint(); 248 for(int i = 0; i < range; i++) 249 { 250 mC.joinPointReached(mejp); 251 } 252 PerformanceTest.stopChronometer(); 253 } 254 catch (Exception e) 255 { 256 e.printStackTrace(); 257 throw new RuntimeException (e.toString()); 258 } 259 } 260 261 PointCutter theSpec = null; 262 public void setSpecializer(PointCutter cs) 263 { 264 theSpec = cs; 265 } 266 267 protected PointCutter pointCutter() 268 { 269 if (theSpec == null) 270 return (Within.method("Unless this specializer is exchanged, no matches")); 271 else 272 return theSpec; 273 } 274 }; 275 } 276 277 final boolean useProse; 278 279 283 public CrosscutMeasurement(String name) 284 { 285 super(name); 286 String proseParam = System.getProperty("useprose"); 287 if(proseParam==null) 288 useProse = isDebuggerEnabled(); 289 else 290 useProse = proseParam.toUpperCase().equals("TRUE"); 291 292 if (!isDebuggerEnabled()) 293 { 294 RANGE=new int[] {1000000}; 295 } 296 } 297 298 TestAspect testAspect; 299 300 protected void setUp() throws Exception 301 { 302 if(!useProse) Assert.fail("unable to test crosscuts if prose is disabled"); 303 ProseSystem.startup(); 304 testAspect= new TestAspect(); 305 testAspect.ccShort.insertionAction(true); 306 testAspect.ccStaticShort.insertionAction(true); 307 testAspect.notOptimizable.insertionAction(true); 308 testAspect.ccLong.insertionAction(true); 309 testAspect.alFast.insertionAction(true); 310 testAspect.alNormalShort.insertionAction(true); 311 testAspect.wcShort.insertionAction(true); 312 testAspect.wwLong.insertionAction(true); 313 testAspect.cwLong.insertionAction(true); 314 testAspect.allSetsCrsc.insertionAction(true); 315 testAspect.allGetsCrsc.insertionAction(true); 316 } 317 318 protected void tearDown() throws SystemTeardownException 319 { 320 ProseSystem.teardown(); 321 } 322 323 327 328 329 public void testAllLocationShort() 330 { 331 MeasurementExtension me = new MeasurementExtension(testAspect.alNormalShort,RUNS); 332 ((MeasurementExtension.MyMethodCut)me.c1).setSpecializer((Executions.before()) .AND 333 (Within.subType(CrosscutMeasurement.class)) .AND 334 (Within.method("voidMethod"))); 335 ProseSystem.getAspectManager().insert(me); 336 voidMethod(); 337 ProseSystem.getAspectManager().withdraw(me); 338 } 339 340 public void testAllLocationLong() 341 { 342 MeasurementExtension me = new MeasurementExtension(testAspect.alNormalShort,RUNS); 343 ((MeasurementExtension.MyMethodCut)me.c1).setSpecializer((Executions.before()) .AND 344 (Within.subType(CrosscutMeasurement.class)) .AND 345 (Within.method("voidMethodLong"))); 346 ProseSystem.getAspectManager().insert(me); 347 voidMethodLong("foo","bar"); 348 ProseSystem.getAspectManager().withdraw(me); 349 } 350 351 352 public void testAllLocationFast() 353 { 354 MeasurementExtension me = new MeasurementExtension(testAspect.alFast,RUNS); 355 ((MeasurementExtension.MyMethodCut)me.c1).setSpecializer((Executions.before()) .AND 356 (Within.subType(CrosscutMeasurement.class)) .AND 357 (Within.method("voidMethod"))); 358 ProseSystem.getAspectManager().insert(me); 359 voidMethod(); 360 ProseSystem.getAspectManager().withdraw(me); 361 } 362 363 public void testWildcardWildcardLong() 364 { 365 MeasurementExtension me = new MeasurementExtension(testAspect.wwLong,RUNS); 366 ((MeasurementExtension.MyMethodCut)me.c1).setSpecializer((Executions.before()) .AND 367 (Within.subType(CrosscutMeasurement.class)) .AND 368 (Within.method("voidMethodLong"))); 369 ProseSystem.getAspectManager().insert(me); 370 voidMethodLong("foo","bar"); 371 ProseSystem.getAspectManager().withdraw(me); 372 } 373 public void testConcreteWildcardLong() 374 { 375 MeasurementExtension me = new MeasurementExtension(testAspect.cwLong,RUNS); 376 ((MeasurementExtension.MyMethodCut)me.c1).setSpecializer((Executions.before()) .AND 377 (Within.subType(CrosscutMeasurement.class)) .AND 378 (Within.method("voidMethodLong"))); 379 ProseSystem.getAspectManager().insert(me); 380 voidMethodLong("foo","bar"); 381 ProseSystem.getAspectManager().withdraw(me); 382 } 383 384 public void testWildcardConcreteShort() 385 { 386 MeasurementExtension me = new MeasurementExtension(testAspect.wcShort,RUNS); 387 ((MeasurementExtension.MyMethodCut)me.c1).setSpecializer((Executions.before()) .AND 388 (Within.subType(CrosscutMeasurement.class)) .AND 389 (Within.method("voidMethod"))); 390 ProseSystem.getAspectManager().insert(me); 391 voidMethod(); 392 ProseSystem.getAspectManager().withdraw(me); 393 } 394 395 396 public void testConcreteConcreteShort() 397 { 398 MeasurementExtension me = new MeasurementExtension(testAspect.ccShort,RUNS); 399 ((MeasurementExtension.MyMethodCut)me.c1).setSpecializer((Executions.before()) .AND 400 (Within.subType(CrosscutMeasurement.class)) .AND 401 (Within.method("voidMethod"))); 402 ProseSystem.getAspectManager().insert(me); 403 voidMethod(); 404 ProseSystem.getAspectManager().withdraw(me); 405 } 406 407 408 412 public void testConcreteConcreteStaticShort() 413 { 414 MeasurementExtension me = new MeasurementExtension(testAspect.ccStaticShort,RUNS); 415 ((MeasurementExtension.MyMethodCut)me.c1).setSpecializer((Executions.before()) .AND 416 (Within.subType(CrosscutMeasurement.class)) .AND 417 (Within.method("staticVoidMethod"))); 418 ProseSystem.getAspectManager().insert(me); 419 staticVoidMethod(); 420 ProseSystem.getAspectManager().withdraw(me); 421 } 422 423 public void testConcreteConcreteLong() 424 { 425 MeasurementExtension me = new MeasurementExtension(testAspect.ccLong,RUNS); 426 ((MeasurementExtension.MyMethodCut)me.c1).setSpecializer((Executions.before()) .AND 427 (Within.subType(CrosscutMeasurement.class)) .AND 428 (Within.method("voidMethodLong"))); 429 ProseSystem.getAspectManager().insert(me); 430 voidMethodLong("foo","bar"); 431 ProseSystem.getAspectManager().withdraw(me); 432 } 433 434 435 439 public void testNotOptimized() 440 { 441 MeasurementExtension me = new MeasurementExtension(testAspect.notOptimizable,RUNS); 442 ((MeasurementExtension.MyMethodCut)me.c1).setSpecializer((Executions.before()) .AND 443 (Within.subType(CrosscutMeasurement.class)) .AND 444 (Within.method("voidMethodLong"))); 445 ProseSystem.getAspectManager().insert(me); 446 voidMethodLong("hallo","mr x"); 447 ProseSystem.getAspectManager().withdraw(me); 448 449 } 450 451 452 456 public void testAllFieldsAccess() 457 { 458 MeasurementExtension me = new MeasurementExtension(testAspect.allGetsCrsc,RUNS); 459 ((MeasurementExtension.MySetCut)me.fieldsMsmt).setSpecializer( (Within.subType(CrosscutMeasurement.class)) .AND 460 (Fields.named("toBeAccessedOrModified")) ); 461 me.doAccess = true; 462 ProseSystem.getAspectManager().insert(me); 463 int i = toBeAccessedOrModified; 464 ProseSystem.getAspectManager().withdraw(me); 465 } 466 467 public void testAllFieldsIntModifications() 468 { 469 MeasurementExtension me = new MeasurementExtension(testAspect.allSetsCrsc,RUNS); 470 ((MeasurementExtension.MySetCut)me.fieldsMsmt).setSpecializer( (Within.subType(CrosscutMeasurement.class)) .AND 471 (Fields.named("toBeAccessedOrModified")) ); 472 me.doAccess = false; 473 ProseSystem.getAspectManager().insert(me); 474 toBeAccessedOrModified = 3; 475 ProseSystem.getAspectManager().withdraw(me); 476 } 477 478 public void testAllFieldsStringModifications() 479 { 480 MeasurementExtension me = new MeasurementExtension(testAspect.allSetsCrsc,RUNS); 481 ((MeasurementExtension.MySetCut)me.fieldsMsmt).setSpecializer( (Within.subType(CrosscutMeasurement.class)) .AND 482 (Fields.named("stringToBeAccessedOrModified")) ); 483 me.doAccess = false; 484 ProseSystem.getAspectManager().insert(me); 485 stringToBeAccessedOrModified = "foo"; 486 ProseSystem.getAspectManager().withdraw(me); 487 } 488 489 493 public static Test suite() 494 { 495 return new PerformanceTestSuite(CrosscutMeasurement.class); 496 } 497 498 } 499 500 501 | Popular Tags |