| // 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. |
| |
| #ifndef THIRD_PARTY_BLINK_PUBLIC_COMMON_EXPERIMENTS_MEMORY_ABLATION_EXPERIMENT_H_ |
| #define THIRD_PARTY_BLINK_PUBLIC_COMMON_EXPERIMENTS_MEMORY_ABLATION_EXPERIMENT_H_ |
| |
| #include <memory> |
| |
| #include "base/feature_list.h" |
| #include "base/memory/ref_counted.h" |
| #include "third_party/blink/public/common/common_export.h" |
| |
| namespace base { |
| class SequencedTaskRunner; |
| } |
| |
| namespace blink { |
| |
| BLINK_COMMON_EXPORT extern const base::Feature kMemoryAblationFeature; |
| BLINK_COMMON_EXPORT extern const char kMemoryAblationFeatureSizeParam[]; |
| BLINK_COMMON_EXPORT extern const char kMemoryAblationFeatureMinRAMParam[]; |
| BLINK_COMMON_EXPORT extern const char kMemoryAblationFeatureMaxRAMParam[]; |
| |
| /* When enabled, this experiment allocates a chunk of memory to study |
| * correlation between memory usage and performance metrics. |
| */ |
| class BLINK_COMMON_EXPORT MemoryAblationExperiment { |
| public: |
| ~MemoryAblationExperiment(); |
| |
| // Starts the experiment if corresponding field trial is enabled |
| static void MaybeStart(scoped_refptr<base::SequencedTaskRunner> task_runner); |
| static void MaybeStartForRenderer( |
| scoped_refptr<base::SequencedTaskRunner> task_runner); |
| |
| private: |
| MemoryAblationExperiment(); |
| |
| static void MaybeStartInternal( |
| const base::Feature& memory_ablation_feature, |
| scoped_refptr<base::SequencedTaskRunner> task_runner); |
| void Start(scoped_refptr<base::SequencedTaskRunner> task_runner, size_t size); |
| |
| void AllocateMemory(size_t size); |
| void TouchMemory(size_t offset); |
| void ScheduleTouchMemory(size_t offset); |
| |
| static MemoryAblationExperiment* GetInstance(); |
| |
| scoped_refptr<base::SequencedTaskRunner> task_runner_; |
| size_t memory_size_ = 0; |
| std::unique_ptr<uint8_t[]> memory_; |
| }; |
| |
| } // namespace blink |
| |
| #endif // THIRD_PARTY_BLINK_PUBLIC_COMMON_EXPERIMENTS_MEMORY_ABLATION_EXPERIMENT_H_ |