]> git.sesse.net Git - casparcg/blob - dependencies64/cef/linux/tests/ceftests/tracing_unittest.cc
76389b81f78777b4f5fe855c9b4fd4f4d6899ed5
[casparcg] / dependencies64 / cef / linux / tests / ceftests / tracing_unittest.cc
1 // Copyright (c) 2013 The Chromium Embedded Framework Authors. All rights
2 // reserved. Use of this source code is governed by a BSD-style license that
3 // can be found in the LICENSE file.
4
5 #include "include/base/cef_bind.h"
6 #include "include/cef_file_util.h"
7 #include "include/cef_task.h"
8 #include "include/cef_trace.h"
9 #include "include/cef_waitable_event.h"
10 #include "include/wrapper/cef_closure_task.h"
11 #include "tests/ceftests/file_util.h"
12 #include "tests/ceftests/test_handler.h"
13 #include "tests/gtest/include/gtest/gtest.h"
14
15 // Use the CEF version of the TRACE_* macros instead of the Chromium version.
16 #undef USING_CHROMIUM_INCLUDES
17 #include "include/base/cef_trace_event.h"
18
19 enum TracingTestType {
20   TT_TRACE_EVENT0,
21   TT_TRACE_EVENT1,
22   TT_TRACE_EVENT2,
23   TT_TRACE_EVENT_INSTANT0,
24   TT_TRACE_EVENT_INSTANT1,
25   TT_TRACE_EVENT_INSTANT2,
26   TT_TRACE_EVENT_COPY_INSTANT0,
27   TT_TRACE_EVENT_COPY_INSTANT1,
28   TT_TRACE_EVENT_COPY_INSTANT2,
29   TT_TRACE_EVENT_BEGIN0,
30   TT_TRACE_EVENT_BEGIN1,
31   TT_TRACE_EVENT_BEGIN2,
32   TT_TRACE_EVENT_COPY_BEGIN0,
33   TT_TRACE_EVENT_COPY_BEGIN1,
34   TT_TRACE_EVENT_COPY_BEGIN2,
35   TT_TRACE_EVENT_END0,
36   TT_TRACE_EVENT_END1,
37   TT_TRACE_EVENT_END2,
38   TT_TRACE_EVENT_COPY_END0,
39   TT_TRACE_EVENT_COPY_END1,
40   TT_TRACE_EVENT_COPY_END2,
41   TT_TRACE_COUNTER1,
42   TT_TRACE_COPY_COUNTER1,
43   TT_TRACE_COUNTER2,
44   TT_TRACE_COPY_COUNTER2,
45   TT_TRACE_COUNTER_ID1,
46   TT_TRACE_COPY_COUNTER_ID1,
47   TT_TRACE_COUNTER_ID2,
48   TT_TRACE_COPY_COUNTER_ID2,
49   TT_TRACE_EVENT_ASYNC_BEGIN0,
50   TT_TRACE_EVENT_ASYNC_BEGIN1,
51   TT_TRACE_EVENT_ASYNC_BEGIN2,
52   TT_TRACE_EVENT_COPY_ASYNC_BEGIN0,
53   TT_TRACE_EVENT_COPY_ASYNC_BEGIN1,
54   TT_TRACE_EVENT_COPY_ASYNC_BEGIN2,
55   TT_TRACE_EVENT_ASYNC_STEP_INTO0,
56   TT_TRACE_EVENT_ASYNC_STEP_INTO1,
57   TT_TRACE_EVENT_COPY_ASYNC_STEP_INTO0,
58   TT_TRACE_EVENT_COPY_ASYNC_STEP_INTO1,
59   TT_TRACE_EVENT_ASYNC_STEP_PAST0,
60   TT_TRACE_EVENT_ASYNC_STEP_PAST1,
61   TT_TRACE_EVENT_COPY_ASYNC_STEP_PAST0,
62   TT_TRACE_EVENT_COPY_ASYNC_STEP_PAST1,
63   TT_TRACE_EVENT_ASYNC_END0,
64   TT_TRACE_EVENT_ASYNC_END1,
65   TT_TRACE_EVENT_ASYNC_END2,
66   TT_TRACE_EVENT_COPY_ASYNC_END0,
67   TT_TRACE_EVENT_COPY_ASYNC_END1,
68   TT_TRACE_EVENT_COPY_ASYNC_END2
69 };
70
71 const char kTraceTestCategory[] = "test_category";
72
73 class TracingTestHandler : public CefEndTracingCallback,
74                            public CefCompletionCallback {
75  public:
76   TracingTestHandler(TracingTestType type, const char* trace_type)
77       : trace_type_(trace_type),
78         type_(type) {
79     completion_event_ = CefWaitableEvent::CreateWaitableEvent(true, false);
80   }
81
82   void ReadTracingFile(const std::string& file_path) {
83     EXPECT_FILE_THREAD();
84
85     EXPECT_TRUE(file_util::ReadFileToString(file_path, &trace_data_));
86     EXPECT_TRUE(CefDeleteFile(file_path, false));
87
88     completion_event_->Signal();
89   }
90
91   // CefEndTracingCallback method:
92   void OnEndTracingComplete(const CefString& tracing_file) override {
93     EXPECT_UI_THREAD();
94
95     CefPostTask(TID_FILE,
96         base::Bind(&TracingTestHandler::ReadTracingFile, this, tracing_file));
97   }
98
99   void RunTracing() {
100     EXPECT_UI_THREAD();
101
102     // Results in a call to OnComplete.
103     CefBeginTracing(kTraceTestCategory, this);
104   }
105
106   void OnComplete() override {
107     EXPECT_UI_THREAD();
108
109     switch (type_) {
110       case TT_TRACE_EVENT0: {
111         TRACE_EVENT0(kTraceTestCategory, "TT_TRACE_EVENT0");
112         } break;
113       case TT_TRACE_EVENT1: {
114         TRACE_EVENT1(kTraceTestCategory, "TT_TRACE_EVENT1", "arg1", 1);
115         } break;
116       case TT_TRACE_EVENT2: {
117         TRACE_EVENT2(kTraceTestCategory, "TT_TRACE_EVENT2", "arg1", 1,
118                      "arg2", 2);
119         } break;
120       case TT_TRACE_EVENT_INSTANT0:
121         TRACE_EVENT_INSTANT0(kTraceTestCategory,
122                              "TT_TRACE_EVENT_INSTANT0");
123         break;
124       case TT_TRACE_EVENT_INSTANT1:
125         TRACE_EVENT_INSTANT1(kTraceTestCategory, "TT_TRACE_EVENT_INSTANT1",
126                              "arg1", 1);
127         break;
128       case TT_TRACE_EVENT_INSTANT2:
129         TRACE_EVENT_INSTANT2(kTraceTestCategory, "TT_TRACE_EVENT_INSTANT2",
130                              "arg1", 1, "arg2", 2);
131         break;
132       case TT_TRACE_EVENT_COPY_INSTANT0:
133         TRACE_EVENT_COPY_INSTANT0(kTraceTestCategory,
134                                   "TT_TRACE_EVENT_COPY_INSTANT0");
135         break;
136       case TT_TRACE_EVENT_COPY_INSTANT1:
137         TRACE_EVENT_COPY_INSTANT1(kTraceTestCategory,
138                                   "TT_TRACE_EVENT_COPY_INSTANT1",
139                                   "arg1", 1);
140         break;
141       case TT_TRACE_EVENT_COPY_INSTANT2:
142         TRACE_EVENT_COPY_INSTANT2(kTraceTestCategory,
143                                   "TT_TRACE_EVENT_COPY_INSTANT2",
144                                   "arg1", 1, "arg2", 2);
145         break;
146       case TT_TRACE_EVENT_BEGIN0:
147         TRACE_EVENT_BEGIN0(kTraceTestCategory, "TT_TRACE_EVENT_BEGIN0");
148         break;
149       case TT_TRACE_EVENT_BEGIN1:
150         TRACE_EVENT_BEGIN1(kTraceTestCategory, "TT_TRACE_EVENT_BEGIN1",
151                            "arg1", 1);
152         break;
153       case TT_TRACE_EVENT_BEGIN2:
154         TRACE_EVENT_BEGIN2(kTraceTestCategory, "TT_TRACE_EVENT_BEGIN2",
155                            "arg1", 1, "arg2", 2);
156         break;
157       case TT_TRACE_EVENT_COPY_BEGIN0:
158         TRACE_EVENT_COPY_BEGIN0(kTraceTestCategory,
159                                 "TT_TRACE_EVENT_COPY_BEGIN0");
160         break;
161       case TT_TRACE_EVENT_COPY_BEGIN1:
162         TRACE_EVENT_COPY_BEGIN1(kTraceTestCategory,
163                                 "TT_TRACE_EVENT_COPY_BEGIN1",
164                                 "arg1", 1);
165         break;
166       case TT_TRACE_EVENT_COPY_BEGIN2:
167         TRACE_EVENT_COPY_BEGIN2(kTraceTestCategory,
168                                 "TT_TRACE_EVENT_COPY_BEGIN2",
169                                 "arg1", 1, "arg2", 2);
170         break;
171       case TT_TRACE_EVENT_END0:
172         TRACE_EVENT_END0(kTraceTestCategory, "TT_TRACE_EVENT_END0");
173         break;
174       case TT_TRACE_EVENT_END1:
175         TRACE_EVENT_END1(kTraceTestCategory, "TT_TRACE_EVENT_END1",
176                              "arg1", 1);
177         break;
178       case TT_TRACE_EVENT_END2:
179         TRACE_EVENT_END2(kTraceTestCategory, "TT_TRACE_EVENT_END2",
180                          "arg1", 1, "arg2", 2);
181         break;
182       case TT_TRACE_EVENT_COPY_END0:
183         TRACE_EVENT_COPY_END0(kTraceTestCategory,
184                               "TT_TRACE_EVENT_COPY_END0");
185         break;
186       case TT_TRACE_EVENT_COPY_END1:
187         TRACE_EVENT_COPY_END1(kTraceTestCategory,
188                               "TT_TRACE_EVENT_COPY_END1", "arg1", 1);
189         break;
190       case TT_TRACE_EVENT_COPY_END2:
191         TRACE_EVENT_COPY_END2(kTraceTestCategory,
192                               "TT_TRACE_EVENT_COPY_END2", "arg1", 1, "arg2", 2);
193         break;
194       case TT_TRACE_COUNTER1:
195         TRACE_COUNTER1(kTraceTestCategory, "TT_TRACE_COUNTER1", 5);
196         break;
197       case TT_TRACE_COPY_COUNTER1:
198         TRACE_COPY_COUNTER1(kTraceTestCategory, "TT_TRACE_COPY_COUNTER1", 5);
199         break;
200       case TT_TRACE_COUNTER2:
201         TRACE_COUNTER2(kTraceTestCategory, "TT_TRACE_COUNTER2", "val1", 5,
202                        "val2", 10);
203         break;
204       case TT_TRACE_COPY_COUNTER2:
205         TRACE_COPY_COUNTER2(kTraceTestCategory, "TT_TRACE_COPY_COUNTER2",
206                             "val1", 5, "val2", 10);
207         break;
208       case TT_TRACE_COUNTER_ID1:
209         TRACE_COUNTER_ID1(kTraceTestCategory, "TT_TRACE_COUNTER_ID1", 100, 5);
210         break;
211       case TT_TRACE_COPY_COUNTER_ID1:
212         TRACE_COPY_COUNTER_ID1(kTraceTestCategory,
213                                "TT_TRACE_COPY_COUNTER_ID1", 100, 5);
214         break;
215       case TT_TRACE_COUNTER_ID2:
216         TRACE_COUNTER_ID2(kTraceTestCategory, "TT_TRACE_COUNTER_ID2", 100,
217                           "val1", 5, "val2", 10);
218         break;
219       case TT_TRACE_COPY_COUNTER_ID2:
220         TRACE_COPY_COUNTER_ID2(kTraceTestCategory,
221                                "TT_TRACE_COPY_COUNTER_ID2", 100,
222                                "val1", 5, "val2", 10);
223         break;
224       case TT_TRACE_EVENT_ASYNC_BEGIN0:
225         TRACE_EVENT_ASYNC_BEGIN0(kTraceTestCategory,
226                                  "TT_TRACE_EVENT_ASYNC_BEGIN0", 100);
227         break;
228       case TT_TRACE_EVENT_ASYNC_BEGIN1:
229         TRACE_EVENT_ASYNC_BEGIN1(kTraceTestCategory,
230                                  "TT_TRACE_EVENT_ASYNC_BEGIN1", 100, "arg1", 1);
231         break;
232       case TT_TRACE_EVENT_ASYNC_BEGIN2:
233         TRACE_EVENT_ASYNC_BEGIN2(kTraceTestCategory,
234                                  "TT_TRACE_EVENT_ASYNC_BEGIN2",
235                                  100, "arg1", 1, "arg2", 2);
236         break;
237       case TT_TRACE_EVENT_COPY_ASYNC_BEGIN0:
238         TRACE_EVENT_COPY_ASYNC_BEGIN0(kTraceTestCategory,
239                                       "TT_TRACE_EVENT_COPY_ASYNC_BEGIN0",
240                                       100);
241         break;
242       case TT_TRACE_EVENT_COPY_ASYNC_BEGIN1:
243         TRACE_EVENT_COPY_ASYNC_BEGIN1(kTraceTestCategory,
244                                       "TT_TRACE_EVENT_COPY_ASYNC_BEGIN1",
245                                       100, "arg1", 1);
246         break;
247       case TT_TRACE_EVENT_COPY_ASYNC_BEGIN2:
248         TRACE_EVENT_COPY_ASYNC_BEGIN2(kTraceTestCategory,
249                                       "TT_TRACE_EVENT_COPY_ASYNC_BEGIN2",
250                                       100, "arg1", 1, "arg2", 2);
251         break;
252       case TT_TRACE_EVENT_ASYNC_STEP_INTO0:
253         TRACE_EVENT_ASYNC_STEP_INTO0(
254             kTraceTestCategory, "TT_TRACE_EVENT_ASYNC_STEP_INTO0", 100, 1000);
255         break;
256       case TT_TRACE_EVENT_ASYNC_STEP_INTO1:
257         TRACE_EVENT_ASYNC_STEP_INTO1(
258             kTraceTestCategory, "TT_TRACE_EVENT_ASYNC_STEP_INTO1", 100, 1000,
259             "arg1", 1);
260         break;
261       case TT_TRACE_EVENT_COPY_ASYNC_STEP_INTO0:
262         TRACE_EVENT_COPY_ASYNC_STEP_INTO0(
263             kTraceTestCategory, "TT_TRACE_EVENT_COPY_ASYNC_STEP_INTO0", 100,
264             1000);
265         break;
266       case TT_TRACE_EVENT_COPY_ASYNC_STEP_INTO1:
267         TRACE_EVENT_COPY_ASYNC_STEP_INTO1(
268             kTraceTestCategory, "TT_TRACE_EVENT_COPY_ASYNC_STEP_INTO1", 100,
269             1000, "arg1", 1);
270         break;
271       case TT_TRACE_EVENT_ASYNC_STEP_PAST0:
272         TRACE_EVENT_ASYNC_STEP_PAST0(
273             kTraceTestCategory, "TT_TRACE_EVENT_ASYNC_STEP_PAST0", 100, 1000);
274         break;
275       case TT_TRACE_EVENT_ASYNC_STEP_PAST1:
276         TRACE_EVENT_ASYNC_STEP_PAST1(
277             kTraceTestCategory, "TT_TRACE_EVENT_ASYNC_STEP_PAST1", 100, 1000,
278             "arg1", 1);
279         break;
280       case TT_TRACE_EVENT_COPY_ASYNC_STEP_PAST0:
281         TRACE_EVENT_COPY_ASYNC_STEP_PAST0(
282             kTraceTestCategory, "TT_TRACE_EVENT_COPY_ASYNC_STEP_PAST0", 100,
283             1000);
284         break;
285       case TT_TRACE_EVENT_COPY_ASYNC_STEP_PAST1:
286         TRACE_EVENT_COPY_ASYNC_STEP_PAST1(
287             kTraceTestCategory, "TT_TRACE_EVENT_COPY_ASYNC_STEP_PAST1", 100,
288             1000, "arg1", 1);
289         break;
290       case TT_TRACE_EVENT_ASYNC_END0:
291         TRACE_EVENT_ASYNC_END0(kTraceTestCategory,
292                                "TT_TRACE_EVENT_ASYNC_END0", 100);
293         break;
294       case TT_TRACE_EVENT_ASYNC_END1:
295         TRACE_EVENT_ASYNC_END1(kTraceTestCategory,
296                                "TT_TRACE_EVENT_ASYNC_END1", 100,
297                                "arg1", 1);
298         break;
299       case TT_TRACE_EVENT_ASYNC_END2:
300         TRACE_EVENT_ASYNC_END2(kTraceTestCategory,
301                                "TT_TRACE_EVENT_ASYNC_END2", 100,
302                                "arg1", 1, "arg2", 2);
303       case TT_TRACE_EVENT_COPY_ASYNC_END0:
304         TRACE_EVENT_COPY_ASYNC_END0(kTraceTestCategory,
305                                     "TT_TRACE_EVENT_COPY_ASYNC_END0",
306                                     100);
307         break;
308       case TT_TRACE_EVENT_COPY_ASYNC_END1:
309         TRACE_EVENT_COPY_ASYNC_END1(kTraceTestCategory,
310                                     "TT_TRACE_EVENT_COPY_ASYNC_END1",
311                                     100, "arg1", 1);
312         break;
313       case TT_TRACE_EVENT_COPY_ASYNC_END2:
314         TRACE_EVENT_COPY_ASYNC_END2(kTraceTestCategory,
315                                     "TT_TRACE_EVENT_COPY_ASYNC_END2",
316                                     100, "arg1", 1, "arg2", 2);
317         break;
318     }
319
320     // Results in a call to OnEndTracingComplete.
321     CefEndTracing(CefString(), this);
322   }
323
324   void ExecuteTest() {
325     // Run the test.
326     CefPostTask(TID_UI, base::Bind(&TracingTestHandler::RunTracing, this));
327
328     // Wait for the test to complete.
329     completion_event_->Wait();
330
331     // Verify the results.
332     EXPECT_TRUE(!trace_data_.empty());
333     EXPECT_TRUE(trace_type_ != NULL);
334     EXPECT_TRUE(strstr(trace_data_.c_str(), trace_type_) != NULL);
335   }
336
337  private:
338   ~TracingTestHandler() override {}
339
340   // Handle used to notify when the test is complete.
341   CefRefPtr<CefWaitableEvent> completion_event_;
342
343   const char* trace_type_;
344   TracingTestType type_;
345   std::string trace_data_;
346
347   IMPLEMENT_REFCOUNTING(TracingTestHandler);
348 };
349
350 // Helper for defining tracing tests.
351 #define TRACING_TEST(name, test_type) \
352     TEST(TracingTest, name) { \
353       CefRefPtr<TracingTestHandler> handler = \
354           new TracingTestHandler(test_type, #test_type); \
355       handler->ExecuteTest(); \
356     }
357
358 // Define the tests.
359 TRACING_TEST(TraceEvent0, TT_TRACE_EVENT0);
360 TRACING_TEST(TraceEvent1, TT_TRACE_EVENT1);
361 TRACING_TEST(TraceEvent2, TT_TRACE_EVENT2);
362 TRACING_TEST(TraceEventInstant0, TT_TRACE_EVENT_INSTANT0);
363 TRACING_TEST(TraceEventInstant1, TT_TRACE_EVENT_INSTANT1);
364 TRACING_TEST(TraceEventInstant2, TT_TRACE_EVENT_INSTANT2);
365 TRACING_TEST(TraceEventCopyInstant0, TT_TRACE_EVENT_COPY_INSTANT0);
366 TRACING_TEST(TraceEventCopyInstant1, TT_TRACE_EVENT_COPY_INSTANT1);
367 TRACING_TEST(TraceEventCopyInstant2, TT_TRACE_EVENT_COPY_INSTANT2);
368 TRACING_TEST(TraceEventBegin0, TT_TRACE_EVENT_BEGIN0);
369 TRACING_TEST(TraceEventBegin1, TT_TRACE_EVENT_BEGIN1);
370 TRACING_TEST(TraceEventBegin2, TT_TRACE_EVENT_BEGIN2);
371 TRACING_TEST(TraceEventCopyBegin0, TT_TRACE_EVENT_COPY_BEGIN0);
372 TRACING_TEST(TraceEventCopyBegin1, TT_TRACE_EVENT_COPY_BEGIN1);
373 TRACING_TEST(TraceEventCopyBegin2, TT_TRACE_EVENT_COPY_BEGIN2);
374 TRACING_TEST(TraceEventEnd0, TT_TRACE_EVENT_END0);
375 TRACING_TEST(TraceEventEnd1, TT_TRACE_EVENT_END1);
376 TRACING_TEST(TraceEventEnd2, TT_TRACE_EVENT_END2);
377 TRACING_TEST(TraceEventCopyEnd0, TT_TRACE_EVENT_COPY_END0);
378 TRACING_TEST(TraceEventCopyEnd1, TT_TRACE_EVENT_COPY_END1);
379 TRACING_TEST(TraceEventCopyEnd2, TT_TRACE_EVENT_COPY_END1);
380 TRACING_TEST(TraceCounter1, TT_TRACE_COUNTER1);
381 TRACING_TEST(TraceCopyCounter1, TT_TRACE_COPY_COUNTER1);
382 TRACING_TEST(TraceCounter2, TT_TRACE_COUNTER2);
383 TRACING_TEST(TraceCopyCounter2, TT_TRACE_COPY_COUNTER2);
384 TRACING_TEST(TraceCounterId1, TT_TRACE_COUNTER_ID1);
385 TRACING_TEST(TraceCopyCounterId1, TT_TRACE_COPY_COUNTER_ID1);
386 TRACING_TEST(TraceCounterId2, TT_TRACE_COUNTER_ID2);
387 TRACING_TEST(TraceCopyCounterId2, TT_TRACE_COPY_COUNTER_ID1);
388 TRACING_TEST(TraceEventAsyncBegin0, TT_TRACE_EVENT_ASYNC_BEGIN0);
389 TRACING_TEST(TraceEventAsyncBegin1, TT_TRACE_EVENT_ASYNC_BEGIN1);
390 TRACING_TEST(TraceEventAsyncBegin2, TT_TRACE_EVENT_ASYNC_BEGIN2);
391 TRACING_TEST(TraceEventCopyAsyncBegin0,
392              TT_TRACE_EVENT_COPY_ASYNC_BEGIN0);
393 TRACING_TEST(TraceEventCopyAsyncBegin1,
394              TT_TRACE_EVENT_COPY_ASYNC_BEGIN1);
395 TRACING_TEST(TraceEventCopyAsyncBegin2,
396              TT_TRACE_EVENT_COPY_ASYNC_BEGIN2);
397 TRACING_TEST(TraceEventAsyncStepInto0,
398              TT_TRACE_EVENT_ASYNC_STEP_INTO0);
399 TRACING_TEST(TraceEventAsyncStepInto1,
400              TT_TRACE_EVENT_ASYNC_STEP_INTO1);
401 TRACING_TEST(TraceEventCopyAsyncStepInto0,
402              TT_TRACE_EVENT_COPY_ASYNC_STEP_INTO0);
403 TRACING_TEST(TraceEventCopyAsyncStepInto1,
404              TT_TRACE_EVENT_COPY_ASYNC_STEP_INTO1);
405 TRACING_TEST(TraceEventAsyncStepPast0,
406              TT_TRACE_EVENT_ASYNC_STEP_PAST0);
407 TRACING_TEST(TraceEventAsyncStepPast1,
408              TT_TRACE_EVENT_ASYNC_STEP_PAST1);
409 TRACING_TEST(TraceEventCopyAsyncStepPast0,
410              TT_TRACE_EVENT_COPY_ASYNC_STEP_PAST0);
411 TRACING_TEST(TraceEventCopyAsyncStepPast1,
412              TT_TRACE_EVENT_COPY_ASYNC_STEP_PAST1);
413 TRACING_TEST(TraceEventAsyncEnd0, TT_TRACE_EVENT_ASYNC_END0);
414 TRACING_TEST(TraceEventAsyncEnd1, TT_TRACE_EVENT_ASYNC_END1);
415 TRACING_TEST(TraceEventAsyncEnd2, TT_TRACE_EVENT_ASYNC_END2);
416 TRACING_TEST(TraceEventCopyAsyncEnd0, TT_TRACE_EVENT_COPY_ASYNC_END0);
417
418
419 TEST(TracingTest, NowFromSystemTraceTime) {
420   int64 val = CefNowFromSystemTraceTime();
421   EXPECT_NE(val, 0);
422 }