Skip to content

Instantly share code, notes, and snippets.

@rtitle
Last active November 5, 2015 03:24
Show Gist options
  • Save rtitle/b8208419e2318de80f47 to your computer and use it in GitHub Desktop.
Save rtitle/b8208419e2318de80f47 to your computer and use it in GitHub Desktop.
@Test
public void testAntlrPerformance() throws Exception {
initData2();
int numSegments = 100;
List<Audience> audiences = new ArrayList<>(numSegments);
List<Segment> segments = new ArrayList<>(numSegments);
Map<Tuple<String, String>, SegmentAudienceRate> segmentAudienceRateMap = new HashMap<>(numSegments);
ConcurrentMap<String, Segment> segmentMap = new ConcurrentHashMap<>(numSegments);
// Create segments
for (int i=0; i<numSegments; i++) {
Audience audience = new MockAudience("aud"+i, dataXuDataVendor);
audience.setRetargetingExpression("segment " + i);
audiences.add(audience);
Segment segment = new MockFirstPartySegment(String.valueOf(i), dataXuDataVendor);
segments.add(segment);
SegmentAudienceRate audRate = new MockSegmentAudienceRate(segment, audience, 1L /* cost */, 1L /* price */);
segment.addAudienceRate(audience.getObjectUid(), audRate);
segmentAudienceRateMap.put(new Tuple<>(segment.getObjectUid(), audience.getObjectUid()), audRate);
segmentMap.put(segment.getObjectUid(), segment);
}
// Create retargeting expression
Flight flight = new MockFlight(new HashSet<>(audiences), Collections.emptySet());
String exprString = new FlightRetargetingUtil(flight).createRetargetingExpression(true);
logger.info("Expr string: " + exprString);
RetargetingExpression expr = RetargetingExprUtil.createExpression(exprString, segmentAudienceRateMap, true);
// Create user
String userId = "user1";
logger.info("Creating user " + userId + " with empty segment data");
DXUserProfile user = new DXUserProfile(Alias.fromDX(userId));
user.initSegmentInfo(null, segmentMap);
int numTries = 100000;
// Evaluate ANTLR expression
logger.info("Running " + numTries + " iterations of ANTLR evaluation");
long antlrStart = System.currentTimeMillis();
for (int i=0; i<numTries; i++) {
RetargetingResult result = RetargetingExprUtil.evaluateExpression(expr, user, System.currentTimeMillis(), segmentMap, true, true);
assertFalse(result.isMatch());
}
long elapsed = System.currentTimeMillis() - antlrStart;
logger.info("ANTLR evaluation elapsed: " + elapsed + "ms");
// Evaluate segments
logger.info("Running " + numTries + " iterations of JDK evaluation");
long jdkStart = System.currentTimeMillis();
for (int i=0; i<numTries; i++) {
Optional<Segment> segmentOpt = segments.stream().filter(s -> user.isInSegment(s, 0, jdkStart)).findFirst();
assertFalse(segmentOpt.isPresent());
}
elapsed = System.currentTimeMillis() - jdkStart;
logger.info("JDK evaluation elapsed: " + elapsed + "ms");
}
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running dataxu.rt.services.retargeting.impl.RetargetingServiceImplTest
2015-11-04 22:23:07,636 INFO [main] (DxDatabaseCluster.java:275) - Database cluster is now active.
2015-11-04 22:23:09,265 INFO [main] (CurrencyService.java:161) - Refreshing curriencies...
2015-11-04 22:23:09,287 INFO [main] (CurrencyService.java:168) - Swapped in new currency exchange rates with 6 currencies.
2015-11-04 22:23:09,287 INFO [main] (CurrencyService.java:169) - Currency refresh completed in 22 ms
2015-11-04 22:23:09,289 INFO [main] (ReschedulableCache.java:56) - Scheduling TimerTask with configuration: TimerTaskConfiguration [maxInitialDelay=60 seconds, initialOffsetFactor=1.0, period=60 seconds, timerTaskClass=dataxu.rt.services.budget.CurrencyService.CurrencyRefreshTask]
2015-11-04 22:23:09,320 INFO [main] (RetargetingServiceImplTest.java:324) - Expr string: ( ( audience aud36 [ segment 36 ] ) or ( audience aud63 [ segment 63 ] ) or ( audience aud84 [ segment 84 ] ) or ( audience aud94 [ segment 94 ] ) or ( audience aud8 [ segment 8 ] ) or ( audience aud18 [ segment 18 ] ) or ( audience aud41 [ segment 41 ] ) or ( audience aud38 [ segment 38 ] ) or ( audience aud3 [ segment 3 ] ) or ( audience aud98 [ segment 98 ] ) or ( audience aud99 [ segment 99 ] ) or ( audience aud67 [ segment 67 ] ) or ( audience aud77 [ segment 77 ] ) or ( audience aud34 [ segment 34 ] ) or ( audience aud64 [ segment 64 ] ) or ( audience aud6 [ segment 6 ] ) or ( audience aud56 [ segment 56 ] ) or ( audience aud81 [ segment 81 ] ) or ( audience aud20 [ segment 20 ] ) or ( audience aud58 [ segment 58 ] ) or ( audience aud87 [ segment 87 ] ) or ( audience aud79 [ segment 79 ] ) or ( audience aud80 [ segment 80 ] ) or ( audience aud24 [ segment 24 ] ) or ( audience aud97 [ segment 97 ] ) or ( audience aud13 [ segment 13 ] ) or ( audience aud46 [ segment 46 ] ) or ( audience aud62 [ segment 62 ] ) or ( audience aud83 [ segment 83 ] ) or ( audience aud60 [ segment 60 ] ) or ( audience aud96 [ segment 96 ] ) or ( audience aud54 [ segment 54 ] ) or ( audience aud16 [ segment 16 ] ) or ( audience aud25 [ segment 25 ] ) or ( audience aud55 [ segment 55 ] ) or ( audience aud29 [ segment 29 ] ) or ( audience aud71 [ segment 71 ] ) or ( audience aud65 [ segment 65 ] ) or ( audience aud72 [ segment 72 ] ) or ( audience aud15 [ segment 15 ] ) or ( audience aud28 [ segment 28 ] ) or ( audience aud35 [ segment 35 ] ) or ( audience aud52 [ segment 52 ] ) or ( audience aud88 [ segment 88 ] ) or ( audience aud42 [ segment 42 ] ) or ( audience aud4 [ segment 4 ] ) or ( audience aud92 [ segment 92 ] ) or ( audience aud7 [ segment 7 ] ) or ( audience aud2 [ segment 2 ] ) or ( audience aud21 [ segment 21 ] ) or ( audience aud51 [ segment 51 ] ) or ( audience aud0 [ segment 0 ] ) or ( audience aud48 [ segment 48 ] ) or ( audience aud73 [ segment 73 ] ) or ( audience aud95 [ segment 95 ] ) or ( audience aud9 [ segment 9 ] ) or ( audience aud93 [ segment 93 ] ) or ( audience aud17 [ segment 17 ] ) or ( audience aud12 [ segment 12 ] ) or ( audience aud40 [ segment 40 ] ) or ( audience aud82 [ segment 82 ] ) or ( audience aud26 [ segment 26 ] ) or ( audience aud90 [ segment 90 ] ) or ( audience aud74 [ segment 74 ] ) or ( audience aud23 [ segment 23 ] ) or ( audience aud32 [ segment 32 ] ) or ( audience aud14 [ segment 14 ] ) or ( audience aud10 [ segment 10 ] ) or ( audience aud45 [ segment 45 ] ) or ( audience aud39 [ segment 39 ] ) or ( audience aud91 [ segment 91 ] ) or ( audience aud66 [ segment 66 ] ) or ( audience aud76 [ segment 76 ] ) or ( audience aud43 [ segment 43 ] ) or ( audience aud53 [ segment 53 ] ) or ( audience aud11 [ segment 11 ] ) or ( audience aud33 [ segment 33 ] ) or ( audience aud49 [ segment 49 ] ) or ( audience aud44 [ segment 44 ] ) or ( audience aud5 [ segment 5 ] ) or ( audience aud27 [ segment 27 ] ) or ( audience aud31 [ segment 31 ] ) or ( audience aud85 [ segment 85 ] ) or ( audience aud30 [ segment 30 ] ) or ( audience aud61 [ segment 61 ] ) or ( audience aud47 [ segment 47 ] ) or ( audience aud1 [ segment 1 ] ) or ( audience aud70 [ segment 70 ] ) or ( audience aud69 [ segment 69 ] ) or ( audience aud75 [ segment 75 ] ) or ( audience aud86 [ segment 86 ] ) or ( audience aud59 [ segment 59 ] ) or ( audience aud78 [ segment 78 ] ) or ( audience aud22 [ segment 22 ] ) or ( audience aud89 [ segment 89 ] ) or ( audience aud50 [ segment 50 ] ) or ( audience aud37 [ segment 37 ] ) or ( audience aud19 [ segment 19 ] ) or ( audience aud57 [ segment 57 ] ) or ( audience aud68 [ segment 68 ] ) )
2015-11-04 22:23:09,533 INFO [main] (RetargetingServiceImplTest.java:329) - Creating user user1 with empty segment data
2015-11-04 22:23:09,554 INFO [main] (RetargetingServiceImplTest.java:336) - Running 100000 iterations of ANTLR evaluation
2015-11-04 22:23:14,334 INFO [main] (RetargetingServiceImplTest.java:344) - ANTLR evaluation elapsed: 4779ms
2015-11-04 22:23:14,335 INFO [main] (RetargetingServiceImplTest.java:347) - Running 100000 iterations of JDK evaluation
2015-11-04 22:23:14,562 INFO [main] (RetargetingServiceImplTest.java:355) - JDK evaluation elapsed: 227ms
2015-11-04 22:23:14,562 INFO [main] (ThreadPool.java:101) - Retargeting Expression Thread Pool: Interrupting all threads
2015-11-04 22:23:16,571 INFO [main] (DxDatabaseCluster.java:310) - Database cluster is now inactive.
Tests run: 6, Failures: 0, Errors: 0, Skipped: 5, Time elapsed: 13.439 sec
Results :
Tests run: 6, Failures: 0, Errors: 0, Skipped: 5
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment