| Index: chrome/common/stack_sampling_configuration.h
|
| diff --git a/chrome/common/stack_sampling_configuration.h b/chrome/common/stack_sampling_configuration.h
|
| index c38c5f2bf6d21937918199905d8508d0271156e9..1400d741590863a1f036beff661c890c14b2c598 100644
|
| --- a/chrome/common/stack_sampling_configuration.h
|
| +++ b/chrome/common/stack_sampling_configuration.h
|
| @@ -5,39 +5,66 @@
|
| #ifndef CHROME_COMMON_STACK_SAMPLING_CONFIGURATION_H_
|
| #define CHROME_COMMON_STACK_SAMPLING_CONFIGURATION_H_
|
|
|
| +#include <string>
|
| +
|
| +#include "base/callback.h"
|
| #include "base/macros.h"
|
| #include "base/profiler/stack_sampling_profiler.h"
|
|
|
| -// Chooses a configuration for the stack sampling profiler for browser process
|
| -// startup. This must live outside of ChromeBrowserMainParts so it can be
|
| -// friended by ChromeMetricsServiceAccessor.
|
| +namespace base {
|
| +class CommandLine;
|
| +} // namespace base
|
| +
|
| +// StackSamplingConfiguration chooses a configuration for the enable state of
|
| +// the stack sampling profiler across all processes. This configuration is
|
| +// determined once at browser process startup. Configurations for child
|
| +// processes are communicated via command line arguments.
|
| class StackSamplingConfiguration {
|
| public:
|
| StackSamplingConfiguration();
|
|
|
| - // Get the stack sampling params to use for this session.
|
| - base::StackSamplingProfiler::SamplingParams GetSamplingParams() const;
|
| + // Get the stack sampling params to use for this process.
|
| + base::StackSamplingProfiler::SamplingParams
|
| + GetSamplingParamsForCurrentProcess() const;
|
|
|
| - // Returns true if the profiler should be started at all.
|
| - bool IsProfilerEnabled() const;
|
| + // Returns true if the profiler should be started for the current process.
|
| + bool IsProfilerEnabledForCurrentProcess() const;
|
|
|
| // Get the synthetic field trial configuration. Returns true if a synthetic
|
| - // field trial should be registered.
|
| + // field trial should be registered. This should only be called from the
|
| + // browser process.
|
| bool GetSyntheticFieldTrial(std::string* trial_name,
|
| std::string* group_name) const;
|
|
|
| + // Add a command line switch that instructs the child process to run the
|
| + // profiler. This should only be called from the browser process.
|
| + void AppendCommandLineSwitchForChildProcess(
|
| + const std::string& process_type,
|
| + base::CommandLine* command_line) const;
|
| +
|
| + // Returns the StackSamplingConfiguration for the process.
|
| + static StackSamplingConfiguration* Get();
|
| +
|
| private:
|
| enum ProfileConfiguration {
|
| + // Chrome-wide configurations set in the browser process.
|
| PROFILE_DISABLED,
|
| PROFILE_CONTROL,
|
| - PROFILE_NO_SAMPLES, // Run the profiler thread, but don't collect profiles.
|
| - PROFILE_5HZ,
|
| - PROFILE_10HZ,
|
| - PROFILE_100HZ
|
| + PROFILE_BROWSER_PROCESS,
|
| + PROFILE_GPU_PROCESS,
|
| + PROFILE_BROWSER_AND_GPU_PROCESS,
|
| +
|
| + // Configuration set in the child processes, which receive their enable
|
| + // state on the command line from the browser process.
|
| + PROFILE_FROM_COMMAND_LINE
|
| };
|
|
|
| + // Generates sampling profiler configurations for all processes.
|
| static ProfileConfiguration GenerateConfiguration();
|
|
|
| + // In the browser process this represents the configuration to use across all
|
| + // Chrome processes. In the child processes it is always
|
| + // PROFILE_FROM_COMMAND_LINE.
|
| const ProfileConfiguration configuration_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(StackSamplingConfiguration);
|
|
|