| OLD | NEW |
| (Empty) |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 package org.chromium.base; | |
| 6 | |
| 7 import android.os.Process; | |
| 8 import android.os.SystemClock; | |
| 9 import android.test.InstrumentationTestCase; | |
| 10 import android.test.suitebuilder.annotation.SmallTest; | |
| 11 | |
| 12 import org.chromium.base.library_loader.LibraryLoader; | |
| 13 import org.chromium.base.library_loader.LibraryProcessType; | |
| 14 import org.chromium.base.test.util.Feature; | |
| 15 | |
| 16 /** | |
| 17 * Tests for {@link EarlyTraceEvent}. | |
| 18 */ | |
| 19 public class EarlyTraceEventTest extends InstrumentationTestCase { | |
| 20 private static final String EVENT_NAME = "MyEvent"; | |
| 21 private static final String EVENT_NAME2 = "MyOtherEvent"; | |
| 22 | |
| 23 @Override | |
| 24 protected void setUp() throws Exception { | |
| 25 super.setUp(); | |
| 26 LibraryLoader.get(LibraryProcessType.PROCESS_BROWSER) | |
| 27 .ensureInitialized(getInstrumentation().getTargetContext()); | |
| 28 | |
| 29 EarlyTraceEvent.sState = EarlyTraceEvent.STATE_DISABLED; | |
| 30 EarlyTraceEvent.sCompletedEvents = null; | |
| 31 EarlyTraceEvent.sPendingEvents = null; | |
| 32 } | |
| 33 | |
| 34 @SmallTest | |
| 35 @Feature({"Android-AppBase"}) | |
| 36 public void testCanRecordEvent() { | |
| 37 EarlyTraceEvent.enable(); | |
| 38 long myThreadId = Process.myTid(); | |
| 39 long beforeMs = SystemClock.elapsedRealtime(); | |
| 40 EarlyTraceEvent.begin(EVENT_NAME); | |
| 41 EarlyTraceEvent.end(EVENT_NAME); | |
| 42 long afterMs = SystemClock.elapsedRealtime(); | |
| 43 | |
| 44 assertEquals(1, EarlyTraceEvent.sCompletedEvents.size()); | |
| 45 assertTrue(EarlyTraceEvent.sPendingEvents.isEmpty()); | |
| 46 EarlyTraceEvent.Event event = EarlyTraceEvent.sCompletedEvents.get(0); | |
| 47 assertEquals(EVENT_NAME, event.mName); | |
| 48 assertEquals(myThreadId, event.mThreadId); | |
| 49 assertTrue(beforeMs <= event.mBeginTimeMs && event.mBeginTimeMs <= after
Ms); | |
| 50 assertTrue(event.mBeginTimeMs <= event.mEndTimeMs); | |
| 51 assertTrue(beforeMs <= event.mEndTimeMs && event.mEndTimeMs <= afterMs); | |
| 52 } | |
| 53 | |
| 54 @SmallTest | |
| 55 @Feature({"Android-AppBase"}) | |
| 56 public void testIncompleteEvent() { | |
| 57 EarlyTraceEvent.enable(); | |
| 58 EarlyTraceEvent.begin(EVENT_NAME); | |
| 59 | |
| 60 assertTrue(EarlyTraceEvent.sCompletedEvents.isEmpty()); | |
| 61 assertEquals(1, EarlyTraceEvent.sPendingEvents.size()); | |
| 62 EarlyTraceEvent.Event event = EarlyTraceEvent.sPendingEvents.get(EVENT_N
AME); | |
| 63 assertEquals(EVENT_NAME, event.mName); | |
| 64 } | |
| 65 | |
| 66 @SmallTest | |
| 67 @Feature({"Android-AppBase"}) | |
| 68 public void testNoDuplicatePendingEvents() { | |
| 69 EarlyTraceEvent.enable(); | |
| 70 EarlyTraceEvent.begin(EVENT_NAME); | |
| 71 try { | |
| 72 EarlyTraceEvent.begin(EVENT_NAME); | |
| 73 } catch (IllegalArgumentException e) { | |
| 74 // Expected. | |
| 75 return; | |
| 76 } | |
| 77 fail(); | |
| 78 } | |
| 79 | |
| 80 @SmallTest | |
| 81 @Feature({"Android-AppBase"}) | |
| 82 public void testIgnoreEventsWhenDisabled() { | |
| 83 EarlyTraceEvent.begin(EVENT_NAME); | |
| 84 EarlyTraceEvent.end(EVENT_NAME); | |
| 85 assertNull(EarlyTraceEvent.sCompletedEvents); | |
| 86 } | |
| 87 | |
| 88 @SmallTest | |
| 89 @Feature({"Android-AppBase"}) | |
| 90 public void testIgnoreNewEventsWhenFinishing() { | |
| 91 EarlyTraceEvent.enable(); | |
| 92 EarlyTraceEvent.begin(EVENT_NAME); | |
| 93 EarlyTraceEvent.disable(); | |
| 94 | |
| 95 assertEquals(EarlyTraceEvent.STATE_FINISHING, EarlyTraceEvent.sState); | |
| 96 EarlyTraceEvent.begin(EVENT_NAME2); | |
| 97 EarlyTraceEvent.end(EVENT_NAME2); | |
| 98 | |
| 99 assertEquals(1, EarlyTraceEvent.sPendingEvents.size()); | |
| 100 assertTrue(EarlyTraceEvent.sCompletedEvents.isEmpty()); | |
| 101 } | |
| 102 | |
| 103 @SmallTest | |
| 104 @Feature({"Android-AppBase"}) | |
| 105 public void testFinishingToFinished() { | |
| 106 EarlyTraceEvent.enable(); | |
| 107 EarlyTraceEvent.begin(EVENT_NAME); | |
| 108 EarlyTraceEvent.disable(); | |
| 109 | |
| 110 assertEquals(EarlyTraceEvent.STATE_FINISHING, EarlyTraceEvent.sState); | |
| 111 EarlyTraceEvent.begin(EVENT_NAME2); | |
| 112 EarlyTraceEvent.end(EVENT_NAME2); | |
| 113 EarlyTraceEvent.end(EVENT_NAME); | |
| 114 | |
| 115 assertEquals(EarlyTraceEvent.STATE_FINISHED, EarlyTraceEvent.sState); | |
| 116 } | |
| 117 | |
| 118 @SmallTest | |
| 119 @Feature({"Android-AppBase"}) | |
| 120 public void testCannotBeReenabledOnceFinished() { | |
| 121 EarlyTraceEvent.enable(); | |
| 122 EarlyTraceEvent.begin(EVENT_NAME); | |
| 123 EarlyTraceEvent.end(EVENT_NAME); | |
| 124 EarlyTraceEvent.disable(); | |
| 125 assertEquals(EarlyTraceEvent.STATE_FINISHED, EarlyTraceEvent.sState); | |
| 126 | |
| 127 EarlyTraceEvent.enable(); | |
| 128 assertEquals(EarlyTraceEvent.STATE_FINISHED, EarlyTraceEvent.sState); | |
| 129 } | |
| 130 | |
| 131 @SmallTest | |
| 132 @Feature({"Android-AppBase"}) | |
| 133 public void testThreadIdIsRecorded() throws Exception { | |
| 134 EarlyTraceEvent.enable(); | |
| 135 final long[] threadId = {0}; | |
| 136 | |
| 137 Thread thread = new Thread() { | |
| 138 @Override | |
| 139 public void run() { | |
| 140 TraceEvent.begin(EVENT_NAME); | |
| 141 threadId[0] = Process.myTid(); | |
| 142 TraceEvent.end(EVENT_NAME); | |
| 143 } | |
| 144 }; | |
| 145 thread.start(); | |
| 146 thread.join(); | |
| 147 | |
| 148 assertEquals(1, EarlyTraceEvent.sCompletedEvents.size()); | |
| 149 EarlyTraceEvent.Event event = EarlyTraceEvent.sCompletedEvents.get(0); | |
| 150 assertEquals(threadId[0], event.mThreadId); | |
| 151 } | |
| 152 } | |
| OLD | NEW |