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 |