Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: base/trace_event/trace_config_unittest.cc

Issue 1923533004: Tracing pre-filtering (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added test Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stddef.h> 5 #include <stddef.h>
6 6
7 #include "base/json/json_reader.h" 7 #include "base/json/json_reader.h"
8 #include "base/json/json_writer.h"
8 #include "base/macros.h" 9 #include "base/macros.h"
9 #include "base/trace_event/memory_dump_manager.h" 10 #include "base/trace_event/memory_dump_manager.h"
10 #include "base/trace_event/trace_config.h" 11 #include "base/trace_event/trace_config.h"
11 #include "base/trace_event/trace_config_memory_test_util.h" 12 #include "base/trace_event/trace_config_memory_test_util.h"
12 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
13 14
14 namespace base { 15 namespace base {
15 namespace trace_event { 16 namespace trace_event {
16 17
17 namespace { 18 namespace {
18 19
19 const char kDefaultTraceConfigString[] = 20 const char kDefaultTraceConfigString[] =
20 "{" 21 "{"
21 "\"enable_argument_filter\":false," 22 "\"enable_argument_filter\":false,"
22 "\"enable_sampling\":false," 23 "\"enable_sampling\":false,"
23 "\"enable_systrace\":false," 24 "\"enable_systrace\":false,"
24 "\"excluded_categories\":[\"*Debug\",\"*Test\"]," 25 "\"excluded_categories\":[\"*Debug\",\"*Test\"],"
25 "\"record_mode\":\"record-until-full\"" 26 "\"record_mode\":\"record-until-full\""
26 "}"; 27 "}";
27 28
28 const char kCustomTraceConfigString[] = 29 const char kCustomTraceConfigString[] =
29 "{" 30 "{"
30 "\"enable_argument_filter\":true," 31 "\"enable_argument_filter\":true,"
31 "\"enable_sampling\":true," 32 "\"enable_sampling\":true,"
32 "\"enable_systrace\":true," 33 "\"enable_systrace\":true,"
34 "\"event_filters\":["
35 "{"
36 "\"excluded_categories\":[\"unfiltered_cat\"],"
37 "\"filter_args\":{\"event_name_whitelist\":[\"a snake\",\"a dog\"]},"
38 "\"filter_predicate\":\"event_whitelist_predicate\","
39 "\"included_categories\":[\"*\"]"
40 "}"
41 "],"
33 "\"excluded_categories\":[\"excluded\",\"exc_pattern*\"]," 42 "\"excluded_categories\":[\"excluded\",\"exc_pattern*\"],"
34 "\"included_categories\":[\"included\"," 43 "\"included_categories\":[\"included\","
35 "\"inc_pattern*\"," 44 "\"inc_pattern*\","
36 "\"disabled-by-default-cc\"," 45 "\"disabled-by-default-cc\","
37 "\"disabled-by-default-memory-infra\"]," 46 "\"disabled-by-default-memory-infra\"],"
38 "\"memory_dump_config\":{" 47 "\"memory_dump_config\":{"
39 "\"heap_profiler_options\":{" 48 "\"heap_profiler_options\":{"
40 "\"breakdown_threshold_bytes\":10240" 49 "\"breakdown_threshold_bytes\":10240"
41 "}," 50 "},"
42 "\"triggers\":[" 51 "\"triggers\":["
43 "{\"mode\":\"light\",\"periodic_interval_ms\":50}," 52 "{\"mode\":\"light\",\"periodic_interval_ms\":50},"
44 "{\"mode\":\"detailed\",\"periodic_interval_ms\":1000}" 53 "{\"mode\":\"detailed\",\"periodic_interval_ms\":1000}"
45 "]" 54 "]"
46 "}," 55 "},"
47 "\"record_mode\":\"record-continuously\"," 56 "\"record_mode\":\"record-continuously\","
48 "\"synthetic_delays\":[\"test.Delay1;16\",\"test.Delay2;32\"]" 57 "\"synthetic_delays\":[\"test.Delay1;16\",\"test.Delay2;32\"]"
49 "}"; 58 "}";
50 59
51 } // namespace 60 } // namespace
52 61
53 TEST(TraceConfigTest, TraceConfigFromValidLegacyFormat) { 62 TEST(TraceConfigTest, TraceConfigFromValidLegacyFormat) {
54 // From trace options strings 63 // From trace options strings
55 TraceConfig config("", "record-until-full"); 64 TraceConfig config("", "record-until-full");
56 EXPECT_EQ(RECORD_UNTIL_FULL, config.GetTraceRecordMode()); 65 EXPECT_EQ(RECORD_UNTIL_FULL, config.GetTraceRecordMode());
57 EXPECT_FALSE(config.IsSamplingEnabled()); 66 EXPECT_FALSE(config.IsSamplingEnabled());
58 EXPECT_FALSE(config.IsSystraceEnabled()); 67 EXPECT_FALSE(config.IsSystraceEnabled());
59 EXPECT_FALSE(config.IsArgumentFilterEnabled()); 68 EXPECT_FALSE(config.IsArgumentFilterEnabled());
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
275 EXPECT_TRUE(tc.IsCategoryGroupEnabled("Category1")); 284 EXPECT_TRUE(tc.IsCategoryGroupEnabled("Category1"));
276 EXPECT_TRUE(tc.IsCategoryGroupEnabled("not-excluded-category")); 285 EXPECT_TRUE(tc.IsCategoryGroupEnabled("not-excluded-category"));
277 EXPECT_FALSE(tc.IsCategoryGroupEnabled("CategoryTest")); 286 EXPECT_FALSE(tc.IsCategoryGroupEnabled("CategoryTest"));
278 EXPECT_FALSE(tc.IsCategoryGroupEnabled("CategoryDebug")); 287 EXPECT_FALSE(tc.IsCategoryGroupEnabled("CategoryDebug"));
279 EXPECT_FALSE(tc.IsCategoryGroupEnabled("disabled-by-default-cc")); 288 EXPECT_FALSE(tc.IsCategoryGroupEnabled("disabled-by-default-cc"));
280 289
281 EXPECT_TRUE(tc.IsCategoryGroupEnabled("Category1,CategoryDebug")); 290 EXPECT_TRUE(tc.IsCategoryGroupEnabled("Category1,CategoryDebug"));
282 EXPECT_TRUE(tc.IsCategoryGroupEnabled("CategoryDebug,Category1")); 291 EXPECT_TRUE(tc.IsCategoryGroupEnabled("CategoryDebug,Category1"));
283 EXPECT_TRUE(tc.IsCategoryGroupEnabled("CategoryTest,not-excluded-category")); 292 EXPECT_TRUE(tc.IsCategoryGroupEnabled("CategoryTest,not-excluded-category"));
284 EXPECT_FALSE(tc.IsCategoryGroupEnabled("CategoryDebug,CategoryTest")); 293 EXPECT_FALSE(tc.IsCategoryGroupEnabled("CategoryDebug,CategoryTest"));
294
295 EXPECT_TRUE(tc.event_filters().empty());
285 } 296 }
286 297
287 TEST(TraceConfigTest, TraceConfigFromDict) { 298 TEST(TraceConfigTest, TraceConfigFromDict) {
288 // Passing in empty dictionary will not result in default trace config. 299 // Passing in empty dictionary will not result in default trace config.
289 DictionaryValue dict; 300 DictionaryValue dict;
290 TraceConfig tc(dict); 301 TraceConfig tc(dict);
291 EXPECT_STRNE(kDefaultTraceConfigString, tc.ToString().c_str()); 302 EXPECT_STRNE(kDefaultTraceConfigString, tc.ToString().c_str());
292 EXPECT_EQ(RECORD_UNTIL_FULL, tc.GetTraceRecordMode()); 303 EXPECT_EQ(RECORD_UNTIL_FULL, tc.GetTraceRecordMode());
293 EXPECT_FALSE(tc.IsSamplingEnabled()); 304 EXPECT_FALSE(tc.IsSamplingEnabled());
294 EXPECT_FALSE(tc.IsSystraceEnabled()); 305 EXPECT_FALSE(tc.IsSystraceEnabled());
(...skipping 29 matching lines...) Expand all
324 EXPECT_STREQ("included,inc_pattern*," 335 EXPECT_STREQ("included,inc_pattern*,"
325 "disabled-by-default-cc,disabled-by-default-memory-infra," 336 "disabled-by-default-cc,disabled-by-default-memory-infra,"
326 "-excluded,-exc_pattern*," 337 "-excluded,-exc_pattern*,"
327 "DELAY(test.Delay1;16),DELAY(test.Delay2;32)", 338 "DELAY(test.Delay1;16),DELAY(test.Delay2;32)",
328 custom_tc.ToCategoryFilterString().c_str()); 339 custom_tc.ToCategoryFilterString().c_str());
329 } 340 }
330 341
331 TEST(TraceConfigTest, TraceConfigFromValidString) { 342 TEST(TraceConfigTest, TraceConfigFromValidString) {
332 // Using some non-empty config string. 343 // Using some non-empty config string.
333 const char config_string[] = 344 const char config_string[] =
334 "{" 345 "{"
335 "\"enable_argument_filter\":true," 346 "\"enable_argument_filter\":true,"
336 "\"enable_sampling\":true," 347 "\"enable_sampling\":true,"
337 "\"enable_systrace\":true," 348 "\"enable_systrace\":true,"
349 "\"event_filters\":["
350 "{"
351 "\"excluded_categories\":[\"unfiltered_cat\"],"
352 "\"filter_args\":{\"event_name_whitelist\":[\"a snake\",\"a dog\"]},"
353 "\"filter_predicate\":\"event_whitelist_predicate\","
354 "\"included_categories\":[\"*\"]"
355 "}"
356 "],"
338 "\"excluded_categories\":[\"excluded\",\"exc_pattern*\"]," 357 "\"excluded_categories\":[\"excluded\",\"exc_pattern*\"],"
339 "\"included_categories\":[\"included\"," 358 "\"included_categories\":[\"included\","
340 "\"inc_pattern*\"," 359 "\"inc_pattern*\","
341 "\"disabled-by-default-cc\"]," 360 "\"disabled-by-default-cc\"],"
342 "\"record_mode\":\"record-continuously\"," 361 "\"record_mode\":\"record-continuously\","
343 "\"synthetic_delays\":[\"test.Delay1;16\",\"test.Delay2;32\"]" 362 "\"synthetic_delays\":[\"test.Delay1;16\",\"test.Delay2;32\"]"
344 "}"; 363 "}";
345 TraceConfig tc(config_string); 364 TraceConfig tc(config_string);
346 365
347 EXPECT_STREQ(config_string, tc.ToString().c_str()); 366 EXPECT_STREQ(config_string, tc.ToString().c_str());
348 EXPECT_EQ(RECORD_CONTINUOUSLY, tc.GetTraceRecordMode()); 367 EXPECT_EQ(RECORD_CONTINUOUSLY, tc.GetTraceRecordMode());
349 EXPECT_TRUE(tc.IsSamplingEnabled()); 368 EXPECT_TRUE(tc.IsSamplingEnabled());
350 EXPECT_TRUE(tc.IsSystraceEnabled()); 369 EXPECT_TRUE(tc.IsSystraceEnabled());
351 EXPECT_TRUE(tc.IsArgumentFilterEnabled()); 370 EXPECT_TRUE(tc.IsArgumentFilterEnabled());
352 EXPECT_STREQ("included,inc_pattern*,disabled-by-default-cc,-excluded," 371 EXPECT_STREQ("included,inc_pattern*,disabled-by-default-cc,-excluded,"
353 "-exc_pattern*,DELAY(test.Delay1;16),DELAY(test.Delay2;32)", 372 "-exc_pattern*,DELAY(test.Delay1;16),DELAY(test.Delay2;32)",
354 tc.ToCategoryFilterString().c_str()); 373 tc.ToCategoryFilterString().c_str());
(...skipping 16 matching lines...) Expand all
371 390
372 EXPECT_TRUE(tc.IsCategoryGroupEnabled("included,excluded")); 391 EXPECT_TRUE(tc.IsCategoryGroupEnabled("included,excluded"));
373 EXPECT_FALSE(tc.IsCategoryGroupEnabled("excluded,exc_pattern_category")); 392 EXPECT_FALSE(tc.IsCategoryGroupEnabled("excluded,exc_pattern_category"));
374 EXPECT_TRUE(tc.IsCategoryGroupEnabled("included,DELAY(test.Delay1;16)")); 393 EXPECT_TRUE(tc.IsCategoryGroupEnabled("included,DELAY(test.Delay1;16)"));
375 EXPECT_FALSE(tc.IsCategoryGroupEnabled("DELAY(test.Delay1;16)")); 394 EXPECT_FALSE(tc.IsCategoryGroupEnabled("DELAY(test.Delay1;16)"));
376 395
377 EXPECT_EQ(2u, tc.GetSyntheticDelayValues().size()); 396 EXPECT_EQ(2u, tc.GetSyntheticDelayValues().size());
378 EXPECT_STREQ("test.Delay1;16", tc.GetSyntheticDelayValues()[0].c_str()); 397 EXPECT_STREQ("test.Delay1;16", tc.GetSyntheticDelayValues()[0].c_str());
379 EXPECT_STREQ("test.Delay2;32", tc.GetSyntheticDelayValues()[1].c_str()); 398 EXPECT_STREQ("test.Delay2;32", tc.GetSyntheticDelayValues()[1].c_str());
380 399
400 EXPECT_EQ(tc.event_filters().size(), 1u);
401 const TraceConfig::EventFilterConfig& event_filter = tc.event_filters()[0];
402 EXPECT_STREQ(event_filter.predicate_name().c_str(),
Primiano Tucci (use gerrit) 2016/05/31 15:41:23 I think you want to invert the operands. EXPECT_EQ
oystein (OOO til 10th of July) 2016/08/01 13:39:48 Done.
403 "event_whitelist_predicate");
404 EXPECT_EQ(event_filter.included_categories().size(), 1u);
Primiano Tucci (use gerrit) 2016/05/31 15:41:23 ditto: all these arguments should be flipped.
oystein (OOO til 10th of July) 2016/08/01 13:39:48 Done.
405 EXPECT_STREQ(event_filter.included_categories()[0].c_str(), "*");
406 EXPECT_EQ(event_filter.excluded_categories().size(), 1u);
407 EXPECT_STREQ(event_filter.excluded_categories()[0].c_str(), "unfiltered_cat");
408 EXPECT_TRUE(event_filter.filter_args());
409
410 std::string json_out;
411 base::JSONWriter::Write(*event_filter.filter_args(), &json_out);
412 EXPECT_STREQ(json_out.c_str(),
413 "{\"event_name_whitelist\":[\"a snake\",\"a dog\"]}");
414
381 const char config_string_2[] = "{\"included_categories\":[\"*\"]}"; 415 const char config_string_2[] = "{\"included_categories\":[\"*\"]}";
382 TraceConfig tc2(config_string_2); 416 TraceConfig tc2(config_string_2);
383 EXPECT_TRUE(tc2.IsCategoryEnabled("non-disabled-by-default-pattern")); 417 EXPECT_TRUE(tc2.IsCategoryEnabled("non-disabled-by-default-pattern"));
384 EXPECT_FALSE(tc2.IsCategoryEnabled("disabled-by-default-pattern")); 418 EXPECT_FALSE(tc2.IsCategoryEnabled("disabled-by-default-pattern"));
385 EXPECT_TRUE(tc2.IsCategoryGroupEnabled("non-disabled-by-default-pattern")); 419 EXPECT_TRUE(tc2.IsCategoryGroupEnabled("non-disabled-by-default-pattern"));
386 EXPECT_FALSE(tc2.IsCategoryGroupEnabled("disabled-by-default-pattern")); 420 EXPECT_FALSE(tc2.IsCategoryGroupEnabled("disabled-by-default-pattern"));
387 421
388 // Clear 422 // Clear
389 tc.Clear(); 423 tc.Clear();
390 EXPECT_STREQ(tc.ToString().c_str(), 424 EXPECT_STREQ(tc.ToString().c_str(),
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
604 EXPECT_NE(std::string::npos, tc.ToString().find("memory_dump_config")); 638 EXPECT_NE(std::string::npos, tc.ToString().find("memory_dump_config"));
605 EXPECT_EQ(2u, tc.memory_dump_config_.triggers.size()); 639 EXPECT_EQ(2u, tc.memory_dump_config_.triggers.size());
606 EXPECT_EQ(TraceConfig::MemoryDumpConfig::HeapProfiler 640 EXPECT_EQ(TraceConfig::MemoryDumpConfig::HeapProfiler
607 ::kDefaultBreakdownThresholdBytes, 641 ::kDefaultBreakdownThresholdBytes,
608 tc.memory_dump_config_.heap_profiler_options 642 tc.memory_dump_config_.heap_profiler_options
609 .breakdown_threshold_bytes); 643 .breakdown_threshold_bytes);
610 } 644 }
611 645
612 } // namespace trace_event 646 } // namespace trace_event
613 } // namespace base 647 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698