Last active
November 5, 2015 03:24
-
-
Save rtitle/b8208419e2318de80f47 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@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