| // Copyright 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "components/services/heap_profiling/public/cpp/switches.h" |
| #include "base/allocator/buildflags.h" |
| #include "base/command_line.h" |
| #include "base/test/scoped_command_line.h" |
| #include "base/test/scoped_feature_list.h" |
| #include "components/services/heap_profiling/public/cpp/settings.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace heap_profiling { |
| |
| #if BUILDFLAG(USE_ALLOCATOR_SHIM) |
| |
| TEST(HeapProfilingSwitches, GetModeForStartup_Default) { |
| EXPECT_EQ(Mode::kNone, GetModeForStartup()); |
| } |
| |
| TEST(HeapProfilingSwitches, GetModeForStartup_Commandline) { |
| { |
| base::test::ScopedCommandLine scoped_command_line; |
| base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(kMemlog, ""); |
| EXPECT_EQ(Mode::kNone, GetModeForStartup()); |
| } |
| |
| { |
| base::test::ScopedCommandLine scoped_command_line; |
| base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(kMemlog, |
| "invalid"); |
| EXPECT_EQ(Mode::kNone, GetModeForStartup()); |
| } |
| |
| { |
| base::test::ScopedCommandLine scoped_command_line; |
| base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(kMemlog, |
| kMemlogModeAll); |
| EXPECT_EQ(Mode::kAll, GetModeForStartup()); |
| } |
| |
| { |
| base::test::ScopedCommandLine scoped_command_line; |
| base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
| kMemlog, kMemlogModeBrowser); |
| EXPECT_EQ(Mode::kBrowser, GetModeForStartup()); |
| } |
| |
| { |
| base::test::ScopedCommandLine scoped_command_line; |
| base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
| kMemlog, kMemlogModeMinimal); |
| EXPECT_EQ(Mode::kMinimal, GetModeForStartup()); |
| } |
| |
| { |
| base::test::ScopedCommandLine scoped_command_line; |
| base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(kMemlog, |
| kMemlogModeGpu); |
| EXPECT_EQ(Mode::kGpu, GetModeForStartup()); |
| } |
| |
| { |
| base::test::ScopedCommandLine scoped_command_line; |
| base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
| kMemlog, kMemlogModeRendererSampling); |
| EXPECT_EQ(Mode::kRendererSampling, GetModeForStartup()); |
| } |
| } |
| |
| TEST(HeapProfilingSwitches, GetModeForStartup_Finch) { |
| EXPECT_EQ(Mode::kNone, GetModeForStartup()); |
| std::map<std::string, std::string> parameters; |
| |
| { |
| base::test::ScopedFeatureList scoped_feature_list; |
| parameters[kOOPHeapProfilingFeatureMode] = ""; |
| scoped_feature_list.InitAndEnableFeatureWithParameters( |
| kOOPHeapProfilingFeature, parameters); |
| |
| EXPECT_EQ(Mode::kNone, GetModeForStartup()); |
| } |
| |
| { |
| base::test::ScopedFeatureList scoped_feature_list; |
| parameters[kOOPHeapProfilingFeatureMode] = "invalid"; |
| scoped_feature_list.InitAndEnableFeatureWithParameters( |
| kOOPHeapProfilingFeature, parameters); |
| EXPECT_EQ(Mode::kNone, GetModeForStartup()); |
| } |
| |
| { |
| base::test::ScopedFeatureList scoped_feature_list; |
| parameters[kOOPHeapProfilingFeatureMode] = kMemlogModeAll; |
| scoped_feature_list.InitAndEnableFeatureWithParameters( |
| kOOPHeapProfilingFeature, parameters); |
| EXPECT_EQ(Mode::kAll, GetModeForStartup()); |
| } |
| |
| { |
| base::test::ScopedFeatureList scoped_feature_list; |
| parameters[kOOPHeapProfilingFeatureMode] = kMemlogModeBrowser; |
| scoped_feature_list.InitAndEnableFeatureWithParameters( |
| kOOPHeapProfilingFeature, parameters); |
| EXPECT_EQ(Mode::kBrowser, GetModeForStartup()); |
| } |
| |
| { |
| base::test::ScopedFeatureList scoped_feature_list; |
| parameters[kOOPHeapProfilingFeatureMode] = kMemlogModeMinimal; |
| scoped_feature_list.InitAndEnableFeatureWithParameters( |
| kOOPHeapProfilingFeature, parameters); |
| EXPECT_EQ(Mode::kMinimal, GetModeForStartup()); |
| } |
| |
| { |
| base::test::ScopedFeatureList scoped_feature_list; |
| parameters[kOOPHeapProfilingFeatureMode] = kMemlogModeGpu; |
| scoped_feature_list.InitAndEnableFeatureWithParameters( |
| kOOPHeapProfilingFeature, parameters); |
| EXPECT_EQ(Mode::kGpu, GetModeForStartup()); |
| } |
| |
| { |
| base::test::ScopedFeatureList scoped_feature_list; |
| parameters[kOOPHeapProfilingFeatureMode] = kMemlogModeRendererSampling; |
| scoped_feature_list.InitAndEnableFeatureWithParameters( |
| kOOPHeapProfilingFeature, parameters); |
| EXPECT_EQ(Mode::kRendererSampling, GetModeForStartup()); |
| } |
| } |
| |
| // Ensure the commandline overrides any given field trial. |
| TEST(HeapProfilingSwitches, GetModeForStartup_CommandLinePrecedence) { |
| base::test::ScopedCommandLine scoped_command_line; |
| base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(kMemlog, |
| kMemlogModeAll); |
| |
| base::test::ScopedFeatureList scoped_feature_list; |
| std::map<std::string, std::string> parameters; |
| parameters[kOOPHeapProfilingFeatureMode] = kMemlogModeMinimal; |
| scoped_feature_list.InitAndEnableFeatureWithParameters( |
| kOOPHeapProfilingFeature, parameters); |
| |
| EXPECT_EQ(Mode::kAll, GetModeForStartup()); |
| } |
| |
| #else |
| |
| TEST(HeapProfilingSwitches, GetModeForStartup_NoModeWithoutShim) { |
| { |
| base::test::ScopedCommandLine scoped_command_line; |
| base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(kMemlog, |
| kMemlogModeAll); |
| EXPECT_EQ(Mode::kNone, GetModeForStartup()); |
| } |
| |
| { |
| base::test::ScopedFeatureList scoped_feature_list; |
| std::map<std::string, std::string> parameters; |
| parameters[kOOPHeapProfilingFeatureMode] = kMemlogModeMinimal; |
| scoped_feature_list.InitAndEnableFeatureWithParameters( |
| kOOPHeapProfilingFeature, parameters); |
| EXPECT_EQ(Mode::kNone, GetModeForStartup()); |
| } |
| } |
| |
| #endif |
| |
| } // namespace heap_profiling |