| OLD | NEW |
| 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 "\"record_mode\":\"record-until-full\"" | 25 "\"record_mode\":\"record-until-full\"" |
| 25 "}"; | 26 "}"; |
| 26 | 27 |
| 27 const char kCustomTraceConfigString[] = | 28 const char kCustomTraceConfigString[] = |
| 28 "{" | 29 "{" |
| 29 "\"enable_argument_filter\":true," | 30 "\"enable_argument_filter\":true," |
| 30 "\"enable_sampling\":true," | 31 "\"enable_sampling\":true," |
| 31 "\"enable_systrace\":true," | 32 "\"enable_systrace\":true," |
| 33 "\"event_filters\":[" |
| 34 "{" |
| 35 "\"excluded_categories\":[\"unfiltered_cat\"]," |
| 36 "\"filter_args\":{\"event_name_whitelist\":[\"a snake\",\"a dog\"]}," |
| 37 "\"filter_predicate\":\"event_whitelist_predicate\"," |
| 38 "\"included_categories\":[\"*\"]" |
| 39 "}" |
| 40 "]," |
| 32 "\"excluded_categories\":[\"excluded\",\"exc_pattern*\"]," | 41 "\"excluded_categories\":[\"excluded\",\"exc_pattern*\"]," |
| 33 "\"included_categories\":[\"included\"," | 42 "\"included_categories\":[\"included\"," |
| 34 "\"inc_pattern*\"," | 43 "\"inc_pattern*\"," |
| 35 "\"disabled-by-default-cc\"," | 44 "\"disabled-by-default-cc\"," |
| 36 "\"disabled-by-default-memory-infra\"]," | 45 "\"disabled-by-default-memory-infra\"]," |
| 37 "\"memory_dump_config\":{" | 46 "\"memory_dump_config\":{" |
| 38 "\"allowed_dump_modes\":[\"background\",\"light\",\"detailed\"]," | 47 "\"allowed_dump_modes\":[\"background\",\"light\",\"detailed\"]," |
| 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 void CheckDefaultTraceConfigBehavior(const TraceConfig& tc) { | 60 void CheckDefaultTraceConfigBehavior(const TraceConfig& tc) { |
| 52 EXPECT_EQ(RECORD_UNTIL_FULL, tc.GetTraceRecordMode()); | 61 EXPECT_EQ(RECORD_UNTIL_FULL, tc.GetTraceRecordMode()); |
| 53 EXPECT_FALSE(tc.IsSamplingEnabled()); | 62 EXPECT_FALSE(tc.IsSamplingEnabled()); |
| 54 EXPECT_FALSE(tc.IsSystraceEnabled()); | 63 EXPECT_FALSE(tc.IsSystraceEnabled()); |
| 55 EXPECT_FALSE(tc.IsArgumentFilterEnabled()); | 64 EXPECT_FALSE(tc.IsArgumentFilterEnabled()); |
| 56 | 65 |
| 57 // Default trace config enables every category filter except the | 66 // Default trace config enables every category filter except the |
| 58 // disabled-by-default-* ones. | 67 // disabled-by-default-* ones. |
| 59 EXPECT_TRUE(tc.IsCategoryGroupEnabled("Category1")); | 68 EXPECT_TRUE(tc.IsCategoryGroupEnabled("Category1")); |
| (...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 323 | 332 |
| 324 TEST(TraceConfigTest, DisabledByDefaultCategoryFilterString) { | 333 TEST(TraceConfigTest, DisabledByDefaultCategoryFilterString) { |
| 325 TraceConfig tc("foo,disabled-by-default-foo", ""); | 334 TraceConfig tc("foo,disabled-by-default-foo", ""); |
| 326 EXPECT_STREQ("foo,disabled-by-default-foo", | 335 EXPECT_STREQ("foo,disabled-by-default-foo", |
| 327 tc.ToCategoryFilterString().c_str()); | 336 tc.ToCategoryFilterString().c_str()); |
| 328 EXPECT_TRUE(tc.IsCategoryGroupEnabled("foo")); | 337 EXPECT_TRUE(tc.IsCategoryGroupEnabled("foo")); |
| 329 EXPECT_TRUE(tc.IsCategoryGroupEnabled("disabled-by-default-foo")); | 338 EXPECT_TRUE(tc.IsCategoryGroupEnabled("disabled-by-default-foo")); |
| 330 EXPECT_FALSE(tc.IsCategoryGroupEnabled("bar")); | 339 EXPECT_FALSE(tc.IsCategoryGroupEnabled("bar")); |
| 331 EXPECT_FALSE(tc.IsCategoryGroupEnabled("disabled-by-default-bar")); | 340 EXPECT_FALSE(tc.IsCategoryGroupEnabled("disabled-by-default-bar")); |
| 332 | 341 |
| 342 EXPECT_TRUE(tc.event_filters().empty()); |
| 333 // Enabling only the disabled-by-default-* category means the default ones | 343 // Enabling only the disabled-by-default-* category means the default ones |
| 334 // are also enabled. | 344 // are also enabled. |
| 335 tc = TraceConfig("disabled-by-default-foo", ""); | 345 tc = TraceConfig("disabled-by-default-foo", ""); |
| 336 EXPECT_STREQ("disabled-by-default-foo", tc.ToCategoryFilterString().c_str()); | 346 EXPECT_STREQ("disabled-by-default-foo", tc.ToCategoryFilterString().c_str()); |
| 337 EXPECT_TRUE(tc.IsCategoryGroupEnabled("disabled-by-default-foo")); | 347 EXPECT_TRUE(tc.IsCategoryGroupEnabled("disabled-by-default-foo")); |
| 338 EXPECT_TRUE(tc.IsCategoryGroupEnabled("foo")); | 348 EXPECT_TRUE(tc.IsCategoryGroupEnabled("foo")); |
| 339 EXPECT_TRUE(tc.IsCategoryGroupEnabled("bar")); | 349 EXPECT_TRUE(tc.IsCategoryGroupEnabled("bar")); |
| 340 EXPECT_FALSE(tc.IsCategoryGroupEnabled("disabled-by-default-bar")); | 350 EXPECT_FALSE(tc.IsCategoryGroupEnabled("disabled-by-default-bar")); |
| 341 } | 351 } |
| 342 | 352 |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 380 EXPECT_STREQ("included,inc_pattern*," | 390 EXPECT_STREQ("included,inc_pattern*," |
| 381 "disabled-by-default-cc,disabled-by-default-memory-infra," | 391 "disabled-by-default-cc,disabled-by-default-memory-infra," |
| 382 "-excluded,-exc_pattern*," | 392 "-excluded,-exc_pattern*," |
| 383 "DELAY(test.Delay1;16),DELAY(test.Delay2;32)", | 393 "DELAY(test.Delay1;16),DELAY(test.Delay2;32)", |
| 384 custom_tc.ToCategoryFilterString().c_str()); | 394 custom_tc.ToCategoryFilterString().c_str()); |
| 385 } | 395 } |
| 386 | 396 |
| 387 TEST(TraceConfigTest, TraceConfigFromValidString) { | 397 TEST(TraceConfigTest, TraceConfigFromValidString) { |
| 388 // Using some non-empty config string. | 398 // Using some non-empty config string. |
| 389 const char config_string[] = | 399 const char config_string[] = |
| 390 "{" | 400 "{" |
| 391 "\"enable_argument_filter\":true," | 401 "\"enable_argument_filter\":true," |
| 392 "\"enable_sampling\":true," | 402 "\"enable_sampling\":true," |
| 393 "\"enable_systrace\":true," | 403 "\"enable_systrace\":true," |
| 404 "\"event_filters\":[" |
| 405 "{" |
| 406 "\"excluded_categories\":[\"unfiltered_cat\"]," |
| 407 "\"filter_args\":{\"event_name_whitelist\":[\"a snake\",\"a dog\"]}," |
| 408 "\"filter_predicate\":\"event_whitelist_predicate\"," |
| 409 "\"included_categories\":[\"*\"]" |
| 410 "}" |
| 411 "]," |
| 394 "\"excluded_categories\":[\"excluded\",\"exc_pattern*\"]," | 412 "\"excluded_categories\":[\"excluded\",\"exc_pattern*\"]," |
| 395 "\"included_categories\":[\"included\"," | 413 "\"included_categories\":[\"included\"," |
| 396 "\"inc_pattern*\"," | 414 "\"inc_pattern*\"," |
| 397 "\"disabled-by-default-cc\"]," | 415 "\"disabled-by-default-cc\"]," |
| 398 "\"record_mode\":\"record-continuously\"," | 416 "\"record_mode\":\"record-continuously\"," |
| 399 "\"synthetic_delays\":[\"test.Delay1;16\",\"test.Delay2;32\"]" | 417 "\"synthetic_delays\":[\"test.Delay1;16\",\"test.Delay2;32\"]" |
| 400 "}"; | 418 "}"; |
| 401 TraceConfig tc(config_string); | 419 TraceConfig tc(config_string); |
| 402 | 420 |
| 403 EXPECT_STREQ(config_string, tc.ToString().c_str()); | 421 EXPECT_STREQ(config_string, tc.ToString().c_str()); |
| 404 EXPECT_EQ(RECORD_CONTINUOUSLY, tc.GetTraceRecordMode()); | 422 EXPECT_EQ(RECORD_CONTINUOUSLY, tc.GetTraceRecordMode()); |
| 405 EXPECT_TRUE(tc.IsSamplingEnabled()); | 423 EXPECT_TRUE(tc.IsSamplingEnabled()); |
| 406 EXPECT_TRUE(tc.IsSystraceEnabled()); | 424 EXPECT_TRUE(tc.IsSystraceEnabled()); |
| 407 EXPECT_TRUE(tc.IsArgumentFilterEnabled()); | 425 EXPECT_TRUE(tc.IsArgumentFilterEnabled()); |
| 408 EXPECT_STREQ("included,inc_pattern*,disabled-by-default-cc,-excluded," | 426 EXPECT_STREQ("included,inc_pattern*,disabled-by-default-cc,-excluded," |
| 409 "-exc_pattern*,DELAY(test.Delay1;16),DELAY(test.Delay2;32)", | 427 "-exc_pattern*,DELAY(test.Delay1;16),DELAY(test.Delay2;32)", |
| 410 tc.ToCategoryFilterString().c_str()); | 428 tc.ToCategoryFilterString().c_str()); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 427 | 445 |
| 428 EXPECT_TRUE(tc.IsCategoryGroupEnabled("included,excluded")); | 446 EXPECT_TRUE(tc.IsCategoryGroupEnabled("included,excluded")); |
| 429 EXPECT_FALSE(tc.IsCategoryGroupEnabled("excluded,exc_pattern_category")); | 447 EXPECT_FALSE(tc.IsCategoryGroupEnabled("excluded,exc_pattern_category")); |
| 430 EXPECT_TRUE(tc.IsCategoryGroupEnabled("included,DELAY(test.Delay1;16)")); | 448 EXPECT_TRUE(tc.IsCategoryGroupEnabled("included,DELAY(test.Delay1;16)")); |
| 431 EXPECT_FALSE(tc.IsCategoryGroupEnabled("DELAY(test.Delay1;16)")); | 449 EXPECT_FALSE(tc.IsCategoryGroupEnabled("DELAY(test.Delay1;16)")); |
| 432 | 450 |
| 433 EXPECT_EQ(2u, tc.GetSyntheticDelayValues().size()); | 451 EXPECT_EQ(2u, tc.GetSyntheticDelayValues().size()); |
| 434 EXPECT_STREQ("test.Delay1;16", tc.GetSyntheticDelayValues()[0].c_str()); | 452 EXPECT_STREQ("test.Delay1;16", tc.GetSyntheticDelayValues()[0].c_str()); |
| 435 EXPECT_STREQ("test.Delay2;32", tc.GetSyntheticDelayValues()[1].c_str()); | 453 EXPECT_STREQ("test.Delay2;32", tc.GetSyntheticDelayValues()[1].c_str()); |
| 436 | 454 |
| 455 EXPECT_EQ(tc.event_filters().size(), 1u); |
| 456 const TraceConfig::EventFilterConfig& event_filter = tc.event_filters()[0]; |
| 457 EXPECT_STREQ("event_whitelist_predicate", |
| 458 event_filter.predicate_name().c_str()); |
| 459 EXPECT_EQ(1u, event_filter.included_categories().size()); |
| 460 EXPECT_STREQ("*", event_filter.included_categories()[0].c_str()); |
| 461 EXPECT_EQ(1u, event_filter.excluded_categories().size()); |
| 462 EXPECT_STREQ("unfiltered_cat", event_filter.excluded_categories()[0].c_str()); |
| 463 EXPECT_TRUE(event_filter.filter_args()); |
| 464 |
| 465 std::string json_out; |
| 466 base::JSONWriter::Write(*event_filter.filter_args(), &json_out); |
| 467 EXPECT_STREQ(json_out.c_str(), |
| 468 "{\"event_name_whitelist\":[\"a snake\",\"a dog\"]}"); |
| 469 |
| 437 const char config_string_2[] = "{\"included_categories\":[\"*\"]}"; | 470 const char config_string_2[] = "{\"included_categories\":[\"*\"]}"; |
| 438 TraceConfig tc2(config_string_2); | 471 TraceConfig tc2(config_string_2); |
| 439 EXPECT_TRUE(tc2.IsCategoryEnabled("non-disabled-by-default-pattern")); | 472 EXPECT_TRUE(tc2.IsCategoryEnabled("non-disabled-by-default-pattern")); |
| 440 EXPECT_FALSE(tc2.IsCategoryEnabled("disabled-by-default-pattern")); | 473 EXPECT_FALSE(tc2.IsCategoryEnabled("disabled-by-default-pattern")); |
| 441 EXPECT_TRUE(tc2.IsCategoryGroupEnabled("non-disabled-by-default-pattern")); | 474 EXPECT_TRUE(tc2.IsCategoryGroupEnabled("non-disabled-by-default-pattern")); |
| 442 EXPECT_FALSE(tc2.IsCategoryGroupEnabled("disabled-by-default-pattern")); | 475 EXPECT_FALSE(tc2.IsCategoryGroupEnabled("disabled-by-default-pattern")); |
| 443 | 476 |
| 444 // Clear | 477 // Clear |
| 445 tc.Clear(); | 478 tc.Clear(); |
| 446 EXPECT_STREQ(tc.ToString().c_str(), | 479 EXPECT_STREQ(tc.ToString().c_str(), |
| (...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 676 EXPECT_NE(std::string::npos, tc.ToString().find("memory_dump_config")); | 709 EXPECT_NE(std::string::npos, tc.ToString().find("memory_dump_config")); |
| 677 EXPECT_EQ(2u, tc.memory_dump_config_.triggers.size()); | 710 EXPECT_EQ(2u, tc.memory_dump_config_.triggers.size()); |
| 678 EXPECT_EQ(TraceConfig::MemoryDumpConfig::HeapProfiler | 711 EXPECT_EQ(TraceConfig::MemoryDumpConfig::HeapProfiler |
| 679 ::kDefaultBreakdownThresholdBytes, | 712 ::kDefaultBreakdownThresholdBytes, |
| 680 tc.memory_dump_config_.heap_profiler_options | 713 tc.memory_dump_config_.heap_profiler_options |
| 681 .breakdown_threshold_bytes); | 714 .breakdown_threshold_bytes); |
| 682 } | 715 } |
| 683 | 716 |
| 684 } // namespace trace_event | 717 } // namespace trace_event |
| 685 } // namespace base | 718 } // namespace base |
| OLD | NEW |