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 |